diff --git a/docs/integration-2026-10-06-evidence/busy-tests.log b/docs/integration-2026-10-06-evidence/busy-tests.log new file mode 100644 index 0000000..6767363 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/busy-tests.log @@ -0,0 +1,5 @@ +..................... +---------------------------------------------------------------------- +Ran 21 tests in 0.038s + +OK diff --git a/docs/integration-2026-10-06-evidence/candidate-manifest.json b/docs/integration-2026-10-06-evidence/candidate-manifest.json new file mode 100644 index 0000000..609b290 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/candidate-manifest.json @@ -0,0 +1,6436 @@ +{ + "sourceRoot": "/home/adom/project/fusion-pr10-current", + "master": "52221e25dcbe11ebccb2dfdaac98c81dec7b8931", + "branch": "7be40e9021c13ad430c28e108a6bf544d3f9481c", + "commonAncestor": "a721e84613f6744bb837cfb7b828795abbc565f5", + "publicVerbs": 179, + "mechanicalOperations": 54, + "masterExistingCatalogChanged": [ + "fusion_mcp_call" + ], + "versionFilesUnchanged": [ + "BRIDGE_VERSION", + "adom-bridge-fusion-manifest.json", + "rust/Cargo.toml", + "rust/Cargo.lock", + "dashboard/Cargo.toml", + "dashboard/Cargo.lock", + "addin/AdomBridge/AdomBridge.manifest" + ], + "nativeMergedAcceptance": "PENDING", + "changedFiles": [ + "CHANGELOG.md", + "README.md", + "SKILL.md", + "addin/AdomBridge/AdomBridge.py", + "addin/AdomBridge/commands/__init__.py", + "addin/AdomBridge/commands/assembly_bom.py", + "addin/AdomBridge/commands/cloud_documents.py", + "addin/AdomBridge/commands/export.py", + "addin/AdomBridge/commands/mechanical/__init__.py", + "addin/AdomBridge/commands/mechanical/assemblies.py", + "addin/AdomBridge/commands/mechanical/assembly_state.py", + "addin/AdomBridge/commands/mechanical/bill_of_materials.py", + "addin/AdomBridge/commands/mechanical/configurations.py", + "addin/AdomBridge/commands/mechanical/core.py", + "addin/AdomBridge/commands/mechanical/exporting.py", + "addin/AdomBridge/commands/mechanical/features.py", + "addin/AdomBridge/commands/mechanical/geometry.py", + "addin/AdomBridge/commands/mechanical/joint_state.py", + "addin/AdomBridge/commands/mechanical/journal.py", + "addin/AdomBridge/commands/mechanical/motion_links.py", + "addin/AdomBridge/commands/mechanical/operation_history.py", + "addin/AdomBridge/commands/mechanical/operations.py", + "addin/AdomBridge/commands/mechanical/purchased.py", + "addin/AdomBridge/commands/mechanical/readback.py", + "addin/AdomBridge/commands/mechanical/regular_joints.py", + "addin/AdomBridge/commands/mechanical/schema.json", + "addin/AdomBridge/commands/mechanical/sketch_edits.py", + "addin/AdomBridge/commands/mechanical/sketches.py", + "addin/AdomBridge/commands/mechanical/transactions.py", + "addin/AdomBridge/commands/physical_properties.py", + "addin/AdomBridge/http_server.py", + "bridge.json", + "contracts/describe.json", + "describe.py", + "docs/CP8-ACCEPTANCE.md", + "docs/EXPLODED-VIEWS.md", + "docs/MECHANICAL.md", + "docs/TESTING.md", + "docs/build-2026-10-02-2.md", + "docs/build-2026-10-02.md", + "docs/build-2026-10-05-assemblies.md", + "docs/build-2026-10-05-jobs.md", + "docs/build-2026-10-05.md", + "docs/implementation-roadmap.md", + "docs/integration-2026-10-06.md", + "docs/mechanical-build-plan.md", + "docs/mechanical-comparison/ACTION-MATRIX.md", + "docs/mechanical-comparison/CHECKPOINT-STATUS.md", + "docs/mechanical-comparison/FEATURE-MATRIX.md", + "docs/mechanical-comparison/PROTOCOL-MATRIX.md", + "docs/mechanical-comparison/README.md", + "docs/mechanical-comparison/REMAINING-GAPS.md", + "docs/mechanical-comparison/action-features.csv", + "docs/mechanical-comparison/action-features.json", + "docs/mechanical-comparison/additional-completeness.json", + "docs/mechanical-comparison/additional-source-review.md", + "docs/mechanical-comparison/autodesk-compute.md", + "docs/mechanical-comparison/autodesk-desktop-2026-10-05/README.md", + "docs/mechanical-comparison/autodesk-desktop-2026-10-05/manifest.json", + "docs/mechanical-comparison/autodesk-desktop-2026-10-05/selectors.csv", + "docs/mechanical-comparison/autodesk-desktop-2026-10-05/tools.json", + "docs/mechanical-comparison/autodesk-desktop-tools.json", + "docs/mechanical-comparison/external-features.csv", + "docs/mechanical-comparison/external-features.json", + "docs/mechanical-comparison/external-source-caveats.md", + "docs/mechanical-comparison/licenses/FusionMCPSample-LICENSE.txt", + "docs/mechanical-comparison/licenses/Justus-LICENSE.txt", + "docs/mechanical-comparison/licenses/Poyraxx-LICENSE.txt", + "docs/mechanical-comparison/licenses/artapo-LICENSE.txt", + "docs/mechanical-comparison/licenses/artapo-NOTICE.txt", + "docs/mechanical-comparison/licenses/f360mcp-LICENSE.txt", + "docs/mechanical-comparison/licenses/faust-LICENSE.txt", + "docs/mechanical-comparison/licenses/frankhommers-LICENSE.txt", + "docs/mechanical-comparison/licenses/fusion-cam-mcp-LICENSE.txt", + "docs/mechanical-comparison/licenses/mcp-fusion360-LICENSE.txt", + "docs/mechanical-comparison/licenses/ncmlabs-LICENSE.txt", + "docs/mechanical-comparison/licenses/prim-LICENSE.txt", + "docs/mechanical-comparison/licenses/ulfandpete-LICENSE.txt", + "docs/mechanical-comparison/licenses/zkbkb-LICENSE.txt", + "docs/mechanical-comparison/mcmaster-and-bom.md", + "docs/mechanical-comparison/official-features.json", + "docs/mechanical-comparison/protocol-features.json", + "docs/mechanical-comparison/solidworks-catalog.json", + "docs/mechanical-comparison/solidworks-parity.md", + "docs/mechanical-verification/CAPTURE-POLICY.md", + "docs/mechanical-verification/CP1-VERIFICATION.md", + "docs/mechanical-verification/CP2-VERIFICATION.md", + "docs/mechanical-verification/CP3-LIVE-FINDINGS.md", + "docs/mechanical-verification/CP3-SOURCE-REVIEW.md", + "docs/mechanical-verification/CP3-VERIFICATION.md", + "docs/mechanical-verification/CP4-ADVERSARY.md", + "docs/mechanical-verification/CP5-ACCEPTANCE.md", + "docs/mechanical-verification/CP5-RUNNER-REVIEW.md", + "docs/mechanical-verification/CP5-SOURCE-REVIEW.md", + "docs/mechanical-verification/CP6-ACCEPTANCE.md", + "docs/mechanical-verification/CP6-EVIDENCE-REVIEW.md", + "docs/mechanical-verification/CP6-RECOVERY-REVIEW.md", + "docs/mechanical-verification/CP6-SOURCE-REVIEW.md", + "docs/mechanical-verification/CP7-ACCEPTANCE.md", + "docs/mechanical-verification/cp3-artifact-hashes.json", + "docs/mechanical-verification/cp3-final-accounting.json", + "docs/mechanical-verification/cp3-final-adjudicated-summary.json", + "docs/mechanical-verification/cp4-assembly.png", + "docs/mechanical-verification/cp4-bracket.png", + "docs/mechanical-verification/cp4-supplier.png", + "docs/mechanical-verification/cp4-verification.json", + "docs/mechanical-verification/cp5-assembly.png", + "docs/mechanical-verification/cp5-axes.png", + "docs/mechanical-verification/cp5-axis_context.png", + "docs/mechanical-verification/cp5-bracket.png", + "docs/mechanical-verification/cp5-curve_break.png", + "docs/mechanical-verification/cp5-curve_extend.png", + "docs/mechanical-verification/cp5-curve_split.png", + "docs/mechanical-verification/cp5-curve_trim.png", + "docs/mechanical-verification/cp5-diagnostics.png", + "docs/mechanical-verification/cp5-measurements.png", + "docs/mechanical-verification/cp5-offset_chain.png", + "docs/mechanical-verification/cp5-offset_negative.png", + "docs/mechanical-verification/cp5-offset_positive.png", + "docs/mechanical-verification/cp5-persistence_graph.png", + "docs/mechanical-verification/cp5-query_contexts.png", + "docs/mechanical-verification/cp5-query_root.png", + "docs/mechanical-verification/cp5-verification.json", + "docs/mechanical-verification/cp6-asbuilt-1.png", + "docs/mechanical-verification/cp6-legacy_regressions-1.png", + "docs/mechanical-verification/cp6-legacy_regressions-5.png", + "docs/mechanical-verification/cp6-link_single-1.png", + "docs/mechanical-verification/cp6-links_two-1.png", + "docs/mechanical-verification/cp6-links_two-3.png", + "docs/mechanical-verification/cp6-nested_context-1.png", + "docs/mechanical-verification/cp6-origins-1.png", + "docs/mechanical-verification/cp6-placement_frames-1.png", + "docs/mechanical-verification/cp6-redefinition-1.png", + "docs/mechanical-verification/cp6-regular_ball-1.png", + "docs/mechanical-verification/cp6-regular_cylindrical-1.png", + "docs/mechanical-verification/cp6-regular_pin_slot-1.png", + "docs/mechanical-verification/cp6-regular_planar-1.png", + "docs/mechanical-verification/cp6-regular_revolute-1.png", + "docs/mechanical-verification/cp6-regular_rigid-1.png", + "docs/mechanical-verification/cp6-regular_slider-1.png", + "docs/mechanical-verification/cp6-root_attachment-1.png", + "docs/mechanical-verification/cp6-verification.json", + "docs/mechanical-verification/cp8/accepted-scope.json", + "docs/mechanical-verification/cp8/busy/calls/0001-run_script.json", + "docs/mechanical-verification/cp8/busy/calls/0002-fusion_state.json", + "docs/mechanical-verification/cp8/busy/calls/0003-fusion_document_info.json", + "docs/mechanical-verification/cp8/busy/calls/0004-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/busy/calls/0005-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/busy/calls/0006-run_script.json", + "docs/mechanical-verification/cp8/busy/calls/0007-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/busy/calls/0008-run_script.json", + "docs/mechanical-verification/cp8/busy/calls/0009-run_script.json", + "docs/mechanical-verification/cp8/busy/calls/0010-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/busy/hold-calls/0001-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/busy/host-clock.ps1", + "docs/mechanical-verification/cp8/busy/host-entered.ps1", + "docs/mechanical-verification/cp8/busy/host-final.ps1", + "docs/mechanical-verification/cp8/busy/host-initial.ps1", + "docs/mechanical-verification/cp8/busy/native-hold.py", + "docs/mechanical-verification/cp8/busy/native-preflight.py", + "docs/mechanical-verification/cp8/busy/qualified-offline/manifest.json", + "docs/mechanical-verification/cp8/busy/qualified-offline/native-r1-qualified.json", + "docs/mechanical-verification/cp8/busy/qualified-offline/qualify-native-r1.py", + "docs/mechanical-verification/cp8/busy/report.json", + "docs/mechanical-verification/cp8/busy-maintained-qualification.json", + "docs/mechanical-verification/cp8/evidence-manifest.json", + "docs/mechanical-verification/cp8/history-snapshot.json", + "docs/mechanical-verification/cp8/installed-file-verification.json", + "docs/mechanical-verification/cp8/installed-package.json", + "docs/mechanical-verification/cp8/native-build-reuse.json", + "docs/mechanical-verification/cp8/offline-accepted-summary.json", + "docs/mechanical-verification/cp8/ordinary/baseline.json", + "docs/mechanical-verification/cp8/ordinary/calls/0001-fusion_state.json", + "docs/mechanical-verification/cp8/ordinary/calls/0002-fusion_addin_status.json", + "docs/mechanical-verification/cp8/ordinary/calls/0003-bridge_list.json", + "docs/mechanical-verification/cp8/ordinary/calls/0004-run_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0005-fusion_document_info.json", + "docs/mechanical-verification/cp8/ordinary/calls/0006-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0007-fusion_get_preferences.json", + "docs/mechanical-verification/cp8/ordinary/calls/0008-fusion_mech_capabilities.json", + "docs/mechanical-verification/cp8/ordinary/calls/0009-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0010-fusion_mech_capabilities.json", + "docs/mechanical-verification/cp8/ordinary/calls/0011-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0012-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0013-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0014-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0015-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0016-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0017-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0018-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0019-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0020-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/ordinary/calls/0021-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0022-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0023-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0024-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0025-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0026-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0027-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0028-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/ordinary/calls/0029-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0030-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0031-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0032-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0033-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0034-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0035-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/ordinary/calls/0036-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0037-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0038-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/ordinary/calls/0039-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0040-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0041-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0042-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/ordinary/calls/0043-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0044-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0045-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/ordinary/calls/0046-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0047-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0048-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0049-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0050-fusion_mechanical.json", + "docs/mechanical-verification/cp8/ordinary/calls/0051-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0052-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0053-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0054-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0055-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0056-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0057-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0058-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0059-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0060-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0061-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp8/ordinary/calls/0062-fusion_get_preferences.json", + "docs/mechanical-verification/cp8/ordinary/calls/0063-fusion_state.json", + "docs/mechanical-verification/cp8/ordinary/calls/0064-fusion_addin_status.json", + "docs/mechanical-verification/cp8/ordinary/calls/0065-bridge_list.json", + "docs/mechanical-verification/cp8/ordinary/calls/0066-run_script.json", + "docs/mechanical-verification/cp8/ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/fusion_harness.py", + "docs/mechanical-verification/cp8/ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_jobs.py", + "docs/mechanical-verification/cp8/ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_mechanical.py", + "docs/mechanical-verification/cp8/ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_support.py", + "docs/mechanical-verification/cp8/ordinary/live-runtime-identity.json", + "docs/mechanical-verification/cp8/ordinary/ownership.json", + "docs/mechanical-verification/cp8/ordinary/report.json", + "docs/mechanical-verification/cp8/ordinary/visual-annotations.json", + "docs/mechanical-verification/cp8/restart/after-native.py", + "docs/mechanical-verification/cp8/restart/before-native.py", + "docs/mechanical-verification/cp8/restart/calls/0001-run_script.json", + "docs/mechanical-verification/cp8/restart/calls/0002-bridge_list.json", + "docs/mechanical-verification/cp8/restart/calls/0003-fusion_get_preferences.json", + "docs/mechanical-verification/cp8/restart/calls/0004-fusion_mcp_call.json", + "docs/mechanical-verification/cp8/restart/calls/0005-run_script.json", + "docs/mechanical-verification/cp8/restart/calls/0006-launch_process.json", + "docs/mechanical-verification/cp8/restart/calls/0007-run_script.json", + "docs/mechanical-verification/cp8/restart/calls/0008-run_script.json", + "docs/mechanical-verification/cp8/restart/calls/0009-run_script.json", + "docs/mechanical-verification/cp8/restart/calls/0010-run_script.json", + "docs/mechanical-verification/cp8/restart/calls/0011-run_script.json", + "docs/mechanical-verification/cp8/restart/calls/0012-fusion_mech_capabilities.json", + "docs/mechanical-verification/cp8/restart/calls/0013-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/restart/calls/0014-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/restart/calls/0015-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/restart/calls/0016-bridge_list.json", + "docs/mechanical-verification/cp8/restart/calls/0017-fusion_get_preferences.json", + "docs/mechanical-verification/cp8/restart/calls/0018-fusion_mcp_call.json", + "docs/mechanical-verification/cp8/restart/close-exact-process.ps1", + "docs/mechanical-verification/cp8/restart/qualified-postcheck/calls/0001-fusion_mcp_call.json", + "docs/mechanical-verification/cp8/restart/qualified-postcheck/calls/0002-fusion_mech_capabilities.json", + "docs/mechanical-verification/cp8/restart/qualified-postcheck/historical-acceptance.json", + "docs/mechanical-verification/cp8/restart/qualified-postcheck/native.py", + "docs/mechanical-verification/cp8/restart/qualified-postcheck/result.json", + "docs/mechanical-verification/cp8/restart/report.json", + "docs/mechanical-verification/cp8/restart-independent-qualification.json", + "docs/mechanical-verification/cp8/restart-preflight-original/before-native.py", + "docs/mechanical-verification/cp8/restart-preflight-original/calls/0001-run_script.json", + "docs/mechanical-verification/cp8/restart-preflight-original/calls/0002-bridge_list.json", + "docs/mechanical-verification/cp8/restart-preflight-original/calls/0003-fusion_get_preferences.json", + "docs/mechanical-verification/cp8/restart-preflight-original/calls/0004-fusion_mcp_call.json", + "docs/mechanical-verification/cp8/restart-preflight-original/report.json", + "docs/mechanical-verification/cp8/runtime-source-manifest.json", + "docs/mechanical-verification/cp8/stale-session/calls/0001-fusion_mechanical.json", + "docs/mechanical-verification/cp8/stale-session/calls/0002-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/stale-session/calls/0003-fusion_mechanical.json", + "docs/mechanical-verification/cp8/stale-session/calls/0004-fusion_mechanical.json", + "docs/mechanical-verification/cp8/stale-session/calls/0005-fusion_mech_operation_status.json", + "docs/mechanical-verification/cp8/stale-session/report.json", + "docs/mechanical-verification/cp9-readonly/accepted-diagnostic.json", + "docs/mechanical-verification/cp9-readonly/baseline.json", + "docs/mechanical-verification/cp9-readonly/calls/0001-fusion_state.json", + "docs/mechanical-verification/cp9-readonly/calls/0002-fusion_addin_status.json", + "docs/mechanical-verification/cp9-readonly/calls/0003-bridge_list.json", + "docs/mechanical-verification/cp9-readonly/calls/0004-run_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0005-fusion_document_info.json", + "docs/mechanical-verification/cp9-readonly/calls/0006-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0007-fusion_get_preferences.json", + "docs/mechanical-verification/cp9-readonly/calls/0008-fusion_mech_capabilities.json", + "docs/mechanical-verification/cp9-readonly/calls/0009-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0010-fusion_mechanical.json", + "docs/mechanical-verification/cp9-readonly/calls/0011-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0012-fusion_mechanical.json", + "docs/mechanical-verification/cp9-readonly/calls/0013-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0014-fusion_mechanical.json", + "docs/mechanical-verification/cp9-readonly/calls/0015-fusion_mechanical.json", + "docs/mechanical-verification/cp9-readonly/calls/0016-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0017-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0018-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0019-fusion_mechanical.json", + "docs/mechanical-verification/cp9-readonly/calls/0020-fusion_mechanical.json", + "docs/mechanical-verification/cp9-readonly/calls/0021-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0022-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0023-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0024-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0025-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0026-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0027-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0028-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0029-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0030-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0031-fusion_run_modeling_script.json", + "docs/mechanical-verification/cp9-readonly/calls/0032-fusion_get_preferences.json", + "docs/mechanical-verification/cp9-readonly/calls/0033-fusion_state.json", + "docs/mechanical-verification/cp9-readonly/calls/0034-fusion_addin_status.json", + "docs/mechanical-verification/cp9-readonly/calls/0035-bridge_list.json", + "docs/mechanical-verification/cp9-readonly/calls/0036-run_script.json", + "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/diagnostic_scene.py", + "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/fusion_harness.py", + "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/probe/READONLY-PROBE.md", + "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/probe/read_scene_probe.py", + "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/probe/test_read_scene_probe.py", + "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/ralph_jobs.py", + "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/ralph_mechanical.py", + "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/ralph_support.py", + "docs/mechanical-verification/cp9-readonly/evidence-manifest.json", + "docs/mechanical-verification/cp9-readonly/independent-review.json", + "docs/mechanical-verification/cp9-readonly/live-runtime-identity.json", + "docs/mechanical-verification/cp9-readonly/native-scene-probe.py", + "docs/mechanical-verification/cp9-readonly/ownership.json", + "docs/mechanical-verification/cp9-readonly/report.json", + "install.sh", + "package.json", + "page.json", + "requirements-test.txt", + "rust/bridge/src/addin.rs", + "rust/bridge/src/main.rs", + "rust/bridge/src/operation_status.rs", + "server.py", + "tests/daily_verb_cron.sh", + "tests/fusion_harness.py", + "tests/job_acceptance/busy/CONTRACT.md", + "tests/job_acceptance/busy/README.md", + "tests/job_acceptance/busy/adjudicate_saved.py", + "tests/job_acceptance/busy/busy_status.py", + "tests/job_acceptance/busy/manifest.json", + "tests/job_acceptance/busy/test_busy_status.py", + "tests/job_acceptance/history/CONTRACT.md", + "tests/job_acceptance/history/history_acceptance.py", + "tests/job_acceptance/history/manifest.json", + "tests/job_acceptance/history/test_history_acceptance.py", + "tests/ralph_assemblies.py", + "tests/ralph_everyday.py", + "tests/ralph_jobs.py", + "tests/ralph_mechanical.py", + "tests/ralph_support.py", + "tests/run_verb_tests.py", + "tests/test_addin_lifecycle.py", + "tests/test_bridge_contracts.py", + "tests/test_fusion_harness.py", + "tests/test_http_server.py", + "tests/test_live_feed_drain.py", + "tests/test_mechanical.py", + "tests/test_mechanical_assemblies.py", + "tests/test_mechanical_configurations.py", + "tests/test_mechanical_everyday.py", + "tests/test_mechanical_regular_joints.py", + "tests/test_mechanical_transactions.py", + "tests/test_operation_dispatch.py", + "tests/test_operation_history.py", + "tests/test_operation_journal.py", + "tests/test_operation_status_route.py", + "tests/test_portable_tree.py", + "tests/test_ralph_assemblies.py", + "tests/test_ralph_campaign.py", + "tests/test_ralph_everyday.py", + "tests/test_ralph_jobs.py", + "tools/check-bridge.py", + "tools/check-portable.sh", + "tools/check_portable_tree.py", + "tools/install-mechanical-dev.ps1", + "tools/live_feed_drain.py", + "tools/package-mechanical-dev.py" + ], + "files": [ + { + "path": ".github/workflows/validate.yml", + "sha256": "2de4ee7c96e66d332dbc9c9f1dfb1441ff651d92cd477d45de8d6add1fa7ef28", + "bytes": 3010 + }, + { + "path": ".gitignore", + "sha256": "d3e47127fa765fcf174256fa515f6b2b9647d6485578ccd4f2b04bcd701f2b1e", + "bytes": 876 + }, + { + "path": ".insiders-stage/fusion-bridge/version.json", + "sha256": "eab7aedb32a35ac0d09a4026362bf7ad15b611c745f56a05abfb837006d499e0", + "bytes": 408 + }, + { + "path": ".release-page-head", + "sha256": "2cf6f4948b841d564c842c0d27920e5118b6655199f390b63ebf5b95565c4d34", + "bytes": 40 + }, + { + "path": "3d-viewer-and-export.md", + "sha256": "a086d2c806e31399bde6dfe39aa74b99374c71e0aae40a97c045193a8236496b", + "bytes": 5440 + }, + { + "path": "AdomBasicParts-138-library.mp4", + "sha256": "1ab0dea3ad477c31a961931f50afe2c218890ecce52d4a478794c6639cc98e8d", + "bytes": 1293149 + }, + { + "path": "AdomBasicParts_full.lbr", + "sha256": "4c6de2c34854250392025165ec1885df1813d29a93fa241dcf5a007b94086a10", + "bytes": 114743 + }, + { + "path": "BRIDGE_VERSION", + "sha256": "890201f472e406726cfc4e0c7f78706a559d614b1fc9e171a8f4e8c5d3fd2388", + "bytes": 7 + }, + { + "path": "CHANGELOG.md", + "sha256": "56f09b4f9f3f6bffd6822d4531802ddd2e189f3fdee9e31fb0127de943c10777", + "bytes": 96272 + }, + { + "path": "CHANGELOG_ARCHIVE.md", + "sha256": "2e986b0b2baee71e2c03ca9532361bb78e59910080cfba20f242e94c7aae7652", + "bytes": 36813 + }, + { + "path": "CLAUDE.md", + "sha256": "8f4e2603506de422f978a1bfe030ed58f34713da3f440804f5f3768fa8b75616", + "bytes": 12295 + }, + { + "path": "CONTRIBUTING.md", + "sha256": "5844001563c4f9d392a3942036f23eae048848f1be7e865268cfb2c4e43ab13f", + "bytes": 12263 + }, + { + "path": "CREATING_BASIC_PARTS_LIBRARIES.md", + "sha256": "24975b6d999d4bee31bf71b677728b1c79ba30108bc0cd1f0750cb0335ec830e", + "bytes": 10412 + }, + { + "path": "LIBRARY_FINDINGS.md", + "sha256": "4a62db43b23a6617657207e2bbac8441214195eedd687b972d48bfb60ec548dd", + "bytes": 13861 + }, + { + "path": "LICENSE", + "sha256": "b54f07e0c4b28129ad48464bf91e59a465b645aee4f565890e648a005551667f", + "bytes": 1095 + }, + { + "path": "MAKING_LIBRARIES.md", + "sha256": "08cf1f358e28624e87d8cd3bca0f10204268fb94af3f7e2f3c1325a195758b48", + "bytes": 9860 + }, + { + "path": "NEXT-SESSION-bq25792-viewer.md", + "sha256": "0decf98eae99b09c717707a3d2bedc1af789847e4c1df06a41d7848d368bfcba", + "bytes": 4830 + }, + { + "path": "PUBLISHING.md", + "sha256": "e5d46e9bbf17c7e0a3387ddf915f16d29e2ca080a0cf1f5c773ce63633712410", + "bytes": 8936 + }, + { + "path": "README.md", + "sha256": "33c8e67e1236865134cfb06a03cc45bb1990c07b4c4772c0b1e488996f212816", + "bytes": 58806 + }, + { + "path": "README_VERBS.md", + "sha256": "13cb4a101d8c355e3f0f8876eb27b5e9e6b0d12c42bdb7333e5c065172291c7b", + "bytes": 15557 + }, + { + "path": "SKILL.md", + "sha256": "d46c427eba7ca1bb7e10fc0efe86511dedeea052517f11fdc4b6751fce4f5683", + "bytes": 31617 + }, + { + "path": "VERBS.md", + "sha256": "5022f35f643a7e89443b195c5794e41a093e77197ede71ff6af0e8bffdd42575", + "bytes": 21015 + }, + { + "path": "ab_client.py", + "sha256": "f6a0a55fdd325ffd3fbae5c7acc62a552f94b415e54524f09be85238c115d6a5", + "bytes": 11745 + }, + { + "path": "ad_client.py", + "sha256": "c324775d17ccebe671acd54818eaf801e3f3136f5586ec9352331d98fce4ea0c", + "bytes": 11544 + }, + { + "path": "addin/AdomBridge/AdomBridge.manifest", + "sha256": "1dc6a2f367d38eb30e74499a1b2426a4256a6c773a1efd04e37637eab54ddb05", + "bytes": 351 + }, + { + "path": "addin/AdomBridge/AdomBridge.py", + "sha256": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "bytes": 10058 + }, + { + "path": "addin/AdomBridge/commands/__init__.py", + "sha256": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "bytes": 7072 + }, + { + "path": "addin/AdomBridge/commands/activity_palette.py", + "sha256": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "bytes": 21382 + }, + { + "path": "addin/AdomBridge/commands/app_state.py", + "sha256": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "bytes": 4059 + }, + { + "path": "addin/AdomBridge/commands/assembly_bom.py", + "sha256": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "bytes": 7371 + }, + { + "path": "addin/AdomBridge/commands/close_document.py", + "sha256": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "bytes": 14254 + }, + { + "path": "addin/AdomBridge/commands/cloud_documents.py", + "sha256": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "bytes": 75393 + }, + { + "path": "addin/AdomBridge/commands/design_info.py", + "sha256": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "bytes": 2990 + }, + { + "path": "addin/AdomBridge/commands/document_hygiene.py", + "sha256": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "bytes": 2911 + }, + { + "path": "addin/AdomBridge/commands/document_info.py", + "sha256": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "bytes": 12982 + }, + { + "path": "addin/AdomBridge/commands/electron_view.py", + "sha256": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "bytes": 7648 + }, + { + "path": "addin/AdomBridge/commands/electronics.py", + "sha256": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "bytes": 47300 + }, + { + "path": "addin/AdomBridge/commands/export.py", + "sha256": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "bytes": 2178 + }, + { + "path": "addin/AdomBridge/commands/import_file.py", + "sha256": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "bytes": 4033 + }, + { + "path": "addin/AdomBridge/commands/manufacturing.py", + "sha256": "13ce099142d7c0059b47e3bdccb498d2491b01493cd4bb131f7e8bdd9a567893", + "bytes": 48099 + }, + { + "path": "addin/AdomBridge/commands/mechanical/__init__.py", + "sha256": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "bytes": 10465 + }, + { + "path": "addin/AdomBridge/commands/mechanical/assemblies.py", + "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "bytes": 27491 + }, + { + "path": "addin/AdomBridge/commands/mechanical/assembly_state.py", + "sha256": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "bytes": 5489 + }, + { + "path": "addin/AdomBridge/commands/mechanical/bill_of_materials.py", + "sha256": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "bytes": 8624 + }, + { + "path": "addin/AdomBridge/commands/mechanical/configurations.py", + "sha256": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "bytes": 20259 + }, + { + "path": "addin/AdomBridge/commands/mechanical/core.py", + "sha256": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "bytes": 16863 + }, + { + "path": "addin/AdomBridge/commands/mechanical/exporting.py", + "sha256": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "bytes": 5184 + }, + { + "path": "addin/AdomBridge/commands/mechanical/features.py", + "sha256": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "bytes": 15042 + }, + { + "path": "addin/AdomBridge/commands/mechanical/geometry.py", + "sha256": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "bytes": 16171 + }, + { + "path": "addin/AdomBridge/commands/mechanical/joint_state.py", + "sha256": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "bytes": 10676 + }, + { + "path": "addin/AdomBridge/commands/mechanical/journal.py", + "sha256": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "bytes": 18252 + }, + { + "path": "addin/AdomBridge/commands/mechanical/motion_links.py", + "sha256": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "bytes": 9168 + }, + { + "path": "addin/AdomBridge/commands/mechanical/operation_history.py", + "sha256": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "bytes": 14925 + }, + { + "path": "addin/AdomBridge/commands/mechanical/operations.py", + "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "bytes": 13927 + }, + { + "path": "addin/AdomBridge/commands/mechanical/purchased.py", + "sha256": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "bytes": 8253 + }, + { + "path": "addin/AdomBridge/commands/mechanical/readback.py", + "sha256": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "bytes": 12935 + }, + { + "path": "addin/AdomBridge/commands/mechanical/regular_joints.py", + "sha256": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "bytes": 28788 + }, + { + "path": "addin/AdomBridge/commands/mechanical/schema.json", + "sha256": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "bytes": 168469 + }, + { + "path": "addin/AdomBridge/commands/mechanical/sketch_edits.py", + "sha256": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "bytes": 10093 + }, + { + "path": "addin/AdomBridge/commands/mechanical/sketches.py", + "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "bytes": 13288 + }, + { + "path": "addin/AdomBridge/commands/mechanical/transactions.py", + "sha256": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "bytes": 7526 + }, + { + "path": "addin/AdomBridge/commands/modeling.py", + "sha256": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "bytes": 8669 + }, + { + "path": "addin/AdomBridge/commands/open_electronics_file.py", + "sha256": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "bytes": 27119 + }, + { + "path": "addin/AdomBridge/commands/open_lbr.py", + "sha256": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "bytes": 7340 + }, + { + "path": "addin/AdomBridge/commands/parameters.py", + "sha256": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "bytes": 4829 + }, + { + "path": "addin/AdomBridge/commands/physical_properties.py", + "sha256": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "bytes": 2541 + }, + { + "path": "addin/AdomBridge/commands/screenshot.py", + "sha256": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "bytes": 5031 + }, + { + "path": "addin/AdomBridge/commands/silkscreen_capture.py", + "sha256": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "bytes": 10707 + }, + { + "path": "addin/AdomBridge/http_server.py", + "sha256": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "bytes": 26804 + }, + { + "path": "addin/AdomBridge/resources/cam/jlcpcb-2layers.cam", + "sha256": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "bytes": 8886 + }, + { + "path": "addin/AdomBridge/resources/cam/jlcpcb-4layers.cam", + "sha256": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "bytes": 9743 + }, + { + "path": "addin/AdomBridge/resources/dru/Adom-InstaPCB-2-Layer.edru", + "sha256": "b8f1e7b131baca5167af88a3b79f821f95905f6e071b2d7a5aaf8e63b6a02972", + "bytes": 10637 + }, + { + "path": "addin/AdomBridge/resources/dru/Adom-InstaPCB-4-Layer.edru", + "sha256": "52014638450f1e6bea80ff01a2da7045760ab38c61f1f3e06f61b30ad334f823", + "bytes": 12084 + }, + { + "path": "addin/AdomBridge/resources/dru/AdomDefaults-jlcpcb-2layers-accurate.edru", + "sha256": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "bytes": 10646 + }, + { + "path": "addin/AdomBridge/resources/dru/AdomDefaults-jlcpcb-4layers-accurate.edru", + "sha256": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "bytes": 12093 + }, + { + "path": "addin/AdomBridge/resources/ulp/detect_layers.ulp", + "sha256": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "bytes": 2931 + }, + { + "path": "adom-bridge-fusion-manifest.json", + "sha256": "01c305914bc13ec370a624ec444b0d1887e9c6ca548be9ae338a10ed12b89893", + "bytes": 386 + }, + { + "path": "aps-cloud-search.md", + "sha256": "17a29220cbc605237eadeb92ee9a596fbe0f8bea761f727debc5436072bd577d", + "bytes": 5155 + }, + { + "path": "aps.py", + "sha256": "872325ad79d780e3438b44ead8c704e7c95919c17eb467515e8a7e38dfe13c76", + "bytes": 81475 + }, + { + "path": "arch.png", + "sha256": "fb69ec0987e0fefff007d95d48ab3277e74567686d9fd8c186f1f4f3d093995b", + "bytes": 46782 + }, + { + "path": "bin/fusion-dashboard", + "sha256": "f56205faec0b625bc40821411d16dc7e98d8f749a698d3063a21bdfccdec74ba", + "bytes": 727400 + }, + { + "path": "board-layout-2d.md", + "sha256": "0751ad5cc9740deb306b1ca9a6e99372640356b9fc4753bf277eaed15d2bbe57", + "bytes": 3541 + }, + { + "path": "bridge.json", + "sha256": "927635e362b440b600abcd7d39deabe8128d62edb7b73fa53c5cf2d92ce4f3ce", + "bytes": 9302 + }, + { + "path": "bridges-hero.png", + "sha256": "296b0ac6bc1ee078f807a5f7546bd7ba413282228ab8e31e7024c08c9ebcf8a1", + "bytes": 402725 + }, + { + "path": "contracts/describe.json", + "sha256": "78fac068e84ee98a65e189c344d8d585395d2e2930576bc493c5ea3807a20bd0", + "bytes": 620588 + }, + { + "path": "dashboard/.gitignore", + "sha256": "b53ee26e6ff1da219b0563333a76d2c9ec19eec713d6ee54e11a1edacb0e9f3d", + "bytes": 8 + }, + { + "path": "dashboard/Cargo.lock", + "sha256": "03c08d5cd1da907edb998abb1f367f11b970c5a014a937bf98013eaf1b4e111a", + "bytes": 2648 + }, + { + "path": "dashboard/Cargo.toml", + "sha256": "2b2e0fa4aed650f75a9ca1f5cbfecd5d2feb0ebdcf1467386c7c798431f61c5b", + "bytes": 165 + }, + { + "path": "dashboard/src/demo_audio.rs", + "sha256": "9f0bc1252a3469ec20cb2e3c04c1357b116a0ea9c41b20ef9917c85b1dba2b10", + "bytes": 1537 + }, + { + "path": "dashboard/src/main.rs", + "sha256": "853700ca597d7b9bf458a0af574ab36dd47d9eb951f10b704714c6250746762d", + "bytes": 114497 + }, + { + "path": "dashboard/ui/fusion-icon.png", + "sha256": "a5554421f76c39e3c9a271a95af1f4a623c416381d4c81e2413604b00dd71f5f", + "bytes": 5814 + }, + { + "path": "dashboard/ui/index.html", + "sha256": "319be1ee31938d4873b00cbcf8e4cb63187ba5960493c249b1f5a82a7a854254", + "bytes": 68660 + }, + { + "path": "dashboard/ui/quick-actions.html", + "sha256": "8f7e61c684d96c242ecd124a608b634a5cd14e29e1108d5f3e5cc6582d1039fb", + "bytes": 57761 + }, + { + "path": "dashboard/ui/vendor/newbie-panel.js", + "sha256": "5ed214867df8d16e7c5c50f2508361aa41c04547bc42caf90da7129939e7b8d2", + "bytes": 123068 + }, + { + "path": "demo/audio/2d-board.json", + "sha256": "bac3d363446469c0d65be171944b6e8ef61d7d675cdce7fedce372bbafa59009", + "bytes": 263 + }, + { + "path": "demo/audio/2d-board.mp3", + "sha256": "aa3d9708a741395391ff1291aa80022faa82c0ede318aa475d68f099480da809", + "bytes": 32112 + }, + { + "path": "demo/audio/3d-board.json", + "sha256": "14ebaa795cd101d3bc6be512b5107245dde0288275d51983c1e52027bd0b7051", + "bytes": 290 + }, + { + "path": "demo/audio/3d-board.mp3", + "sha256": "0e186a8724a661bded904d2fddfd734cea806fe4fc5fd1bf156f9b615170b8ad", + "bytes": 43344 + }, + { + "path": "demo/audio/3d-package.json", + "sha256": "9b4689aac3ef28c2c2d3c21b296c89fb93f7fdefad13fc784e679ea67367cfef", + "bytes": 468 + }, + { + "path": "demo/audio/3d-package.mp3", + "sha256": "0c8d3c0f21beb7a69dbdeb8c935897c5b6f138b93abb3fc56bcbee2cb4c0be20", + "bytes": 108864 + }, + { + "path": "demo/audio/aps.json", + "sha256": "9ac8af402a867bb36e415ee1ffd54e00dacb61e5b5cd54b3a4e9e9c37e04b069", + "bytes": 334 + }, + { + "path": "demo/audio/aps.mp3", + "sha256": "1d8bde4b955db04e8328e1dc2578c443217e7300321b9d4ef33df218e91315cf", + "bytes": 61488 + }, + { + "path": "demo/audio/datahub.json", + "sha256": "1ac3914a7f37fc520d04f055077c9f50a2fad89148ab5334242bdcfaa2300bd4", + "bytes": 332 + }, + { + "path": "demo/audio/datahub.mp3", + "sha256": "51da3bc18c696baff6c670cf1caf3e8592d431e801a3e4cce927f12c6a2407dc", + "bytes": 62208 + }, + { + "path": "demo/audio/device.json", + "sha256": "d476b15b42bb3adccf597e85279e0f2ed8792c51b2e8ef97f3e6ead7377cf995", + "bytes": 357 + }, + { + "path": "demo/audio/device.mp3", + "sha256": "25eafbaabdd04ed1671e790a0052c01c74ce6ecffe99f2858edd96e8e123bdf0", + "bytes": 68976 + }, + { + "path": "demo/audio/exports.json", + "sha256": "39f57466371ad5a2752d83ef978c3cf34753f6eb3b662bf260f033ce875498a0", + "bytes": 360 + }, + { + "path": "demo/audio/exports.mp3", + "sha256": "ba26a1ed4e7eccb289971126d747e4bb2fa84dc149fd14b156641cb4fd702684", + "bytes": 103680 + }, + { + "path": "demo/audio/footprint.json", + "sha256": "c36f5f172064b775f054f6f4e4e2239f1536b7fc78b3046228e7263cc213991b", + "bytes": 280 + }, + { + "path": "demo/audio/footprint.mp3", + "sha256": "40edb0635be76e07d55be8eb80a80b599baf8be3ff590b678d7f76837ee3cab3", + "bytes": 40608 + }, + { + "path": "demo/audio/launch.json", + "sha256": "f3dfb1509a695b6e1c4217c2783709dcd516306372a79454c9fb66f90e94a761", + "bytes": 467 + }, + { + "path": "demo/audio/launch.mp3", + "sha256": "0fb9eb73f8190dd0104a63564f21851d43d56869a2f806b59a64f37c49529a4f", + "bytes": 107568 + }, + { + "path": "demo/audio/library.json", + "sha256": "bfe19382a8a3921ff5f580088d9387b1f5b55d54cde3079807c957e08f6794b3", + "bytes": 348 + }, + { + "path": "demo/audio/library.mp3", + "sha256": "266fac1e5d9ffadae8ec2f14bec83860f872fa8df02bbc34bee017c968120c83", + "bytes": 64512 + }, + { + "path": "demo/audio/make-project.json", + "sha256": "b78579c5671a68fd9b1833ea7854e83e91069181614e18abf1d968cff6a2d022", + "bytes": 331 + }, + { + "path": "demo/audio/make-project.mp3", + "sha256": "a820c7e290493f77841f445a34fad8e040592eb1cbd7472dcee8d5d0c4f9d285", + "bytes": 61344 + }, + { + "path": "demo/audio/mcp.json", + "sha256": "e8958c6930be3848caa8fbc585858198135b0a7705ebfe93106604a2fbbdc887", + "bytes": 442 + }, + { + "path": "demo/audio/mcp.mp3", + "sha256": "e20fed5b4b379392cd07577cfa4dce0cfd4d0ec6c848f9d8319d7327c57de2ff", + "bytes": 112464 + }, + { + "path": "demo/audio/open-design.json", + "sha256": "f92cdb0e05a02ee73686f4be049be5870e419b9890ee83872b3858b102209bd1", + "bytes": 309 + }, + { + "path": "demo/audio/open-design.mp3", + "sha256": "c0995723fc3fc96821df77589c9790cb79e5d21935b6a246d3912d07f9051c6d", + "bytes": 47664 + }, + { + "path": "demo/audio/schematic.json", + "sha256": "a47427c536cac89357ec22eb05d4546af223e05e43840df327ab0f0e7a07976b", + "bytes": 256 + }, + { + "path": "demo/audio/schematic.mp3", + "sha256": "883aebd1fa3f0082c57c38a4cd252a46360581db37ddf7dfe057a0b7bfa141ee", + "bytes": 29952 + }, + { + "path": "demo/audio/stage.json", + "sha256": "ae13f32d97ab0161cc455ff27b66c2ce22e9bc6e5f8ba198abf1200b2954aee5", + "bytes": 339 + }, + { + "path": "demo/audio/stage.mp3", + "sha256": "6a644f2d40d60021e7aa51c29eec8c2472354f3ca6970b7e6f8afd96f7165c2e", + "bytes": 66816 + }, + { + "path": "demo/audio/symbol.json", + "sha256": "d147a300ec0392af40e3ce339ce418b9ea68b47b226b79ce58909543e4511cc9", + "bytes": 319 + }, + { + "path": "demo/audio/symbol.mp3", + "sha256": "a21241431172fb50e47c85a9fcd8cd424a668f884e0b98fc941c4652c7155e06", + "bytes": 54000 + }, + { + "path": "demo/captions.json", + "sha256": "14a7e6f5999b82fa5c858b4c577e4426694319e8b4a2a1cae5fd6b31563f2365", + "bytes": 2926 + }, + { + "path": "demo/lan7800-cloud-library-demo-hero.png", + "sha256": "4d3e32cc83011c5ff5742b6162ad794f18358825044393b2edf5a4f90037553b", + "bytes": 789627 + }, + { + "path": "demo/lan7800-cloud-library-demo-script.md", + "sha256": "961026c528e3fd7fc897458a1b3a31c033a3e0c22bd85903d007eed433660303", + "bytes": 3175 + }, + { + "path": "demo/lan7800-cloud-library-demo.webm", + "sha256": "c30fb1bb771096da75c25e913400150997b25a4d5a43b3551238381a5e432c2e", + "bytes": 50042488 + }, + { + "path": "demo/lan7800-cloud-library-manifest.json", + "sha256": "8da42ebd0f4c3d2a464538d0219681bab88d64d2f31bf82ac08e024c2f0de75a", + "bytes": 2298 + }, + { + "path": "demo/routing/README.md", + "sha256": "cb46c6387b8140bbd9ad5731b057da52fc859b34999b0af45ad148d099d3a860", + "bytes": 8675 + }, + { + "path": "demo/routing/bq25792/.gitignore", + "sha256": "8261abb1fbdbbc1169f11fd1b532c6d7c174e2bf9558611d0a2a1040c6223b6e", + "bytes": 2045 + }, + { + "path": "demo/routing/bq25792/README.md", + "sha256": "ca03f7764765dd3f3e595dc0645582938fcb56a78c8c7cacf29a90c9ff4a29cf", + "bytes": 6424 + }, + { + "path": "demo/routing/bq25792/ablation/README.md", + "sha256": "97ec5a21014c45f3f4712587bc9139912b8e77d055728c8daa0996a95460caaa", + "bytes": 2517 + }, + { + "path": "demo/routing/bq25792/ablation/coverage.py", + "sha256": "2a859be4b192ea0537df7ed3fc17a8a6845fab1b778c982f0c0e756b5beddca0", + "bytes": 4124 + }, + { + "path": "demo/routing/bq25792/ablation/edit/edit.json", + "sha256": "f181ba02accf6ac2a58725f196434ac14bb59c0930d8ffbddde2ea9d6ef00c6a", + "bytes": 2197 + }, + { + "path": "demo/routing/bq25792/ablation/edit/fusion-bq25792-astra-copper-retention-narrated.mp4", + "sha256": "f0e7ea40c4c303147d51d988bf71b3a4d30115a874c3a129ed2881f6ced37b4f", + "bytes": 17700087 + }, + { + "path": "demo/routing/bq25792/ablation/edit/script.json", + "sha256": "812829ee8ac1bdef282266ce5286a7ca9a803fe424f5569a9aa2d31b7630b3d6", + "bytes": 5560 + }, + { + "path": "demo/routing/bq25792/ablation/edit/verification.json", + "sha256": "fa037d0b8ad55d98693f55c12f4968cdbc3dba09d6d0cdcf8c0bc33f45b4e9df", + "bytes": 11070 + }, + { + "path": "demo/routing/bq25792/ablation/mix.py", + "sha256": "6fecff00fc825f615868b28c1bdea4f52799f37f75c865aac711c85d4183c4e2", + "bytes": 2972 + }, + { + "path": "demo/routing/bq25792/ablation/native.py", + "sha256": "01da87c183b22c61882891191c32f4f8b2b16e08656b0939398c329c0af56230", + "bytes": 1102 + }, + { + "path": "demo/routing/bq25792/ablation/record.py", + "sha256": "782eee1f1401e194e2e3559b89373d6abcf3aca2e9656e61353bf8b31a10f070", + "bytes": 5711 + }, + { + "path": "demo/routing/bq25792/ablation/render.py", + "sha256": "0269292f16dc261d2dbcfaa22c53f173c5bd201ccb0e6887afe707b2ade5cfa6", + "bytes": 6160 + }, + { + "path": "demo/routing/bq25792/ablation/take-02/bq25792-ablation-routed.brd", + "sha256": "7170c59c20afea54c7be3bbf0c13c4684eb19c2e33c09bde9f06100a1f388a15", + "bytes": 1158473 + }, + { + "path": "demo/routing/bq25792/ablation/take-02/coverage.json", + "sha256": "8a48461a394279b6ae357c00f0a4da9bf5bb5b022ebaa3a131235d2dd0480cb5", + "bytes": 2695 + }, + { + "path": "demo/routing/bq25792/ablation/take-02/final.json", + "sha256": "0a932da3003d929708f595c5e47b3c02ae42913fd109d713c918f8983d7227d3", + "bytes": 202414 + }, + { + "path": "demo/routing/bq25792/bq25792-astra-unrouted.brd", + "sha256": "a0a5102f50e935ca3fb87ec6204bc8e60cba0786bd0df20753ddb9ff1b8ca26c", + "bytes": 321480 + }, + { + "path": "demo/routing/bq25792/bq25792-unrouted-rule-check.brd", + "sha256": "ad01e7859c2c279e5f5d21cfdc827dd14848bb3363198c518fef13d73a6dc38c", + "bytes": 321479 + }, + { + "path": "demo/routing/bq25792/diagnostic_rules.py", + "sha256": "af452c3dd3e04aaa9aef2f81457d52eca6f072980ff869d264d0e4419b2c38e9", + "bytes": 908 + }, + { + "path": "demo/routing/bq25792/evidence.json", + "sha256": "3a273e4fa9bbffc190bb424e8c5760bbf98330c58428ed0f837aca862e05d0d9", + "bytes": 59957 + }, + { + "path": "demo/routing/bq25792/find_motion.py", + "sha256": "8f0b10cbb68d2ed345dc63146da0cb4657dbb077b04b48a49e10231d30d21ee4", + "bytes": 1648 + }, + { + "path": "demo/routing/bq25792/geometry.py", + "sha256": "9511ae40173621a05236c5fdfac1ec8c581b642497bf5966db79cb76e78fe397", + "bytes": 6469 + }, + { + "path": "demo/routing/bq25792/narration/make_narration.py", + "sha256": "41042e54a8cfaed4b69f88493b89869fbaf0b83ab3b11202f4efe1299641c960", + "bytes": 2799 + }, + { + "path": "demo/routing/bq25792/narration/mix.py", + "sha256": "94dd5ceb056a8499db414ef467be5eb7f1b4c983d30d88814907b1976d9059d2", + "bytes": 2889 + }, + { + "path": "demo/routing/bq25792/narration/script.json", + "sha256": "f415a2241afec949f60488cf56372a05ecac9e9fa1d2d9cf27f65a1c4e9707c0", + "bytes": 2559 + }, + { + "path": "demo/routing/bq25792/narration/verification.json", + "sha256": "15815f6e934bea65b923258cfa2db93b71e7a9496b4a088e8ac219433c562b36", + "bytes": 7845 + }, + { + "path": "demo/routing/bq25792/native-routed/bq25792-astra-routed.brd", + "sha256": "6537f3eff403ee8c312d394f87dc1f4547f71f852ee079e1fa18e7ab7686e083", + "bytes": 370978 + }, + { + "path": "demo/routing/bq25792/plan.py", + "sha256": "df00a1629cf14f60dc1d74cce679f22736754d7e7d12858c0586a650a2e1b40d", + "bytes": 8225 + }, + { + "path": "demo/routing/bq25792/prepare_middle.py", + "sha256": "bb091ac4881a0d8a06c9454ce63a403cf9eb994a387ea07c485fb63df186bc3c", + "bytes": 1657 + }, + { + "path": "demo/routing/bq25792/record_live.py", + "sha256": "d2ac5be33cb5c5a7eb41369d5c0a956a2b64ce736c3083f857b8a0e7d36ff6c8", + "bytes": 3339 + }, + { + "path": "demo/routing/bq25792/record_reference.py", + "sha256": "c7863d63df9c855dd8f31e39a16a0a80edbc7962f1920a1dc6b061af3d5b979c", + "bytes": 3684 + }, + { + "path": "demo/routing/bq25792/record_strip.py", + "sha256": "39e5411c18fd867cb88ff293fa5f923fae1a838162f7760ed24ca2622fd97ace", + "bytes": 3648 + }, + { + "path": "demo/routing/bq25792/render_demo.py", + "sha256": "bbb28e08201b65eea24a6a5c9c0f08f513bbed1723804e407075c6b30036c0cb", + "bytes": 4991 + }, + { + "path": "demo/routing/bq25792/repair-09/candidate-plan.json", + "sha256": "56e5575fe6a856ab79e9026cb22384064046b90caff2992ff399b3d8436303f4", + "bytes": 107233 + }, + { + "path": "demo/routing/bq25792/repair.py", + "sha256": "9107485d0b3139f9612938281d9f1aab38d038c4d438b487c8fdec6dc7dc117f", + "bytes": 2046 + }, + { + "path": "demo/routing/bq25792/replay_live.py", + "sha256": "9b738592899b5a5381a3e68401a16684d0d29d06b4a1688962931d65f1baa5f3", + "bytes": 6368 + }, + { + "path": "demo/routing/bq25792/ripup_local.py", + "sha256": "29f4383b8f9c086371cd7cd07176943fdef93b5b5304affdcf22e48c56402875", + "bytes": 731 + }, + { + "path": "demo/routing/bq25792/rule-diagnostic-manifest.json", + "sha256": "4533227edfb766ff683cb3ef0c099339e7dd6ae026cc0adb89ee4d8064d620c3", + "bytes": 1371 + }, + { + "path": "demo/routing/bq25792/thermal/README.md", + "sha256": "4ddf78248c49f6ddfc1694360c6003c42c02925206ced87615c2c204632276de", + "bytes": 4816 + }, + { + "path": "demo/routing/bq25792/thermal/audit_final.py", + "sha256": "57e466682b9c3ada8de0fbc081e4aa3952548a3e38c67afacb25aeca0e826a5b", + "bytes": 1589 + }, + { + "path": "demo/routing/bq25792/thermal/crr.example.py", + "sha256": "b2bb916aa0856c0ddb8277d8464f8465d4fbcaa364bcaffc2db82e02cc05e16d", + "bytes": 1329 + }, + { + "path": "demo/routing/bq25792/thermal/edit/cuts.json", + "sha256": "8bc02207b5fad9583bb389ffe856129d0d1ce38b168bae0aeabf9f0d8e00c207", + "bytes": 2682 + }, + { + "path": "demo/routing/bq25792/thermal/edit/edit.json", + "sha256": "7c538000faa6a69fab3cc9b1d116d1dcd63aaab7b2d5b3cdd85afc8b798596a4", + "bytes": 4076 + }, + { + "path": "demo/routing/bq25792/thermal/edit/fusion-bq25792-astra-thermal-narrated.mp4", + "sha256": "24042b594634ab0206b524bcf8e27fedb79d89225336de7b8caa3719ca37144c", + "bytes": 14600169 + }, + { + "path": "demo/routing/bq25792/thermal/edit/script.json", + "sha256": "e953c8a272da6e75c4b9c4539f111ce66442458c63823015470124f555d8c93c", + "bytes": 4740 + }, + { + "path": "demo/routing/bq25792/thermal/edit/verification.json", + "sha256": "bf6a4b40587b011753dd1d0785d0186a3d3dceab59120a30c1728f799ed3d308", + "bytes": 9806 + }, + { + "path": "demo/routing/bq25792/thermal/fanout_six.py", + "sha256": "e46d1f200a082d49c62c7adb76217ad16cb4bebc1319339556e3da815d8b1187", + "bytes": 2526 + }, + { + "path": "demo/routing/bq25792/thermal/measure_thermal.py", + "sha256": "707fcc6b9e8ae48ac13546e44bb4acf5a2e97c1a6fcc0dce2c0be80afd54e28c", + "bytes": 2731 + }, + { + "path": "demo/routing/bq25792/thermal/mix_thermal.py", + "sha256": "c79dd5e8ffcc644a73b483bc2e5f6c25255c5b4b34c390fc9d683de6c5293d33", + "bytes": 2385 + }, + { + "path": "demo/routing/bq25792/thermal/plan_45.py", + "sha256": "8bc982dae45f2b06fd7d246ef543677320b1878005f81a333ac5174d0292dc6b", + "bytes": 9296 + }, + { + "path": "demo/routing/bq25792/thermal/plan_priority.py", + "sha256": "7a9bf2173f64fde1d06389b0b7ac651ea95c13fb7e5a49b53c1bfde4ea7a69e8", + "bytes": 9592 + }, + { + "path": "demo/routing/bq25792/thermal/polish.py", + "sha256": "21003f44bc2cb0445315510908a595f2bbca7e55998a31abc00c3ac3ea1a5ba0", + "bytes": 1463 + }, + { + "path": "demo/routing/bq25792/thermal/record_live.py", + "sha256": "7fa899bb4a790b2909e1fdf07d571c3f94801b9788ea24342a48b19d3f03da9a", + "bytes": 7639 + }, + { + "path": "demo/routing/bq25792/thermal/recording-02/audit.json", + "sha256": "4fe28ddc3ae52f1a481c50e63ab907f3a9e80a5601b08af91f28715dae7ca25a", + "bytes": 5376 + }, + { + "path": "demo/routing/bq25792/thermal/recording-02/bq25792-astra-thermal-routed.brd", + "sha256": "80254ce1809aebe25d9e4996e9cc7bf3dbb2648ad098ccb1859edb2954ecaa28", + "bytes": 1232622 + }, + { + "path": "demo/routing/bq25792/thermal/recording-02/final.json", + "sha256": "239590e6097d124da0831655059d7b7a3460b2512cac6e56c1a1429c7c43ad56", + "bytes": 201744 + }, + { + "path": "demo/routing/bq25792/thermal/render_thermal.py", + "sha256": "a01698f5cbb54b7aa4748ec3729f327589b34eb5405840cebf000491a5344e15", + "bytes": 3315 + }, + { + "path": "demo/routing/bq25792/thermal/thermal-final/added-thermal-vias.json", + "sha256": "9ec1a4c0f76ae25e953d3551b692fc272c904dd2b46cb3dcfa6c4e0d2f25f812", + "bytes": 653 + }, + { + "path": "demo/routing/bq25792/thermal/thermal-final/candidate-plan.json", + "sha256": "915d681fbc73c37de0790502f65467e4a7ef113e8990d67fe2682175e69805d0", + "bytes": 115164 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/README.md", + "sha256": "1a9fff4466f6dd1bfb91358bd37e2fff39e72acfc45ba5cc09ca39016ff42989", + "bytes": 9678 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/analyze.py", + "sha256": "e7d6fa52833958ed486f29d344e75b0765ca2806270aebb0025a006305102ad8", + "bytes": 2832 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/audit.json", + "sha256": "a5b9b3bee52c8d4d81a100d61e1f9d32d86434c0203f5adc736696aedd87bfd0", + "bytes": 1002 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/audit.py", + "sha256": "defd27f9bf699c89cf624fa557dab2ac302848e5fbbbc9a18817de903e0ab225", + "bytes": 2040 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/candidate.py", + "sha256": "abc8db0b4d509a9836a88e3fcc13ab1b29b1409afab084f39204d287d31c6025", + "bytes": 2434 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/charts.py", + "sha256": "e891f96179d3667dea19c5ade865526ff0e0c0b63a06b764597e2a0f854f063e", + "bytes": 3309 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/expansion-03/bounds.json", + "sha256": "2f5527dea83b14e3d5dbf0aa70bf80802b338764628d898a319a0cf127ee4875", + "bytes": 207 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/narration.py", + "sha256": "c9b6bc23e12fe397601fe57f0159aa00dc3444ec7239dd951579f5740a600f27", + "bytes": 5862 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/prepare_live.py", + "sha256": "82b99ceb5746492bfc8b894b3727825470ca88f39245cb93f07cebf57ca2ca8c", + "bytes": 1382 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/record_expansion.py", + "sha256": "268dfdb952181580487185a5607fb1a27d2cc0a184177fdab3c3918e7c1208e3", + "bytes": 5124 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/recording/bq25792-expanded-thermal.brd", + "sha256": "da7ce8907543e3dd8d17923642cc8481b98782d1a28c40069bb1924cf5871563", + "bytes": 1284941 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/render.py", + "sha256": "f3e4b528a6c3c03c9034b27fd6a6e07b4f5ba0a5e944663f21f566af6ccc633c", + "bytes": 4089 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/test_model.py", + "sha256": "eb4f5b0a69ebc43711a9b3da5e33e7c1972a71e507bf84a703d07629709e2b17", + "bytes": 777 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/thermal-results.json", + "sha256": "960c5c9a4bfae0e18f5b533aa6cc039b36c7b8483fb3645bf7cc5b3343c0cc78", + "bytes": 23976 + }, + { + "path": "demo/routing/bq25792/thermal-expansion/thermal_model.py", + "sha256": "a30b7a4c51742cc0b5f9016fb96ffc7cac2fc9b2ed9cbe029aad33b6e225ab70", + "bytes": 4343 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/README.md", + "sha256": "2f31532bf28d9b689f7a5ee4491f2d42828bfe9d261c5679b5437297a8b9d3ca", + "bytes": 7172 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/audit.py", + "sha256": "2f39c0eac3edecbd7dc5cb809f8d7492ee647b0e4fd67fd15981b35e27ccb462", + "bytes": 2142 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/candidate-01/audit.json", + "sha256": "f45264b21e547c0135b7b16f2b54b81cacd4a35cf20dace6640ef78b385ec5b6", + "bytes": 2850 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/candidate-01/bq25792-thermal-reroute.brd", + "sha256": "581c4aca8997303863ca9cdad98b4fb14478ead58d0d0844a0b397091f889bd1", + "bytes": 381141 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/candidate-01/comparison.json", + "sha256": "cd48fedd2f520c8f5f52d5cef08cbaf328f4619b4cc20c74f87051deac1b4c17", + "bytes": 3286 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/candidate-01/filled.brd", + "sha256": "6d26284f83517b9576d0585e9894cda930467a00a517635297aecbea66ae4e52", + "bytes": 1287162 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/candidate-01/plan.json", + "sha256": "1858a11c916ffe7b82792c6be6ce28f51a7be5af63573c51e831619c4d972e09", + "bytes": 3640 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/charts.py", + "sha256": "427ebe86e368463969b3ad5313a4b17aa2c4fcf4a0f90d6388255f1fdd96dbbd", + "bytes": 1780 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/compare.py", + "sha256": "e979e95e94133105ba6010b2b9db9839b80d2ab94af5fa07d3a83ebcd3b5d483", + "bytes": 833 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/hop.py", + "sha256": "4ce557e9cf9bed5099048cfc0b34bf9d4a8d22ca31b5a8d2a4876e4e7b15caa8", + "bytes": 2850 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/inspect_board.py", + "sha256": "12fce875fd544237e907eaac4ad49edbf2fbfec13cc391e014ad58a9bd832ec0", + "bytes": 369 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/narration.py", + "sha256": "ef792418902b395b4d79e64ed7bffe20ca09297565fa4ef54dba7a3aba0e3190", + "bytes": 4569 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/plan.py", + "sha256": "d90e3c8bb90186be3f2a1131f6514bcb526c302d5f5082d6bf74a21318280976", + "bytes": 3579 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/plot_board.py", + "sha256": "82199a928fd206b8d11d23e30c365faa245afbb80a60dfcb6c0245d8fded3ec2", + "bytes": 1164 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/prepare.py", + "sha256": "3a5a1305bbe7ac657057219c34e16fda870a0a1da9ad015dbe9392cd9ffba825", + "bytes": 970 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/record.py", + "sha256": "40eacfe54c8ff8dd3bb4b66c8772f8745262ea0fc5979af49943bced95b5a5ce", + "bytes": 5850 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/render.py", + "sha256": "6b6e40c831089ed9d42885dd8982c828345f83054863101b118739d85e06f45d", + "bytes": 3903 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/test_ripup.py", + "sha256": "0d0d10f9a4de9ec86c8dd68be990dc517a916b720494d9645e94a135f2d37f91", + "bytes": 527 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/transport.py", + "sha256": "078b6e06a1d4f3aad6bf246be44c2277a80f52b119929adaefb4ffd032e3ad5a", + "bytes": 1403 + }, + { + "path": "demo/routing/bq25792/thermal-reroute/validate.py", + "sha256": "6acd559d304ff4f90f6afbee1f876fb5c723d5c1cc263ed7e8d5781d98dcaca5", + "bytes": 1565 + }, + { + "path": "demo/routing/bq25792/video/fusion-bq25792-astra-1x.ass", + "sha256": "b2ff202b19c0182519372c7155ef3080f4b10e51b754fa678fd362993b6db108", + "bytes": 3429 + }, + { + "path": "demo/routing/bq25792/video/fusion-bq25792-astra-1x.edit.json", + "sha256": "a9724c86b66cff3a197c19552ffa4a425844b91606c9ec9bb19d16aeea7529a9", + "bytes": 15491 + }, + { + "path": "demo/routing/bq25792/video/fusion-bq25792-astra-1x.mp4", + "sha256": "59794b99d73d0db716be51ffc35b1ad8cc126d178d096f7c08bfde07837666c2", + "bytes": 19650003 + }, + { + "path": "demo/routing/bq25792/video/fusion-bq25792-astra-3x-narrated.mp4", + "sha256": "a96634a44b56ac5a1f07b13bf428a3075e6b4cc1795845ff30e8ace157d07904", + "bytes": 13448920 + }, + { + "path": "demo/routing/bq25792/video/fusion-bq25792-astra-3x.ass", + "sha256": "cf7e2ff7033f0ff22a2d2003e0f4c3136fd25aa9309b7eff796a5079dbe0075e", + "bytes": 3429 + }, + { + "path": "demo/routing/bq25792/video/fusion-bq25792-astra-3x.edit.json", + "sha256": "7dfdbcc75606c026d3f845772073186da0eb31b964c4fd9463c313c1eaf80061", + "bytes": 15459 + }, + { + "path": "demo/routing/bq25792/video/fusion-bq25792-astra-3x.mp4", + "sha256": "8a4e25e7a28dca477f9600e207526285a8380d3906a09dc718a70617ea18e771", + "bytes": 10476673 + }, + { + "path": "demo/routing/bq25792/video/verification.json", + "sha256": "c52ad60254049ac1202aff38a509208bea941f625b8de9fa2e22498625b3b50b", + "bytes": 806 + }, + { + "path": "demo/routing/call.py", + "sha256": "05de50cc09791b58b93ad0c7729ed67bd80f39d38db878bc18ce8cd604b6396c", + "bytes": 1840 + }, + { + "path": "demo/routing/crossbar/README.md", + "sha256": "bb4615e2ca1056c5248fd52b9125566ba6857814dca7f506480118d3b4977fac", + "bytes": 4500 + }, + { + "path": "demo/routing/crossbar/delivery.json", + "sha256": "0ea04b7a6ae22fddb6b675c98588111adffe0a21920e27d408983df395ad1533", + "bytes": 1077 + }, + { + "path": "demo/routing/crossbar/final-frame.png", + "sha256": "e84cc944aca09f92605f8f8f733d8bceb52d9928f4afb079ac608adbf19498d6", + "bytes": 591250 + }, + { + "path": "demo/routing/crossbar/find_action.py", + "sha256": "a586dcf8109b4549c91a77ed93595ddab6c841109d4160684388abc5bac0dbbf", + "bytes": 1875 + }, + { + "path": "demo/routing/crossbar/fusion-crossbar-24-3x.ass", + "sha256": "dfca1fbcad88e226703a60cd278f7a34985c564a6d215baf97483d1a3b4d9dfe", + "bytes": 2919 + }, + { + "path": "demo/routing/crossbar/fusion-crossbar-24-3x.edit.json", + "sha256": "98d120c57da1ed7dc4ca286601f59f059ab072db2cd3f79ac1d10558cf421bea", + "bytes": 13538 + }, + { + "path": "demo/routing/crossbar/fusion-crossbar-24-3x.mp4", + "sha256": "f1ae07c26c2dbf91541ba71a97f4470018798170104fc375fe0d86c101972077", + "bytes": 1568684 + }, + { + "path": "demo/routing/crossbar/fusion-crossbar-24.brd", + "sha256": "4154563207b5f5530acab1acb9399d85008bc252adf9d733047f2fc3a8dd00cc", + "bytes": 17062 + }, + { + "path": "demo/routing/crossbar/install.json", + "sha256": "9c7f33f18005cb0983a1e28936b7164f2e29fab6a6dde1bf2362c5981b802b84", + "bytes": 426 + }, + { + "path": "demo/routing/crossbar/make_crossbar.py", + "sha256": "6d5eec33bb8b20a60beac88dc19d8a9e73557b4b2c22465516261e3066818b7f", + "bytes": 3527 + }, + { + "path": "demo/routing/crossbar/plan.json", + "sha256": "4410e544769dc9ccb0909cdbda67e132e9decc85ab4a2bdfe94a05df17ee7514", + "bytes": 14535 + }, + { + "path": "demo/routing/crossbar/player-open.json", + "sha256": "b9939001d94909b6c9bef30d15c7cec53806ae31817fbb51ff77d71028f6fb46", + "bytes": 135 + }, + { + "path": "demo/routing/crossbar/player-verification.json", + "sha256": "a7d162aec8ad51263d25a72c238f864d0e57bf7efa4910f520111e96cdb379f6", + "bytes": 588 + }, + { + "path": "demo/routing/crossbar/record_crossbar.py", + "sha256": "4f2c0d35eef71d3d2bc00e704e97e41e7899d5c63c169bff62fed7a9a231d997", + "bytes": 3124 + }, + { + "path": "demo/routing/crossbar/render_crossbar.py", + "sha256": "a392cbb9d3c9d816d8fa15b2ccadefe432125b022025be721e3d1d334734aa71", + "bytes": 5409 + }, + { + "path": "demo/routing/crossbar/take-01/action-ranges.json", + "sha256": "11c0afca06b53e6a1c4c54f87e34fb7c3ee560a7f9b400c423d5d7c8c93a94be", + "bytes": 5402 + }, + { + "path": "demo/routing/crossbar/take-01/before.json", + "sha256": "d87a68035d54c25aadec5ab6c4643487ca6501f5b5cf9136c96ba2c7051dda9e", + "bytes": 27081 + }, + { + "path": "demo/routing/crossbar/take-01/calls.json.gz", + "sha256": "5589a763316bf084e132c687cd4d36019f3695c16f9d4ea5f44f3ba3a57cd9fb", + "bytes": 602374 + }, + { + "path": "demo/routing/crossbar/take-01/export.json", + "sha256": "fe8f0f5a52d4038f73d2109d6faf9e9c96471aa9f26b76a7f96bb5ee065c257b", + "bytes": 1445 + }, + { + "path": "demo/routing/crossbar/take-01/final.json", + "sha256": "6ca4cc99030f6b955e95fd9ab0d66220a93e15b7e91951da9d0a97f29fed8aad", + "bytes": 50351 + }, + { + "path": "demo/routing/crossbar/take-01/fusion-crossbar-24-routed.brd", + "sha256": "efe8a8277b87fb9664102430c2f5e9881f9aa5e0379d34b2d234aeb4fb012dc9", + "bytes": 49488 + }, + { + "path": "demo/routing/crossbar/take-01/fusion-crossbar-24-routed.fbrd", + "sha256": "3023e86d55f3dcb9e6f2660700a657ff224609582575c078e8da8a5016f8c04c", + "bytes": 12632 + }, + { + "path": "demo/routing/crossbar/take-01/motion-scores.json", + "sha256": "2005d8bc13098bdc07f88726150818499dd6325afebc85a832af6f4e62d8e7f8", + "bytes": 22433 + }, + { + "path": "demo/routing/crossbar/take-01/record-start.json", + "sha256": "a66f7d2c0288cef6e869d2195232507f14bcbd34ab9cbdc3c5b042fa89648943", + "bytes": 1248 + }, + { + "path": "demo/routing/crossbar/take-01/record-stop.json", + "sha256": "0abf19adc00ed77e993201986a4a1637fcb8c4c395bd1e3999aa2b856bbe1866", + "bytes": 1098 + }, + { + "path": "demo/routing/crossbar/video-verification.json", + "sha256": "f7fe18ceae56d8508697e343a4054992f456381041b13962a9abfbc6990ce250", + "bytes": 827 + }, + { + "path": "demo/routing/evidence/boards/fusion-routing-routed.brd", + "sha256": "6ce1d1f9a6b040e516578f704203b7142c0cddbcb8054a3b7fd82efae07e3222", + "bytes": 30208 + }, + { + "path": "demo/routing/evidence/boards/fusion-routing-routed.fbrd", + "sha256": "9bfb959ac595a94fca6af8c6f2e03d5fa076238ccbfaabf602714f3d9e5646c6", + "bytes": 10280 + }, + { + "path": "demo/routing/evidence/dev-bridge.json", + "sha256": "7e1c08d05886c83439fdb26a2a5fe4cec6a7d826ffb439201b35c42e609838b0", + "bytes": 229 + }, + { + "path": "demo/routing/evidence/final-take/001-fusion_routing_state.json", + "sha256": "80a52451607b99d6475f11aca4ac436dce41f84f7f69961ab17aa6c079904a7e", + "bytes": 6559 + }, + { + "path": "demo/routing/evidence/final-take/002-fusion_route_net.json", + "sha256": "544d7236245370efe101d4ec43ea4866065040e6604929ad40415501ed379b73", + "bytes": 2185 + }, + { + "path": "demo/routing/evidence/final-take/003-fusion_route_net.json", + "sha256": "3af69585f94bf60a9dea23ad48b9153f21b13e76ffdcf245729d897e9b0c7e9d", + "bytes": 2193 + }, + { + "path": "demo/routing/evidence/final-take/004-fusion_route_net.json", + "sha256": "a201d9352992203bbe77e9f9fef7698e9ac1d7646754b13d90c0eb0dde573adb", + "bytes": 2682 + }, + { + "path": "demo/routing/evidence/final-take/005-fusion_route_net.json", + "sha256": "ecb315383fda86d917dc9a5e7312e9ada829708fdfa70d2121ac44176b881a82", + "bytes": 2192 + }, + { + "path": "demo/routing/evidence/final-take/006-fusion_route_net.json", + "sha256": "4aa410e75b483fa77d00df7b478461400117c0a5f336d245cb62baee0741f5e7", + "bytes": 2192 + }, + { + "path": "demo/routing/evidence/final-take/007-fusion_route_net.json", + "sha256": "143e45cab8f07b35493bbcc23d6a6b2d2593d244c48e76aacd2fd2662e17da93", + "bytes": 2854 + }, + { + "path": "demo/routing/evidence/final-take/008-fusion_execute_text_command.json", + "sha256": "6d18d7a38ac3cfc9bc625cb7984cc769a88ef89f7cf057d33858c7f6c835fda3", + "bytes": 1345 + }, + { + "path": "demo/routing/evidence/final-take/009-desktop_record_window_start.json", + "sha256": "3ee0135257fcdce198d754ec95e7b3b5edcb65dde539b3834810bb7a0752a3d4", + "bytes": 1485 + }, + { + "path": "demo/routing/evidence/final-take/010-fusion_route_net.json", + "sha256": "46f9f78b92287a18125ec86cc7093eecf92e4fc04d6bd6a79ef5d1194dba84a0", + "bytes": 7700 + }, + { + "path": "demo/routing/evidence/final-take/011-fusion_route_net.json", + "sha256": "bff4aa71958bc7f63702999964eaf93f82a9982c89f6ace7ef6aa5ba6e9901ec", + "bytes": 7917 + }, + { + "path": "demo/routing/evidence/final-take/012-fusion_route_net.json", + "sha256": "778fe08b8074c3a7b27b29d118637d12848983b695cb40056853cd5c5a3d7084", + "bytes": 7952 + }, + { + "path": "demo/routing/evidence/final-take/013-fusion_routing_drc.json", + "sha256": "527cfa3bb33d00e6d9b817ded505e867878d5d6be6b75a6f37baf3ce3357cbe5", + "bytes": 8017 + }, + { + "path": "demo/routing/evidence/final-take/014-fusion_route_net.json", + "sha256": "c6b9adbf2f06e066dd138504700b58658f5ecaf3e5c2c6446bd5c25969c3de14", + "bytes": 8180 + }, + { + "path": "demo/routing/evidence/final-take/015-fusion_route_net.json", + "sha256": "822660ef285b95b45cdd01fce0bf562ec42f3f7cca33f0d373a54da4e4d4834e", + "bytes": 8400 + }, + { + "path": "demo/routing/evidence/final-take/016-fusion_route_net.json", + "sha256": "8c909e6e3dc8b8205f2467b9057703ad0f5a8b9f09b4aae7af589d0f6e3ae317", + "bytes": 8433 + }, + { + "path": "demo/routing/evidence/final-take/017-fusion_routing_drc.json", + "sha256": "0051f652ee5d23bff5f8b4412881e7f201ae05acaeab6bcfe64e412c25792479", + "bytes": 8371 + }, + { + "path": "demo/routing/evidence/final-take/018-fusion_route_net.json", + "sha256": "ff6b62797cc3d15c3dcb5aee2610b50a9d82f6c63af42b2557729fa6066ebfc3", + "bytes": 8656 + }, + { + "path": "demo/routing/evidence/final-take/019-fusion_route_net.json", + "sha256": "716459114757e4868d29cdaf1278a8549a9130de187ceaa0af1bc1e1b93db426", + "bytes": 8871 + }, + { + "path": "demo/routing/evidence/final-take/020-fusion_route_net.json", + "sha256": "8fe316b80c6f1da2d652b4ffc5deceee0ca4c09b6906d617a4db234293bc8a5d", + "bytes": 9055 + }, + { + "path": "demo/routing/evidence/final-take/021-fusion_route_net.json", + "sha256": "f317180d887274114a8dfce1de1c503bea3796062d57f3cb1c13bfa314db1b2b", + "bytes": 9268 + }, + { + "path": "demo/routing/evidence/final-take/022-fusion_route_net.json", + "sha256": "c6701be23bd0e5c1f691162b3e8a3bec8ff4035f811db8eb4bdf5e5b89e67202", + "bytes": 9257 + }, + { + "path": "demo/routing/evidence/final-take/023-fusion_routing_drc.json", + "sha256": "98171c59c1593212de1301953efbe332a2eedc79071cc0a59d20a89bff479422", + "bytes": 9072 + }, + { + "path": "demo/routing/evidence/final-take/024-fusion_route_net.json", + "sha256": "e70793a2358dad1bffb9b73d59f1f3f4d3cfe116e2f709c72b6859ae0670e6d6", + "bytes": 9479 + }, + { + "path": "demo/routing/evidence/final-take/025-fusion_route_net.json", + "sha256": "a652c31b1b2388e41051c2fd47a059f536cdf1a1b25256bce8f34461124e7089", + "bytes": 9700 + }, + { + "path": "demo/routing/evidence/final-take/026-fusion_route_net.json", + "sha256": "fc7e834a3c317965959803d2310717645184b5a0f86c85f9cf71ca2fcdb6e4bd", + "bytes": 9734 + }, + { + "path": "demo/routing/evidence/final-take/027-fusion_routing_drc.json", + "sha256": "9513487a83d50184cdca1b03c0992624aa3fc0ecea52c897110e0c8f7f4d2e54", + "bytes": 9428 + }, + { + "path": "demo/routing/evidence/final-take/028-fusion_route_net.json", + "sha256": "f1f1a9f4965253563539cb33356df2543ec39807f26a44c7ec0b5954336931cc", + "bytes": 9956 + }, + { + "path": "demo/routing/evidence/final-take/029-fusion_route_net.json", + "sha256": "ad64bf44e4f6b15f23d25751bd4da082d7435bb00af50b706d42d395bdc30b97", + "bytes": 10176 + }, + { + "path": "demo/routing/evidence/final-take/030-fusion_route_net.json", + "sha256": "66e2ee52282fa351942ab781b2867ef2189ca58867c0fe5f63b830d753d29040", + "bytes": 10210 + }, + { + "path": "demo/routing/evidence/final-take/031-fusion_routing_drc.json", + "sha256": "388e65a33e6642efa10138b6598e1e98006ec95dbcf681f6ffc691b44d742e05", + "bytes": 9782 + }, + { + "path": "demo/routing/evidence/final-take/032-fusion_route_net.json", + "sha256": "7f6815270d698b4e1d51252d9ac1c8b6c478db5539ce8c3febd55aff28761ed0", + "bytes": 10432 + }, + { + "path": "demo/routing/evidence/final-take/033-fusion_route_net.json", + "sha256": "97f03abe0feeef557c65652c1d017ce54a59e1eec3feb56e08981690c3dce587", + "bytes": 10651 + }, + { + "path": "demo/routing/evidence/final-take/034-fusion_route_net.json", + "sha256": "0b9b979931e98637bac8e08a0577c94088a3bb3663cbd3b655d6f608e9cf5cc5", + "bytes": 10708 + }, + { + "path": "demo/routing/evidence/final-take/035-fusion_route_net.json", + "sha256": "662e0971c785d617d5cd0188a4152a4e47ff20326521715d028d9a06d4fc5956", + "bytes": 11150 + }, + { + "path": "demo/routing/evidence/final-take/036-fusion_route_net.json", + "sha256": "f63ca7aadd5f947453eb483d2a82763d8928875866e1b1cefc2647282a0ac479", + "bytes": 11180 + }, + { + "path": "demo/routing/evidence/final-take/037-fusion_routing_drc.json", + "sha256": "7b1160cbbbb564fe2098401e5637f3610be82953556ac733352713be1826641c", + "bytes": 10502 + }, + { + "path": "demo/routing/evidence/final-take/038-desktop_record_window_stop.json", + "sha256": "1ebf8e82fd22d10cdbd0f7e801659ca87787502595aac4d17d09e9e2ef3fd045", + "bytes": 1329 + }, + { + "path": "demo/routing/evidence/final-take/result.json", + "sha256": "e82dca508b90c99578d36cadc81da8b1e2c92306f46d4cbf4345de4a304f58d3", + "bytes": 10340 + }, + { + "path": "demo/routing/evidence/final-video-probe.json", + "sha256": "189e08fd62b4393fa0df18f49b248048afcae58ea346cd350c84426977f634ae", + "bytes": 313 + }, + { + "path": "demo/routing/evidence/final-video-recording.json", + "sha256": "1222c866c7a4e36c5744433bc09a3384a45d382e6ce5eb211372e0c07b4ddd87", + "bytes": 1088 + }, + { + "path": "demo/routing/evidence/install.json", + "sha256": "08a77e19d339ed91c9acff79cb5e5aedf057e560b1e008b7a53affdfb1bbf598", + "bytes": 419 + }, + { + "path": "demo/routing/evidence/live-rejections.json", + "sha256": "7da1c325c0cdf5864fab29ece8ca6a2871a12121c5d83aee103bdde821969de1", + "bytes": 4334 + }, + { + "path": "demo/routing/evidence/per-net/001-fusion_routing_state.json", + "sha256": "abeae0e1106c9da55216f3477611009cc70504ca1d7963c16097c95cc7d696f8", + "bytes": 6559 + }, + { + "path": "demo/routing/evidence/per-net/002-fusion_route_net.json", + "sha256": "46e12f33042b9ff224dda7cdc080d084f5a5ecf5fa8088baac03d6d151e4d0a4", + "bytes": 2185 + }, + { + "path": "demo/routing/evidence/per-net/003-fusion_route_net.json", + "sha256": "8efc12fa35a9100a0f942f7cb38fe9309650fd04ea5225b0c570774b3ada6511", + "bytes": 2193 + }, + { + "path": "demo/routing/evidence/per-net/004-fusion_route_net.json", + "sha256": "3c5c4bc3749633c41c39a7372eaa0470386e2966404d768d01298f204459cd2d", + "bytes": 2683 + }, + { + "path": "demo/routing/evidence/per-net/005-fusion_route_net.json", + "sha256": "7c92a59a123bcc36f0bddceb52da88ff7502e847fbd1c399c8bb1c765f7510f5", + "bytes": 2193 + }, + { + "path": "demo/routing/evidence/per-net/006-fusion_route_net.json", + "sha256": "0fa413f3469f066fb4e31ea8aac87f01db985ecf2ccd1e341495724aebd205a7", + "bytes": 2193 + }, + { + "path": "demo/routing/evidence/per-net/007-fusion_route_net.json", + "sha256": "b3b84c60ac7ce86d86e04f7b14007572daa1b300a924de8372cbdbce584724ed", + "bytes": 2854 + }, + { + "path": "demo/routing/evidence/per-net/008-fusion_route_net.json", + "sha256": "8f3f4646bd45bb3aafafa1bb09430a1902eba48186835cf05d5d4306664d25d7", + "bytes": 8754 + }, + { + "path": "demo/routing/evidence/per-net/009-fusion_routing_drc.json", + "sha256": "5253628ef9bcd7a5ec99f55ff141f7513968bbeb2b2683e2c07f6897c1f16cd9", + "bytes": 8017 + }, + { + "path": "demo/routing/evidence/per-net/010-fusion_route_net.json", + "sha256": "23a1cc4943f93bdc5545866392510e9285351a5e4c3ac16f6668d8b9e1280c98", + "bytes": 9244 + }, + { + "path": "demo/routing/evidence/per-net/011-fusion_routing_drc.json", + "sha256": "82bccf27ffe398ed38e12628972c717ac9abcbbdcacc06e6e9539bc9f4e3151f", + "bytes": 8372 + }, + { + "path": "demo/routing/evidence/per-net/012-fusion_route_net.json", + "sha256": "c1ea2a3c1ea8a42e187f5cdbd4fd6ea53580d5f6cdfd970a59f29237c2c266fa", + "bytes": 10800 + }, + { + "path": "demo/routing/evidence/per-net/013-fusion_routing_drc.json", + "sha256": "2070e76229c6d951a2815f8592c8c73fb487abd3366e92df10dd034a111410be", + "bytes": 9073 + }, + { + "path": "demo/routing/evidence/per-net/014-fusion_route_net.json", + "sha256": "5b08fc4b9adad0c7c2ab959a73c30d8c8d69aa531498715c811a178dc856f7e1", + "bytes": 10544 + }, + { + "path": "demo/routing/evidence/per-net/015-fusion_routing_drc.json", + "sha256": "49e31b2880069d8877e1fcc21b8658e04c47accb325662db156636cde6a41fff", + "bytes": 9428 + }, + { + "path": "demo/routing/evidence/per-net/016-fusion_route_net.json", + "sha256": "abe0196e3ace12dbee4ca97b9440a84f4affd610d6bf176843f8cd918502380a", + "bytes": 11020 + }, + { + "path": "demo/routing/evidence/per-net/017-fusion_routing_drc.json", + "sha256": "de55175856b535ae1331bb1e1d12924e43a2b2560ec8cc2b8e7e32f56acb9993", + "bytes": 9782 + }, + { + "path": "demo/routing/evidence/per-net/018-fusion_route_net.json", + "sha256": "536efcd77dad3ce1bed6174f97a76726bbadcaf99eeafa1782040e7d8902ec7e", + "bytes": 12842 + }, + { + "path": "demo/routing/evidence/per-net/019-fusion_routing_drc.json", + "sha256": "4a1777f2deecc84ef3470683630090b26a6999e4151baa944313e78bcabab438", + "bytes": 10503 + }, + { + "path": "demo/routing/evidence/per-net/result.json", + "sha256": "7ef17a7d87864a43a53daa9f20075d6e2a3e04d04120a1fba391ca43d8fcc2e9", + "bytes": 10338 + }, + { + "path": "demo/routing/evidence/pinned-refresh.json", + "sha256": "481ec84354c69e766e0f646c32d7b64e7b30d1244eb0b0ff21303d091d848b66", + "bytes": 1316 + }, + { + "path": "demo/routing/evidence/redo-final.json", + "sha256": "89c577b96f26a12caa05e9279c9601737efdc70080f733c2f80b13d5444d64f3", + "bytes": 8983 + }, + { + "path": "demo/routing/evidence/showcase-delivery.json", + "sha256": "05990d995750c34cac0465187b2ff156c69b53ff6c4fcce7ac8f4daea77d3b47", + "bytes": 1080 + }, + { + "path": "demo/routing/evidence/showcase-player-open.json", + "sha256": "15abb38a1d41fd4758cd72226d4be8295013a287c74c561c796ee538511097f9", + "bytes": 135 + }, + { + "path": "demo/routing/evidence/showcase-player-verification.json", + "sha256": "45931301f180d12246b2f9393a6ffc3ec1d13b626875e92ceb14e4871274b97e", + "bytes": 587 + }, + { + "path": "demo/routing/evidence/showcase-video-validation.json", + "sha256": "37987af6780ed3a9ae4508c2b9ca7fa8f8ba22a583b13991562dd17614a6a10e", + "bytes": 5231 + }, + { + "path": "demo/routing/evidence/undo-final.json", + "sha256": "2c908b3adc250f03ac43d0514dc074d8b5c344a76df2e95b759b6cff7944f96c", + "bytes": 8963 + }, + { + "path": "demo/routing/evidence/video-delivery.json", + "sha256": "4936d1233e2a322f031e1021019ce503890b6398907dd4e0bbca9e74b4d9cb73", + "bytes": 1078 + }, + { + "path": "demo/routing/fixture/fusion-routing.brd", + "sha256": "8f34753e934e7f40da9b10f76629a139eb4aeb920f53d128d22696334f7a0c43", + "bytes": 9325 + }, + { + "path": "demo/routing/fixture/fusion-routing.sch", + "sha256": "6c09e7da57b17a872c9255679525bce4d0b718faf406458e7475272ff54fafbf", + "bytes": 9964 + }, + { + "path": "demo/routing/fixture/plan.json", + "sha256": "e7cd7a18b0a4616b28f909c767cd2a70c0f91ba23ebe1a01fbc50abeaa0bf224", + "bytes": 1939 + }, + { + "path": "demo/routing/live_panel.py", + "sha256": "93c0b4c3086a615483c826a08ad19bc87953015e6ad2c08e719ba8800d9a6e81", + "bytes": 4995 + }, + { + "path": "demo/routing/make_fixture.py", + "sha256": "26de62cb938374664a43a28221dcb8458e311206347f0abad897da849a236344", + "bytes": 5516 + }, + { + "path": "demo/routing/obstacles/README.md", + "sha256": "23ed3938c4dc5bc7775ea03e961e3bbb3b71b90190a1157839b848ac5ad9d3f1", + "bytes": 5941 + }, + { + "path": "demo/routing/obstacles/delivery.json", + "sha256": "72a325687c9a775aaae92bc6166360fa07e61baa8e017a7ed4516c0c798719aa", + "bytes": 1159 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-lab-v2.brd", + "sha256": "524fdb88a713b9e5317e44b8a83200ad0a572ef4f4940ff1f0d0b297871ebbe8", + "bytes": 6709 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-lab-v3.brd", + "sha256": "524fdb88a713b9e5317e44b8a83200ad0a572ef4f4940ff1f0d0b297871ebbe8", + "bytes": 6709 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-lab.brd", + "sha256": "524fdb88a713b9e5317e44b8a83200ad0a572ef4f4940ff1f0d0b297871ebbe8", + "bytes": 6709 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-live-1x.ass", + "sha256": "39e30891c4bbff7caaa60dc68602351b34f5bf9a3f2ac12c43b83b70b04f7533", + "bytes": 1311 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-live-1x.edit.json", + "sha256": "0bbc8a36fdd23be3ac989c819ea46addbd5aa36962a21d3d4d137af07a25b991", + "bytes": 645 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-live-1x.mp4", + "sha256": "c76e5eae815b61743307c500b6f0cae4fd5d5a16c12eced9cf2041b8227a3e16", + "bytes": 1589166 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-live-3x.ass", + "sha256": "f5fd67c62eff9370923873508c903c255f20fc60a35aef99c7f291a043aab9b5", + "bytes": 1311 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-live-3x.edit.json", + "sha256": "397466814ec2c1d2ff2232ad9cc958754ef55453e620a68f5684ffc71c6b636d", + "bytes": 656 + }, + { + "path": "demo/routing/obstacles/fusion-obstacle-live-3x.mp4", + "sha256": "0104fae34e4654065a2e772a59aefb3f753cf74e266da4336297f8c890645426", + "bytes": 976138 + }, + { + "path": "demo/routing/obstacles/install-v4.json", + "sha256": "fb86f830f1121de7a2f6bac94d2b9e9c5bf8d7e000dc4fee28732e29554c948f", + "bytes": 426 + }, + { + "path": "demo/routing/obstacles/install.json", + "sha256": "3bea7d372b79b74ff1c9a44a1b6780742af2d17ac047b36c7b87cabfe5b0b019", + "bytes": 426 + }, + { + "path": "demo/routing/obstacles/live-planning-probes.json", + "sha256": "0629855d694ec4ce53065f4f7966446f98256b515bd5a9e696e8a08a49640afe", + "bytes": 5768 + }, + { + "path": "demo/routing/obstacles/player-verification.json", + "sha256": "f1d2d96bb54073a5893442a8707d24dad904389e3372754ac80909b1c85ea48b", + "bytes": 693 + }, + { + "path": "demo/routing/obstacles/player-windows.json", + "sha256": "fa50a0c24a372deefdedbee0b607b0d848171fc306bc263bcb8900216c119699", + "bytes": 445 + }, + { + "path": "demo/routing/obstacles/record_obstacles.py", + "sha256": "46c1b2ba8699056bcf7d7c1e456be78c6645a13911dbf8de67fa9c6d398e456b", + "bytes": 7068 + }, + { + "path": "demo/routing/obstacles/render_obstacles.py", + "sha256": "8ee147792e2bc3c2650212d6ddd4ea400e6f4e7ecabf95630df8747ca26a6d13", + "bytes": 3195 + }, + { + "path": "demo/routing/obstacles/requirements.json", + "sha256": "43bd12c7ee662f756ae97b441efd8ca15c7a88e6812691a38637c64fe1debb97", + "bytes": 482 + }, + { + "path": "demo/routing/obstacles/take-01/before.json", + "sha256": "e91f92e1d2a021bc0871407ac5c30278bfd5283c0d355d7045ce2fc4c4307e6d", + "bytes": 3851 + }, + { + "path": "demo/routing/obstacles/take-01/calls.json.gz", + "sha256": "e73f18405c166bd378868010d0b1f8d26cfdd1facc2775d700be6e58847f977d", + "bytes": 5001 + }, + { + "path": "demo/routing/obstacles/take-01/plan-1.json", + "sha256": "4610fbd2af3917f0fea7caa0ae3e1e33c8304ba9507ca905ded5ba01adc2aefe", + "bytes": 2587 + }, + { + "path": "demo/routing/obstacles/take-01/plan-2.json", + "sha256": "87160c2402d04d2cf69df8e2bf488091f911f038a185b405081669c118d9a67a", + "bytes": 2677 + }, + { + "path": "demo/routing/obstacles/take-01/record-start.json", + "sha256": "b9634e8ba4dc232b38053f7681bf9b5f40e48afa9ff84bb62710fe97916f7e63", + "bytes": 1250 + }, + { + "path": "demo/routing/obstacles/take-01/record-stop.json", + "sha256": "0f95744bdecd6f7c6c8a2513c30fda042650653dcd9b9dd7d03444e8f03979a7", + "bytes": 1086 + }, + { + "path": "demo/routing/obstacles/take-02/calls.json.gz", + "sha256": "d7fd7ef7fddb848e5a6fb4ba6b8d969ac28e223f206bce0c09da196793018c28", + "bytes": 454 + }, + { + "path": "demo/routing/obstacles/take-03/before.json", + "sha256": "c9e85233ec06a67195c70de5d9944a47c321287cefeefc46e3f4a8bb711bdaeb", + "bytes": 3854 + }, + { + "path": "demo/routing/obstacles/take-03/calls.json.gz", + "sha256": "f209cb89b765865755f20e8e1ae6e87f12d46c939eb84e5b791fc2c415238842", + "bytes": 5964 + }, + { + "path": "demo/routing/obstacles/take-03/final.json", + "sha256": "7e8a7a3855c368e9a315714477b8d988a339193565399ac6e5a856fc314df4cc", + "bytes": 5305 + }, + { + "path": "demo/routing/obstacles/take-03/fusion-obstacle-routed.brd", + "sha256": "7aff8a475e832f2dfe8c28c8bbc0d824040aaa7999c39021478e6c75961ec446", + "bytes": 28945 + }, + { + "path": "demo/routing/obstacles/take-03/fusion-obstacle-routed.fbrd", + "sha256": "8bab1c2cdf062599494c70d8fbc9150f875407715162d8ae22ed522525228879", + "bytes": 10053 + }, + { + "path": "demo/routing/obstacles/take-03/plan-1.json", + "sha256": "aa8453467e301e91ae4c13d855b9a140437ea48297d013b1c7696ea44ab2f342", + "bytes": 2590 + }, + { + "path": "demo/routing/obstacles/take-03/plan-2.json", + "sha256": "a4ade666159ee54ca063cb98942c06da4192b40889c1c5f3564d78685b37cb72", + "bytes": 2680 + }, + { + "path": "demo/routing/obstacles/take-03/plan-3.json", + "sha256": "bc4e4bf393dc9982050e631c5d34d48c3a8a49b19dddf086369a2f6aedf43a76", + "bytes": 1650 + }, + { + "path": "demo/routing/obstacles/take-03/record-start.json", + "sha256": "88c74e01d6cbbb0362def8b381704e68d361659c8b772a1bc1a4b541512d5766", + "bytes": 1247 + }, + { + "path": "demo/routing/obstacles/take-04/before.json", + "sha256": "7a8b4f6e5aea47b55e52da0fa8a4386bdc62991dbb131274ee7384ed876bfafb", + "bytes": 3854 + }, + { + "path": "demo/routing/obstacles/take-04/calls.json.gz", + "sha256": "17d3bb275a6b3a39eb5eb9cd84e3e2b0eb2f424bc54c7ffc062903490c1b9615", + "bytes": 9661 + }, + { + "path": "demo/routing/obstacles/take-04/final.json", + "sha256": "752e2d2e2d278942a71df7b1e5a39bfee17fe570e9fbfe8b43e86ba9d5c18851", + "bytes": 5305 + }, + { + "path": "demo/routing/obstacles/take-04/fusion-obstacle-live-routed.brd", + "sha256": "6ecae2964536f34b1f2e9e1586560c53b7d079ed5ee3256e14d248b5216d2927", + "bytes": 28945 + }, + { + "path": "demo/routing/obstacles/take-04/fusion-obstacle-live-routed.fbrd", + "sha256": "8755af70e113ed7fe0a04783b674382f2851c4bc9f35791b685c7d311ec17bc1", + "bytes": 10051 + }, + { + "path": "demo/routing/obstacles/take-04/panel-events.jsonl", + "sha256": "11dff7e45eddac85987a4f367002b4a25c3366fc010c84b0ce77914fba84d4a1", + "bytes": 12040 + }, + { + "path": "demo/routing/obstacles/take-04/panel-record-start.json", + "sha256": "f79accd0a583d88033b38a06a7b56913b89f782900cfd62d75c32be168518aab", + "bytes": 1109 + }, + { + "path": "demo/routing/obstacles/take-04/panel-record-stop.json", + "sha256": "bb4bbc4d4faba4eed9a606feae83bdacc6798abc4e2d610731ae571fe124ae6b", + "bytes": 1093 + }, + { + "path": "demo/routing/obstacles/take-04/plan-1.json", + "sha256": "2cb59da3135fc5739bef1fe2cfe038d903f8cc3d90c38b342cf4346d4318d6fe", + "bytes": 2589 + }, + { + "path": "demo/routing/obstacles/take-04/plan-2.json", + "sha256": "1c3cca39ba9519ec93d1a3832a5f85e2fdf57ea761fa2a1681ee5380c44651d2", + "bytes": 2680 + }, + { + "path": "demo/routing/obstacles/take-04/plan-3.json", + "sha256": "3c6b6603fae567af0e81e97d76366008b364e50e4f41ef8d71c71bfbd76e0be1", + "bytes": 1652 + }, + { + "path": "demo/routing/obstacles/take-04/record-start.json", + "sha256": "806aa33ef56d81242013fc70008a05260ab733c8d2ef475c084f5e407bcb5381", + "bytes": 1256 + }, + { + "path": "demo/routing/obstacles/take-04/record-stop.json", + "sha256": "f0f87020f367d27e91f81118114f4ea705b92711e26f8bcef164ebca318751bc", + "bytes": 1092 + }, + { + "path": "demo/routing/obstacles/video-verification.json", + "sha256": "708fcb6cae2e9595e29cd544106a020fd399c6998ce4acdb72dec569b9747b59", + "bytes": 682 + }, + { + "path": "demo/routing/prepare_live_panel.py", + "sha256": "4904b0d096cbbf280c6937840fae00db8c4a7b6e565454b820f32effe350ed63", + "bytes": 1311 + }, + { + "path": "demo/routing/render_showcase.py", + "sha256": "dda258ff587aec40d6e1c41e7c483e9433b1580f3950ff4efbce1bc1b47069b6", + "bytes": 4197 + }, + { + "path": "demo/routing/run_demo.py", + "sha256": "cc516e4dd7b390772790c799c985a5e5b0ed3994f780aae03c309083b2093531", + "bytes": 3807 + }, + { + "path": "demo/routing/screenshots/end.png", + "sha256": "efa14aa6334d58b0f06add9c0f896ef3fba8a896ffb7e3e317db2d68dad55f94", + "bytes": 455562 + }, + { + "path": "demo/routing/screenshots/start.png", + "sha256": "265090aa39c7f838db09dbe769c28116d6f3986b8bff5095ef3bb3a563ee806f", + "bytes": 629227 + }, + { + "path": "demo/routing/videos/fusion-live-trace-routing.mp4", + "sha256": "0887b7543e744ff64f4ae4c138c7a336d9d3a688633cc31cb41faf4968431c59", + "bytes": 526268 + }, + { + "path": "demo/routing/videos/fusion-routing-showcase-3x.ass", + "sha256": "a8351a750e7adc5b5bd1bbed0d0406b5124739cd608d22ed556274966987f6df", + "bytes": 2295 + }, + { + "path": "demo/routing/videos/fusion-routing-showcase-3x.edit.json", + "sha256": "543cf8f3b6e7b49c79de4cc889967f676ff1f14eef60a5925fd3c743e080025f", + "bytes": 1060 + }, + { + "path": "demo/routing/videos/fusion-routing-showcase-3x.mp4", + "sha256": "76cc6a6283fe65d2b96f503cde9c0116514bea209220cf778bbedf8a206fb07a", + "bytes": 325196 + }, + { + "path": "describe.py", + "sha256": "62699752888b561a29cacfef8bce50e559dc8075ef170613ea0424113c341722", + "bytes": 144463 + }, + { + "path": "dev-skills/fusion-auth-surfaces/SKILL.md", + "sha256": "f749f04411e832b7e17f0878202b559fa56dd09378069835ec20313cd88335e2", + "bytes": 7970 + }, + { + "path": "dev-skills/fusion-background-etiquette/SKILL.md", + "sha256": "3ca4312bedf76c66335e596231beeaac4d0da3daa82071b75d0d4cc98c87ef92", + "bytes": 11814 + }, + { + "path": "dev-skills/fusion-bridge-dev/SKILL.md", + "sha256": "5a4869becc573bb30a68c872b1ffc2dc6dc171f31e7650a2d3c1442863b3d4ac", + "bytes": 38095 + }, + { + "path": "dev-skills/fusion-dashboard/SKILL.md", + "sha256": "ee0244e2daea8a44ac5864bb948dea9163d8833898b3ece1f15a5ce093bd091b", + "bytes": 9260 + }, + { + "path": "dev-skills/fusion-dialogs/SKILL.md", + "sha256": "76f838df69ae627e4c4ef0ffe427b5b23f934ba218238be06944237187f5aa6b", + "bytes": 8809 + }, + { + "path": "dev-skills/fusion-hero/SKILL.md", + "sha256": "de663fc1b8b166fd01b1037988fffd8300d27609315a98c66a00d98b85e18806", + "bytes": 8512 + }, + { + "path": "dev-skills/fusion-publishing/SKILL.md", + "sha256": "fa8372c56a74319cf168a9b6fffe58a5d83ace8f1abe77f2852911102fa8e1f4", + "bytes": 6607 + }, + { + "path": "dev-skills/fusion-taskbar-badge/SKILL.md", + "sha256": "efe038d863a8492fa1e1dea10e3e3aaaa1da834dd7a499ce84fa854e9c0ee512", + "bytes": 7229 + }, + { + "path": "dev-skills/fusion-verb-tests/SKILL.md", + "sha256": "f580e57ee5da55b71edf3ffbd71206fc1d6bce964a5db47864a5388814c5bc52", + "bytes": 9772 + }, + { + "path": "dev-skills/fusion-verb-timing/SKILL.md", + "sha256": "3ce709d177791cdb29a5ffa0b67725cc6cd832390d764918c994d415bcf37ec8", + "bytes": 6686 + }, + { + "path": "dockbar.json", + "sha256": "0de36d6305ebec71d5936dc1d29274ee8215d5fd7302f8459658a821d8022f00", + "bytes": 1800 + }, + { + "path": "docs/3d-viewer-and-export.md", + "sha256": "4923df462e44f17045c60073be5044a8782496cc85e09b5155eb1cfeb308684a", + "bytes": 8182 + }, + { + "path": "docs/CP8-ACCEPTANCE.md", + "sha256": "8e7707219ca636576e4df5f1fed547f7234c5d936b3d142d7abe8fdf9f187c6e", + "bytes": 3265 + }, + { + "path": "docs/EXPLODED-VIEWS.md", + "sha256": "809d8937fdedb7d4230614d349323ea32b3eca5ad2e3f36eee14c027f23a4aa7", + "bytes": 3325 + }, + { + "path": "docs/MECHANICAL.md", + "sha256": "9bcf2abfc30aa263c3d3ea85c72f064524a13f2085d55c2ffa92beafcc490590", + "bytes": 26807 + }, + { + "path": "docs/MULTIPART_LIBRARY_IMPORT.md", + "sha256": "9dc93bebf34606c4005ea9338bb1a7a374481d426b56240156c5b6b72695f78e", + "bytes": 11412 + }, + { + "path": "docs/TESTING.md", + "sha256": "a258840ec4ea9a4859f89eeaf22c68449670ff44fe6c1b92335c82cbbb09f2d3", + "bytes": 10035 + }, + { + "path": "docs/aps-cloud-search.md", + "sha256": "54d24da1e8fa92d35e3aa720026b71a7651970234e27f2e5e1f4543ce89eba9a", + "bytes": 7691 + }, + { + "path": "docs/astra-placement-routing-3d.md", + "sha256": "ba999b40d2ec1eaf691793bba1c713d8949551a7e0cccdfc06346c5e54ba0348", + "bytes": 5470 + }, + { + "path": "docs/board-layout-2d.md", + "sha256": "97bdc77ee9284a029990bd3bcd536ff921104dd451aad8564afba820a01749bd", + "bytes": 9380 + }, + { + "path": "docs/build-2026-10-02-2.md", + "sha256": "5924572244c78e20a1f27ec31641264d5442613bd8a1b41d380bfcd7064bdcbb", + "bytes": 8386 + }, + { + "path": "docs/build-2026-10-02.md", + "sha256": "a6407d2ed9a0b471a122077f15aa930f70a1553e9be128a5d77f55acf39c58d8", + "bytes": 14854 + }, + { + "path": "docs/build-2026-10-05-assemblies.md", + "sha256": "84a453d01f1d1b082fa78605c1a3fdd987def588324edf9add95b3a4958d0f32", + "bytes": 4814 + }, + { + "path": "docs/build-2026-10-05-jobs.md", + "sha256": "a950075951b8f748a965d4d279a5bc2f7fe49feebf8af9a14d23ecaa40665b59", + "bytes": 6004 + }, + { + "path": "docs/build-2026-10-05.md", + "sha256": "23bbef3607a9853d4577f12d64e8ef1b790bcd4038f822b78fb940f28eb13673", + "bytes": 5280 + }, + { + "path": "docs/demo-videos.md", + "sha256": "a22b6ba8bee59f7c4713174d964eacab214ee7957cf008e3ac29b0a518348725", + "bytes": 5606 + }, + { + "path": "docs/electronics-libraries.md", + "sha256": "4e47de97d8def6061bf140900894e516422bb7992cdb8aa98b9213165fa734dc", + "bytes": 6710 + }, + { + "path": "docs/forum-videos.md", + "sha256": "0d87e98e7b33c0654b0c28910196db91966da93787ee375bf36c53c675be3fa6", + "bytes": 57 + }, + { + "path": "docs/fusion-demo-tour.md", + "sha256": "0669e7aa95606344acee0231c1096864bf946b020801a832d281cb0d22542dc1", + "bytes": 3448 + }, + { + "path": "docs/fusion-mcp-server.md", + "sha256": "99c108092236f6be4383e092247602bf968a8ee865d428b03a613fd9ad31deca", + "bytes": 18850 + }, + { + "path": "docs/fusion-preferences.md", + "sha256": "6adb3207d7dc43cc44533ed1847e0f1a1f893ea1e5378c4fd32c6a6bb373949d", + "bytes": 5532 + }, + { + "path": "docs/img/.retired-dock-fusion.png", + "sha256": "a5554421f76c39e3c9a271a95af1f4a623c416381d4c81e2413604b00dd71f5f", + "bytes": 5814 + }, + { + "path": "docs/img/circle-2dboard.webp", + "sha256": "5a51aaece1cc2c82e8075616bb537651ee994c1ba1890861ebf7ec7fa2a855fe", + "bytes": 34812 + }, + { + "path": "docs/img/circle-3dboard.webp", + "sha256": "c639945b0fbdd7bbe8597378310243444e25c964a8ddd0c7d833b00b52ce1b4d", + "bytes": 19000 + }, + { + "path": "docs/img/circle-3dchip.webp", + "sha256": "48f1feb8144953a540ec46e4b12c92bf26fc5a43c1c1c79c9c0484cecdaee143", + "bytes": 21624 + }, + { + "path": "docs/img/circle-footprint.webp", + "sha256": "9ee5290418d7c45f82a00085cfb5846d31dbd5571c414f528030cef7689e71b4", + "bytes": 39430 + }, + { + "path": "docs/img/circle-library.webp", + "sha256": "6bf11ba1981221ad1463adb13195463ab6827cbf65df2c865d2657c361b74dd2", + "bytes": 34454 + }, + { + "path": "docs/img/circle-project.webp", + "sha256": "f4598e5aa9a5b968393a90ef58aaa2061f8323c1ee5b6c725aedb989b0bb837a", + "bytes": 36700 + }, + { + "path": "docs/img/circle-schematic.webp", + "sha256": "f5c0417ba300f463e0372cef04b1ee9f2f91561ad9e09d467ec081b4f4a43f22", + "bytes": 32176 + }, + { + "path": "docs/img/circle-symbol.webp", + "sha256": "b478a8f2f26e2432e320b48056a72a4d040e8cc9fda9f977b265c830a67fa757", + "bytes": 29776 + }, + { + "path": "docs/img/dock-fusion.png", + "sha256": "a5554421f76c39e3c9a271a95af1f4a623c416381d4c81e2413604b00dd71f5f", + "bytes": 5814 + }, + { + "path": "docs/img/dock-fusion.svg", + "sha256": "365d419a49a6a79f0b88460a067352dd5506d5dbfa1311f3e70d7484103c5cc6", + "bytes": 893 + }, + { + "path": "docs/img/forum/demo-3d-library.jpg", + "sha256": "3da47f2367f4e45e9e1d63106b76f8e09b5ed2af2799fa1b6b473a977fea6066", + "bytes": 96948 + }, + { + "path": "docs/img/forum/demo-library-to-3d-board.jpg", + "sha256": "1c4c0bbcf6b75c17e599a452b51d0dc494c564897736b2fc5bf89ee85e0591f8", + "bytes": 112615 + }, + { + "path": "docs/img/forum/demo-modal-dialogs.jpg", + "sha256": "29ca005e90e33dc5c2cdefe0bce5f5be138961ced082754ac3ab54a50f0a3bf1", + "bytes": 118095 + }, + { + "path": "docs/img/forum/video1-modal.jpg", + "sha256": "c056212e9513e1b56dc25669210243bd824871eb93a0ef0d9bc9157574a20c3b", + "bytes": 87351 + }, + { + "path": "docs/img/forum/video2-board.jpg", + "sha256": "9a6b7f36f817d87ab91dbde59c2bc92fd7b94a28b7bfd8d69599c514b0299078", + "bytes": 84817 + }, + { + "path": "docs/img/forum/video3-3d-library.jpg", + "sha256": "e9741f0e889381482c5d55bec895bab61b70a3d6b4e9ee86f0ccb212f84d38df", + "bytes": 77552 + }, + { + "path": "docs/img/multipart/banner-in-package3d-generator.png", + "sha256": "476c0d05147829f3501b06b584d5643d5844f47b4a2f910f6da31a2b97ce5574", + "bytes": 20778 + }, + { + "path": "docs/img/multipart/end-state-library-open.png", + "sha256": "3609762f4208491e377074c7c003c9e6541b0419a5541a4411795933b9b8e3fd", + "bytes": 194214 + }, + { + "path": "docs/img/multipart/library-three-parts-ganged.png", + "sha256": "c4abc62e7de7aaf907a77a97077adbe6b82b94a5404593cfa5dfad558da8f6d6", + "bytes": 209721 + }, + { + "path": "docs/img/multipart/own-footprint-ch340g.png", + "sha256": "202626cc8345961a913e4be46c05389aa98a75b6cb80ae6ac41742777206c055", + "bytes": 249461 + }, + { + "path": "docs/img/multipart/own-footprint-tps54427ddar.png", + "sha256": "0c8157746dfc6fcc99063eee85e12147e5de486dc8764807211200deb2ccf182", + "bytes": 546032 + }, + { + "path": "docs/img/multipart/quick-actions-live-view.png", + "sha256": "07ef3b69d132eb533f07be85da25ff3efc6c492bf893d81272922479f2e0d0bf", + "bytes": 299376 + }, + { + "path": "docs/img/multipart/quick-actions-multi-pick.png", + "sha256": "eae34d7366beb5e52beb95e792c5d178a8bac4bf4f40c26892a41eaa87fca693", + "bytes": 238784 + }, + { + "path": "docs/img/multipart/wrong-footprint-ch340g.png", + "sha256": "f22656e154ad60b3415ce6b941e88c84752d19e3fdd8bbf63fb12a63ce4898c7", + "bytes": 323509 + }, + { + "path": "docs/img/multipart/wrong-footprint-tps54427ddar.png", + "sha256": "b1efd8d42e41cf298473df19f01323bcd51cea3e021ed85b69e733a8bd33ec68", + "bytes": 549398 + }, + { + "path": "docs/img/prefs-1-open.png", + "sha256": "22830f99884fb16f486d1b4d87add6c53044b7b075d33ef2b043d13a2f37fde1", + "bytes": 252832 + }, + { + "path": "docs/img/prefs-2-general-expanded.png", + "sha256": "fb850d9dc1e6054a015e64b969ff0f3d6ddb4371b2377bd4b7181fa32fb3638a", + "bytes": 280622 + }, + { + "path": "docs/img/prefs-3-api-mcp.png", + "sha256": "a4809a142f3caec505851de00317cd9e1d6c70423b858c10195d00c919148bd9", + "bytes": 258511 + }, + { + "path": "docs/img/step-colorize-after.png", + "sha256": "83b61d34340ae3104c4425ca65e5971363d8239a56807d9af882bb36e08e0d71", + "bytes": 176805 + }, + { + "path": "docs/img/step-colorize-before.png", + "sha256": "1adea907dcc3fd4889680be0f9969d106ef63af2b100ff00c6c51dadbbd92163", + "bytes": 190283 + }, + { + "path": "docs/implementation-roadmap.md", + "sha256": "06cc01416d762d4f885b1b2442d3827169053a702d255e4188c755c6f154acd1", + "bytes": 4702 + }, + { + "path": "docs/integration-2026-10-06.md", + "sha256": "bb8c5a61c24f41d377c8955ef660ad2c7e5dc0730725e100b82aceea40254326", + "bytes": 1880 + }, + { + "path": "docs/mechanical-bom.md", + "sha256": "a5d338b5b30ff0d80bc16e4fe1178b4a2dc9d3bc1d572fe8ff21ac811a9a7b3e", + "bytes": 5100 + }, + { + "path": "docs/mechanical-build-plan.md", + "sha256": "245b29a211f3e981439b12e47f857586e9231f87ae366f736b4ff656021db7b4", + "bytes": 3874 + }, + { + "path": "docs/mechanical-comparison/ACTION-MATRIX.md", + "sha256": "303a5b7f6e6b5e8570e66d82b088d402a06c958c1aa0c136e9f2f512a1b66153", + "bytes": 41054 + }, + { + "path": "docs/mechanical-comparison/CHECKPOINT-STATUS.md", + "sha256": "dddfa0e5ff6645458c6839e09cc5f965d32f60d4bb10b4cd8aa8280ae0fc8b3a", + "bytes": 4350 + }, + { + "path": "docs/mechanical-comparison/FEATURE-MATRIX.md", + "sha256": "3e63d5bbaf642167c9f1e8ccbe61e9598e95f12e99ba8b85af0496a8be46196e", + "bytes": 259391 + }, + { + "path": "docs/mechanical-comparison/PROTOCOL-MATRIX.md", + "sha256": "f01e441d619f60d2dbba0d0778b537ec23ff22666b434a500f5856dda377546d", + "bytes": 14724 + }, + { + "path": "docs/mechanical-comparison/README.md", + "sha256": "a6216e434d7a519544a248bf8c9eae3c111c448294c3406ff87ea234e53a14b1", + "bytes": 3272 + }, + { + "path": "docs/mechanical-comparison/REMAINING-GAPS.md", + "sha256": "568b919d014be5c31f5dec0b5b158e52daf2278b675cd283c87acff8effaf5a5", + "bytes": 3061 + }, + { + "path": "docs/mechanical-comparison/action-features.csv", + "sha256": "80e420870fafd1ca046993dc50700eb90f6b1db75bf83773dd09da524189775c", + "bytes": 38932 + }, + { + "path": "docs/mechanical-comparison/action-features.json", + "sha256": "0329a873db61bd972ec8490b7c5822e66884e7a7e38cb8714c731959b4a09836", + "bytes": 125318 + }, + { + "path": "docs/mechanical-comparison/additional-completeness.json", + "sha256": "6dd48ca1e594958601c26c24aa4db91261abaf91338bc8a3f19fac1c7cffa81d", + "bytes": 2673 + }, + { + "path": "docs/mechanical-comparison/additional-source-review.md", + "sha256": "0f01c2246774d60aa50562b2c500249d5ccbfddac4d5051731cbb3193b2ad492", + "bytes": 7089 + }, + { + "path": "docs/mechanical-comparison/autodesk-compute.md", + "sha256": "7f83db6b03ba423259802f9d51544f03339400e56c21ba84ba2054923a4f4cb9", + "bytes": 3343 + }, + { + "path": "docs/mechanical-comparison/autodesk-desktop-2026-10-05/README.md", + "sha256": "6fbef54058610f7d85d02679fb9bf091a2dca68dcda8a76b884785352ff7a86c", + "bytes": 2556 + }, + { + "path": "docs/mechanical-comparison/autodesk-desktop-2026-10-05/manifest.json", + "sha256": "432fb61bcfe3551173e3362a7eb8eefbe87196b8ac98a26852be9bab857c343a", + "bytes": 610 + }, + { + "path": "docs/mechanical-comparison/autodesk-desktop-2026-10-05/selectors.csv", + "sha256": "5a982d4155fb7045eab4e742e5bf93d0dd2a62ecd3aafe871be6de612e2a0cf0", + "bytes": 14953 + }, + { + "path": "docs/mechanical-comparison/autodesk-desktop-2026-10-05/tools.json", + "sha256": "ffe3cf237f8dc3fa150591b17380bfe57978b667b002358bff057485faa9d8d8", + "bytes": 45621 + }, + { + "path": "docs/mechanical-comparison/autodesk-desktop-tools.json", + "sha256": "696192aa40253a66056e10cb5eda3302475baafde3f0689b8261eb1cb135dd5e", + "bytes": 46552 + }, + { + "path": "docs/mechanical-comparison/external-features.csv", + "sha256": "683856bf54d35016ba1eda9d47c621fe126ea042fd332eaa1a5baa7c3b52d6ac", + "bytes": 293043 + }, + { + "path": "docs/mechanical-comparison/external-features.json", + "sha256": "45f9cf0f92b7ac88a2ca3269328bc89e079d2ec23aa37a127661999c1fc38686", + "bytes": 1223540 + }, + { + "path": "docs/mechanical-comparison/external-source-caveats.md", + "sha256": "0907170d4c7f39fc56362054c55cc14b118e00136501f39262f36bbe6858c9c5", + "bytes": 10278 + }, + { + "path": "docs/mechanical-comparison/licenses/FusionMCPSample-LICENSE.txt", + "sha256": "edee7b97964cc8c5c10899c38b9a95884aafecbed5f18faecdeb281aa1fd0a93", + "bytes": 1076 + }, + { + "path": "docs/mechanical-comparison/licenses/Justus-LICENSE.txt", + "sha256": "49321fdec2af0c725df6246f060c48a536fc2a07fb78b3d2dd4eb9b2c3db4e44", + "bytes": 1073 + }, + { + "path": "docs/mechanical-comparison/licenses/Poyraxx-LICENSE.txt", + "sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "bytes": 35149 + }, + { + "path": "docs/mechanical-comparison/licenses/artapo-LICENSE.txt", + "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "bytes": 11358 + }, + { + "path": "docs/mechanical-comparison/licenses/artapo-NOTICE.txt", + "sha256": "4592fbf8e841dcc08013abc8369a9baa3410c97a42dd8702128156288da875f0", + "bytes": 234 + }, + { + "path": "docs/mechanical-comparison/licenses/f360mcp-LICENSE.txt", + "sha256": "3bed3331b7048bac17cf50e249d560ccc9508c970da8d7b9283bf4f2e633a91d", + "bytes": 1055 + }, + { + "path": "docs/mechanical-comparison/licenses/faust-LICENSE.txt", + "sha256": "fa5a11621d70cca71b90f8b3059c3e300960e8bf001a49d92342604923663135", + "bytes": 1076 + }, + { + "path": "docs/mechanical-comparison/licenses/frankhommers-LICENSE.txt", + "sha256": "22ce38518cd74aca237c9fc51befae738f5ddbe69012549d8e501a6118d75bb7", + "bytes": 1083 + }, + { + "path": "docs/mechanical-comparison/licenses/fusion-cam-mcp-LICENSE.txt", + "sha256": "a2fb435161a80983700969eced80f7ce3fc794066d730fa26d7cd2bf493c5461", + "bytes": 1061 + }, + { + "path": "docs/mechanical-comparison/licenses/mcp-fusion360-LICENSE.txt", + "sha256": "c2bd8b0d7c345adb249b5f4ca71f5e3dfd0dd6ff25c1ad93fd871653627595b4", + "bytes": 1071 + }, + { + "path": "docs/mechanical-comparison/licenses/ncmlabs-LICENSE.txt", + "sha256": "6ad80417d1ece7b86229d7b7e5992b02a9ecc73e1c3d56b9f922a092cc232ee2", + "bytes": 1070 + }, + { + "path": "docs/mechanical-comparison/licenses/prim-LICENSE.txt", + "sha256": "996e64892afa962c10bb867a4b8b0a679bf6e397591e8db1d4a5b011f1577963", + "bytes": 1068 + }, + { + "path": "docs/mechanical-comparison/licenses/ulfandpete-LICENSE.txt", + "sha256": "0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0", + "bytes": 34523 + }, + { + "path": "docs/mechanical-comparison/licenses/zkbkb-LICENSE.txt", + "sha256": "3711f963c05d0be80d53e5923308a6dee31b203da23435c9cfb7c7b6e4dd5e19", + "bytes": 19346 + }, + { + "path": "docs/mechanical-comparison/mcmaster-and-bom.md", + "sha256": "d17642995bfa0f31bd3859ab7a049ebf1e5ac0cd902ed2e22a7b685ed4f1b74e", + "bytes": 3848 + }, + { + "path": "docs/mechanical-comparison/official-features.json", + "sha256": "bc8af5fa4a462bab66843198fa3d67bc0a8ade6b5a4b7330be66160e59b31648", + "bytes": 27378 + }, + { + "path": "docs/mechanical-comparison/protocol-features.json", + "sha256": "13c97250cb7fd24af1db3ed2c74e4523397df2884565977600bed5af35d2fec8", + "bytes": 43166 + }, + { + "path": "docs/mechanical-comparison/solidworks-catalog.json", + "sha256": "6da78739c797b7c2351a2ef976430e6b19e4b409a5427090df1e81f1e313d6e8", + "bytes": 12441 + }, + { + "path": "docs/mechanical-comparison/solidworks-parity.md", + "sha256": "aa458ee93223b37d370b35f881ca8344c51f66b8e29329fd772eb42c7d86d43e", + "bytes": 4421 + }, + { + "path": "docs/mechanical-verification/CAPTURE-POLICY.md", + "sha256": "077b4c90afbd34ce7bd382a65c292ba2108d52257c09c6e55ea1c74743db4ae0", + "bytes": 1253 + }, + { + "path": "docs/mechanical-verification/CP1-VERIFICATION.md", + "sha256": "000e3ffb59dd8011e536328d73cd8925848f051484bc748bba9923b79ea982c7", + "bytes": 5813 + }, + { + "path": "docs/mechanical-verification/CP2-VERIFICATION.md", + "sha256": "405601852b5cdab3a990409205d5235cc605ce4c4edc4ab1e4dafd196cc928ae", + "bytes": 6827 + }, + { + "path": "docs/mechanical-verification/CP3-LIVE-FINDINGS.md", + "sha256": "8f9a4cc47a0a2d041c0b0cb2cceb965a1052c0f6b5e24dba995faf32de118b0e", + "bytes": 11575 + }, + { + "path": "docs/mechanical-verification/CP3-SOURCE-REVIEW.md", + "sha256": "1437dccae0a0a7a4a586db6b6ef97a01f4712258c5a62c6393471477fe8b56d9", + "bytes": 16534 + }, + { + "path": "docs/mechanical-verification/CP3-VERIFICATION.md", + "sha256": "6300ed57aef8da48a115f8475969b6975d9b948004aa53988b667504ae9a42dd", + "bytes": 10903 + }, + { + "path": "docs/mechanical-verification/CP4-ADVERSARY.md", + "sha256": "8c399a41ebf4498ab39668060ce9bb356423d7954b119db7b0f2480e43b7e023", + "bytes": 11171 + }, + { + "path": "docs/mechanical-verification/CP5-ACCEPTANCE.md", + "sha256": "82f8d50c8e0747693383746ca366bb1da93de14e19fdd135637713a3a946f798", + "bytes": 5391 + }, + { + "path": "docs/mechanical-verification/CP5-RUNNER-REVIEW.md", + "sha256": "5edbde414eb14789aec0f893c4fba172538ba33cdf376677dedb0c7bd5bf8531", + "bytes": 5628 + }, + { + "path": "docs/mechanical-verification/CP5-SOURCE-REVIEW.md", + "sha256": "2ebca82ca85662cc5bf7c9b6e4b35c4b87365a5793f3abc8cf5d7254cbfce0a5", + "bytes": 9281 + }, + { + "path": "docs/mechanical-verification/CP6-ACCEPTANCE.md", + "sha256": "5f8a872857077e7cacfdbbc8437ab88972e7cccb1306caf5a09f7211422f4638", + "bytes": 7060 + }, + { + "path": "docs/mechanical-verification/CP6-EVIDENCE-REVIEW.md", + "sha256": "5fc65501a885e673f2f1188af805d6686e34da2810c5788dd7a62ceb49076a1e", + "bytes": 5045 + }, + { + "path": "docs/mechanical-verification/CP6-RECOVERY-REVIEW.md", + "sha256": "46ef4e0466c9c04abfb7d40f3f950c928b07abdbb03d2399dc414ed19542d3da", + "bytes": 1438 + }, + { + "path": "docs/mechanical-verification/CP6-SOURCE-REVIEW.md", + "sha256": "9d431ca1dd7e8f3992b9634d04a4a253be12cdc19c900516065de99857809021", + "bytes": 9206 + }, + { + "path": "docs/mechanical-verification/CP7-ACCEPTANCE.md", + "sha256": "d5bb992ae2c2311edb84a80a68b837c55e192100070a37f961b68878b4d51ba9", + "bytes": 3315 + }, + { + "path": "docs/mechanical-verification/cp3-artifact-hashes.json", + "sha256": "3cbfd8b85dba6f41ae6aaabc9f97e21547c3e9adb318a09f88f8021804c873f1", + "bytes": 4639 + }, + { + "path": "docs/mechanical-verification/cp3-final-accounting.json", + "sha256": "9871f99f47c76296d618cb5faa1d88d6a56aadbf3a692cab85bc9ef82ffdb435", + "bytes": 3693 + }, + { + "path": "docs/mechanical-verification/cp3-final-adjudicated-summary.json", + "sha256": "b2c04636d8fe16f55464adef7917d117357320230ad3b615031b187b315d7f4f", + "bytes": 662675 + }, + { + "path": "docs/mechanical-verification/cp4-assembly.png", + "sha256": "2239949ef5b91fc362fd746ee2e8a81e235d7dc33a48e587501c561a2aee8e01", + "bytes": 13874 + }, + { + "path": "docs/mechanical-verification/cp4-bracket.png", + "sha256": "9f6189f217ba40dc6197af7cd16ff4df3df9cdee3bb096769dbc5a2c20d057b8", + "bytes": 28410 + }, + { + "path": "docs/mechanical-verification/cp4-supplier.png", + "sha256": "cd745a1060daef66a92598d16051cfc54c069033eebcce4621eb4592b2445b64", + "bytes": 134026 + }, + { + "path": "docs/mechanical-verification/cp4-verification.json", + "sha256": "de06978097a57fa32f660cc64ca92402072eb654b7a6ce110bacc6eee65e2d14", + "bytes": 311884 + }, + { + "path": "docs/mechanical-verification/cp5-assembly.png", + "sha256": "2239949ef5b91fc362fd746ee2e8a81e235d7dc33a48e587501c561a2aee8e01", + "bytes": 13874 + }, + { + "path": "docs/mechanical-verification/cp5-axes.png", + "sha256": "5d97b9509ebc4362b00de79846458ea413f3b110c84db79630da453e1d59486c", + "bytes": 18027 + }, + { + "path": "docs/mechanical-verification/cp5-axis_context.png", + "sha256": "579ac460b0d601adfedc28670d472aa574437092c350188bc87850142f931a2e", + "bytes": 22080 + }, + { + "path": "docs/mechanical-verification/cp5-bracket.png", + "sha256": "9f6189f217ba40dc6197af7cd16ff4df3df9cdee3bb096769dbc5a2c20d057b8", + "bytes": 28410 + }, + { + "path": "docs/mechanical-verification/cp5-curve_break.png", + "sha256": "5e440c07ad82a7ffe5c4baf1cc49ae28f8ba85a3cb8bd324c5cfb1ce10882884", + "bytes": 41921 + }, + { + "path": "docs/mechanical-verification/cp5-curve_extend.png", + "sha256": "ec33c378f84ea53533d92c4065139e6cf85c5ded6b8a7cb05d1da869a6551612", + "bytes": 30459 + }, + { + "path": "docs/mechanical-verification/cp5-curve_split.png", + "sha256": "9dd2e2f8b14f3853a6fb2f0ffeb5b8f70e32b0b5b76ad51bff368f8ea977d1d8", + "bytes": 30961 + }, + { + "path": "docs/mechanical-verification/cp5-curve_trim.png", + "sha256": "ec33c378f84ea53533d92c4065139e6cf85c5ded6b8a7cb05d1da869a6551612", + "bytes": 30459 + }, + { + "path": "docs/mechanical-verification/cp5-diagnostics.png", + "sha256": "48c3aa84d405edf74dbf8cae691d9f787a2ecf64f1b7e30f3baa7fb2c14979b1", + "bytes": 49349 + }, + { + "path": "docs/mechanical-verification/cp5-measurements.png", + "sha256": "e6e0a50f48ad2697b4134299e278b1f88daf7f3c946d8827c94e7d8cbe88526d", + "bytes": 34865 + }, + { + "path": "docs/mechanical-verification/cp5-offset_chain.png", + "sha256": "c52737f87161824581270161637eb21bec30c3e780bdfe3c0a1e010be7d23da4", + "bytes": 60445 + }, + { + "path": "docs/mechanical-verification/cp5-offset_negative.png", + "sha256": "7acb8927465c61025d438a7c9983e2155f206807a5e7d64b38d59295eeaca983", + "bytes": 54900 + }, + { + "path": "docs/mechanical-verification/cp5-offset_positive.png", + "sha256": "f1760c70d7ac9ada7fd8f2c22d44a7356becbe1b4c3690801cc47c6e495937ab", + "bytes": 55561 + }, + { + "path": "docs/mechanical-verification/cp5-persistence_graph.png", + "sha256": "0899e832fbba1234b76bf36171ef55df7d3b57a6024bc5acc593adbb4ea3e7cf", + "bytes": 48569 + }, + { + "path": "docs/mechanical-verification/cp5-query_contexts.png", + "sha256": "393f1fa36c0179ffe0b0edd46d57994026b36f8839e3128d8b65a5594b4f22c0", + "bytes": 13737 + }, + { + "path": "docs/mechanical-verification/cp5-query_root.png", + "sha256": "10390eaeee8944fa6775779ad5bdc4ecb358944207ab127b32c043a4f86b8eac", + "bytes": 11664 + }, + { + "path": "docs/mechanical-verification/cp5-verification.json", + "sha256": "643cde2e49120554faae627c49233c6c6faf2b89aa8a6c736e7f7309e5528f6d", + "bytes": 21174 + }, + { + "path": "docs/mechanical-verification/cp6-asbuilt-1.png", + "sha256": "533eaebd4a66cbdce89efebd6751a9bbd49e35f90aa53c9d3e25f498a735e371", + "bytes": 12899 + }, + { + "path": "docs/mechanical-verification/cp6-legacy_regressions-1.png", + "sha256": "9f6189f217ba40dc6197af7cd16ff4df3df9cdee3bb096769dbc5a2c20d057b8", + "bytes": 28410 + }, + { + "path": "docs/mechanical-verification/cp6-legacy_regressions-5.png", + "sha256": "2239949ef5b91fc362fd746ee2e8a81e235d7dc33a48e587501c561a2aee8e01", + "bytes": 13874 + }, + { + "path": "docs/mechanical-verification/cp6-link_single-1.png", + "sha256": "8dae95a91ce5fbda84186ab36071cf4351462ff2e4d014046b35103b3f676196", + "bytes": 21638 + }, + { + "path": "docs/mechanical-verification/cp6-links_two-1.png", + "sha256": "154628d0f14c28fae41cd92e970d087199347bd7b40ab4a7defdb119c4d51c26", + "bytes": 38750 + }, + { + "path": "docs/mechanical-verification/cp6-links_two-3.png", + "sha256": "a4901773c3e8d98870834a9030b68a63962f62247fc8b69aba94441c5db8feff", + "bytes": 26438 + }, + { + "path": "docs/mechanical-verification/cp6-nested_context-1.png", + "sha256": "ad55cc056321482bac5d25c0e1b88f58dbd5879d07df15358822b9816ccb23d2", + "bytes": 11339 + }, + { + "path": "docs/mechanical-verification/cp6-origins-1.png", + "sha256": "3ddb025bbf8aff139d01d1ea16748e8718d0a2cc989cc1412543e814aa8c1eb0", + "bytes": 16123 + }, + { + "path": "docs/mechanical-verification/cp6-placement_frames-1.png", + "sha256": "30ac2f313034486f854333c6985fdaa63b017b8fc9cd8cd062c64db22bf1e1ea", + "bytes": 42038 + }, + { + "path": "docs/mechanical-verification/cp6-redefinition-1.png", + "sha256": "13984e5cc243964a81fe2090e7442116755c7aad112e48918f1ce8a841601ea9", + "bytes": 17214 + }, + { + "path": "docs/mechanical-verification/cp6-regular_ball-1.png", + "sha256": "2f0cc21e759615654141dcc00e550bcba991061557f80e239d337b3db13dccce", + "bytes": 19152 + }, + { + "path": "docs/mechanical-verification/cp6-regular_cylindrical-1.png", + "sha256": "0a5d0f1a7acf479243982e01832d156959702430001bc16bccf808889de71bef", + "bytes": 18115 + }, + { + "path": "docs/mechanical-verification/cp6-regular_pin_slot-1.png", + "sha256": "bc4f9aeadb0eb81bccd0440dd698fbf7d68ea3b4f8f6f5bd4e9da22f36f45d6f", + "bytes": 19493 + }, + { + "path": "docs/mechanical-verification/cp6-regular_planar-1.png", + "sha256": "ead37fe7c757ea2a513206a5dcd908f57d45728c819b1b625f6a49d80a36b931", + "bytes": 19605 + }, + { + "path": "docs/mechanical-verification/cp6-regular_revolute-1.png", + "sha256": "4844930d53107c059d0e832aa7471487b00379b8ae1d70f570c979ea58094eb3", + "bytes": 17511 + }, + { + "path": "docs/mechanical-verification/cp6-regular_rigid-1.png", + "sha256": "138f098d003767eb28589e3020ccdb8db06302daf2ed0ae7cdb8842cb9e9dd69", + "bytes": 14636 + }, + { + "path": "docs/mechanical-verification/cp6-regular_slider-1.png", + "sha256": "632173b51ce8fa2edb7db743e70c7878f84a7742ca0023fd546024a338cfbcc0", + "bytes": 17026 + }, + { + "path": "docs/mechanical-verification/cp6-root_attachment-1.png", + "sha256": "71be4a177d7aba7a8466841c86f5b50e02e120def9dd5f6bc02af660914fc9c4", + "bytes": 14641 + }, + { + "path": "docs/mechanical-verification/cp6-verification.json", + "sha256": "782911bb4d366c5d822179c7e3a3e616613843c7fbce5f4e51856df450dc433d", + "bytes": 104619 + }, + { + "path": "docs/mechanical-verification/cp8/accepted-scope.json", + "sha256": "b3b14ac1da72b51ae69d8e9efe9a5285c02c2bbc3544627fe6c50e4bbe3dcc37", + "bytes": 730 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0001-run_script.json", + "sha256": "0e35fb50e74d14479bad059e74ee30ddc3e45ade777c151e905837bdafb77db2", + "bytes": 14199 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0002-fusion_state.json", + "sha256": "922e681f6b61b3ed3c097763d670e302578f95ecf60aedc0fbf983f68c7d54df", + "bytes": 19223 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0003-fusion_document_info.json", + "sha256": "068b5586a96d80deae0428ea615e0a628360686a518038c82803d98f71a22911", + "bytes": 3856 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0004-fusion_run_modeling_script.json", + "sha256": "46cdfc5636e376428d563ef5a05e16a12515b2e71f5a8fada6445c1c936de748", + "bytes": 42052 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0005-fusion_mech_operation_status.json", + "sha256": "2b50f49492ffefeb6af526e051e428a358fb984f970cf46042a51efd3bc75b1a", + "bytes": 13186 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0006-run_script.json", + "sha256": "03754a87a54e8a13a62930b06efb60282429b0bba62ce80f1ef8979cec9091e8", + "bytes": 16987 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0007-fusion_mech_operation_status.json", + "sha256": "b30ded5ca413ac6d2cecb3410c5583557122837b5bfc699e36607cf8a6e88a11", + "bytes": 13186 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0008-run_script.json", + "sha256": "90f59b07f08125d2328650a7135f8c2f356d7a663cbf4b27a066daa4d4454f32", + "bytes": 14190 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0009-run_script.json", + "sha256": "05affe3928c349b05ac87947f481edb5deeb242a4a32f329ca882daebd70e5dc", + "bytes": 19764 + }, + { + "path": "docs/mechanical-verification/cp8/busy/calls/0010-fusion_mech_operation_status.json", + "sha256": "caefca09159db03013b9d8c0ca732302a8e042fd81b86124a92e97db44d8e762", + "bytes": 13187 + }, + { + "path": "docs/mechanical-verification/cp8/busy/hold-calls/0001-fusion_run_modeling_script.json", + "sha256": "d8fee2b8c8a52ef00d93d792330d412ddfe48412bd4b60957e4d2a80932570b0", + "bytes": 54340 + }, + { + "path": "docs/mechanical-verification/cp8/busy/host-clock.ps1", + "sha256": "e09cde21d3cba0e82619b5cabfe8de57b5442d0af09961d7df6aa1c9ceb41175", + "bytes": 4522 + }, + { + "path": "docs/mechanical-verification/cp8/busy/host-entered.ps1", + "sha256": "039b213152932c3ede3a8d3966236d4e123777a0eed9bf55eb6cfeb3b0692b3b", + "bytes": 4526 + }, + { + "path": "docs/mechanical-verification/cp8/busy/host-final.ps1", + "sha256": "ef8f4f3590937d9d5f36b24012e4a272a065b5f84962a13d76dcc0b37cb2d263", + "bytes": 4522 + }, + { + "path": "docs/mechanical-verification/cp8/busy/host-initial.ps1", + "sha256": "72848a3535468d5ebc13bbf297c66583848aba2042b259af60c6f988e5848c04", + "bytes": 4526 + }, + { + "path": "docs/mechanical-verification/cp8/busy/native-hold.py", + "sha256": "d89d2ed848a4a7fd177a34b668c143b20dcecfef8035c5906fb940711e6223b6", + "bytes": 20806 + }, + { + "path": "docs/mechanical-verification/cp8/busy/native-preflight.py", + "sha256": "9f03fd6368a4ac53d6ab08684ee579477c3d567fa0673f50bc374d8a8d0a2031", + "bytes": 18507 + }, + { + "path": "docs/mechanical-verification/cp8/busy/qualified-offline/manifest.json", + "sha256": "d203f1f147dc7fa9b2537252ea940847e6d1698b00b8d4a3e457e013d51f030f", + "bytes": 383 + }, + { + "path": "docs/mechanical-verification/cp8/busy/qualified-offline/native-r1-qualified.json", + "sha256": "fd246882874ef2504e9163af9565f6b299c05ff47adbfdb4e526b52ebf05c9a1", + "bytes": 2245 + }, + { + "path": "docs/mechanical-verification/cp8/busy/qualified-offline/qualify-native-r1.py", + "sha256": "e691a3c07dbcad909bfa77090e64c3a9bbca2a9ceac50296f7dfb601708735a9", + "bytes": 4896 + }, + { + "path": "docs/mechanical-verification/cp8/busy/report.json", + "sha256": "35929e964fd86886da8f08288f908deecd01934319bd015b11e5ef6b3ef55f71", + "bytes": 35566 + }, + { + "path": "docs/mechanical-verification/cp8/busy-maintained-qualification.json", + "sha256": "d645a9024ff9ecb26f7cbe034a4605941edf75cc50d09b97fa6a4e60fac9e9ac", + "bytes": 5912 + }, + { + "path": "docs/mechanical-verification/cp8/evidence-manifest.json", + "sha256": "0078d558e794967ac0289e45a9a2d7427025e08cb3290f3b5989be3012769249", + "bytes": 25854 + }, + { + "path": "docs/mechanical-verification/cp8/history-snapshot.json", + "sha256": "70001c98dde53eb617e91dfc0c297970f49245b6762c0c37f392764b7f7254a4", + "bytes": 30571 + }, + { + "path": "docs/mechanical-verification/cp8/installed-file-verification.json", + "sha256": "224ac9eb143e0128f9c8d7773944d7bd5049803ef48ac1dc4f86383e965ae3e1", + "bytes": 72807 + }, + { + "path": "docs/mechanical-verification/cp8/installed-package.json", + "sha256": "51d19311ee8b055a82cf905921769b53c1d9917d771974a7e1bdf69c6cea54d9", + "bytes": 195 + }, + { + "path": "docs/mechanical-verification/cp8/native-build-reuse.json", + "sha256": "967f8d5a8378b30ea61af6a993a2caeeacfbdb2c6308de68b113851f9ae46c35", + "bytes": 16934 + }, + { + "path": "docs/mechanical-verification/cp8/offline-accepted-summary.json", + "sha256": "d3ffbbb057c06dc6eaa4ac28f91931cd9c946d45606151c3418df00a666613bd", + "bytes": 1827 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/baseline.json", + "sha256": "974331825de34d4a180874b2b252c7663b3ef322fbd7349feb72dbdabf2bdacf", + "bytes": 12378 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0001-fusion_state.json", + "sha256": "44425639191232b8b2a63e1af898faa8d82bf33973713f0b47eb39a2ebbe088b", + "bytes": 19185 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0002-fusion_addin_status.json", + "sha256": "42d61c4bec8839ecf1924591b782506c864fdfea3f4e0d81f7380b0717c9ce78", + "bytes": 2086 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0003-bridge_list.json", + "sha256": "96dfc6908ab0f72d3e992f6ba9f5c33737d63822667359be706051ca7328d918", + "bytes": 106327 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0004-run_script.json", + "sha256": "3d7f538ca8916516950eb6f9822e82318f65f34b8b967763b06690101f9949a3", + "bytes": 10962 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0005-fusion_document_info.json", + "sha256": "b90d7a2bf439a10f36dc64197cb42f3a8ac022fe094a629d2d18122cdb085db8", + "bytes": 3848 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0006-fusion_run_modeling_script.json", + "sha256": "cd33184b1d91bcb6e96a7347d91513b3e68b6f9268986dce0a3c1adfa56d2d62", + "bytes": 5494 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0007-fusion_get_preferences.json", + "sha256": "90dca8cff96f32367bed6bd5060c55f2a677afcaab34c378867af1f7cfa46cb5", + "bytes": 4741 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0008-fusion_mech_capabilities.json", + "sha256": "1e21edd0b65ff2670adee34611ca3b9ad55ec4828bb1bd4c12878b64df58ad3f", + "bytes": 628321 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0009-fusion_run_modeling_script.json", + "sha256": "040db501b5152e6408a4b0034ea9cfe3ec837a5130b5aba84548ea4924648362", + "bytes": 35563 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0010-fusion_mech_capabilities.json", + "sha256": "7222f66113981f8a24a5d8b39130bd5e90db257fdfb0e1c30705926322f174fa", + "bytes": 628322 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0011-fusion_mechanical.json", + "sha256": "9a9c58c6e8a1116c3d3c9989d203a8448a2ca4c7fdf3aac0b4502a6a008fc1d8", + "bytes": 12250 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0012-fusion_run_modeling_script.json", + "sha256": "909ca528ed8e3d90f9973a92eaf378c731da19cff77bc11bddec1398e9e247ad", + "bytes": 36075 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0013-fusion_mechanical.json", + "sha256": "4865b4d2f38a38cb0ed135a0ce33791aa29616d8a57a2a2dcff44343b0ab921a", + "bytes": 27080 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0014-fusion_run_modeling_script.json", + "sha256": "3f76dac627292ea2545ff8c2b3b3e15b5a2765125d40338fb6165f99ee855bc4", + "bytes": 38296 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0015-fusion_mechanical.json", + "sha256": "993671b72adad45ab861f2c507dcfb40471b00096bbc7a785e5b62513a5e31c4", + "bytes": 32629 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0016-fusion_run_modeling_script.json", + "sha256": "902c3b62fbd0475a0b9c156735a400c49b77c537554025dc25e3b08b7bbf53c9", + "bytes": 41585 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0017-fusion_mechanical.json", + "sha256": "4011ca4995e94eb19e260c1b7ef43dd961d711be2202e8b94c4a815ff739cf84", + "bytes": 32629 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0018-fusion_mechanical.json", + "sha256": "86453b264a7cc7906ba2d552c9181609e7666521bb632976ca58e2f21017c01d", + "bytes": 14774 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0019-fusion_run_modeling_script.json", + "sha256": "c49a3c6ba526536a163c4ceca668e7aae137f24365cde76cccefdcae5c72ced9", + "bytes": 39827 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0020-fusion_mech_operation_status.json", + "sha256": "34c13e918359d5f9b87f20617e4b16af2244c9e7c482a486c626feabca36826b", + "bytes": 33597 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0021-fusion_run_modeling_script.json", + "sha256": "8ee6d55f92f7ad9e9a8e08195a3bf1f1c58ff4b65ee08220cad5385d9ce99abb", + "bytes": 39826 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0022-fusion_mechanical.json", + "sha256": "f6aee158aac6249cd9f58dbf7bd822d33b5418a83b2255a5d819b393fda973fc", + "bytes": 27164 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0023-fusion_run_modeling_script.json", + "sha256": "084ee6e0d4e723f84acde89885901e54e3d9aa44ffb51eb1f306c46fd484e920", + "bytes": 39827 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0024-fusion_run_modeling_script.json", + "sha256": "8d088685ae42efd0e128c0ae4605e3764d2f721b25f5999b0063297f51be26d9", + "bytes": 41585 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0025-fusion_mechanical.json", + "sha256": "965cb682a9b896e45c7f17d8c19ac85e447d4eeb54b7d1bbc29a6faa4ea85e98", + "bytes": 6588 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0026-fusion_run_modeling_script.json", + "sha256": "bbd9ea39d2382b37793387e875836e67f55507ce0db8d4f47a7daea57ff5ce47", + "bytes": 39827 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0027-fusion_run_modeling_script.json", + "sha256": "40905ee0ef195aadd24256dbde59d4c5bce2518ae304669278eaeb89acca81e5", + "bytes": 41583 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0028-fusion_mech_operation_status.json", + "sha256": "db50b1d2288ff316e601bada1bc7f9330a2e180c7c3f077241d621bb6cf2cd52", + "bytes": 33596 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0029-fusion_mechanical.json", + "sha256": "beba8ccf2cbf4f13d0e95108448d0b6d31a95a28852d95f250d03a9cc803f2fa", + "bytes": 32628 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0030-fusion_mechanical.json", + "sha256": "204906e280699e19b5cf876aeded8b9e36a804aff5929290e449a1e3a29ef662", + "bytes": 6956 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0031-fusion_mechanical.json", + "sha256": "d2aebabe305f5fc39210bfa69111d4a06dd28847cbfce24369ec2eb957c21d7f", + "bytes": 32629 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0032-fusion_run_modeling_script.json", + "sha256": "ff259dd1db4a048d3f876b485aa8fd845e0440f2ebcde9389ca4d5889a16fefe", + "bytes": 41591 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0033-fusion_mechanical.json", + "sha256": "2c97e3d02747eed1c0899feedc34d46dcf4bbc46f6b1af6f8b046ae3cdbf227b", + "bytes": 32628 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0034-fusion_mechanical.json", + "sha256": "eb9f2afe6f393a7f3e21317098fe354f9e0f30d49341acc18d66a4836d70b1c0", + "bytes": 14782 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0035-fusion_mech_operation_status.json", + "sha256": "31160e2705de614032a9cadc2f6dfc75727b51c9b6282834bbef23f2f2ebca3c", + "bytes": 13179 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0036-fusion_mechanical.json", + "sha256": "697157684ee77a32a53fdda77c046bd6b3ffc3104457864e376b15c06606086e", + "bytes": 7217 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0037-fusion_run_modeling_script.json", + "sha256": "9a840f59d408a7df90b63d0a12c13c0875ea600665fa7aa659bfffda2e7026bb", + "bytes": 41591 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0038-fusion_mech_operation_status.json", + "sha256": "f6e6ea0c0f4da51a4674ff4f352a384fafc54155b313e43a022bb92d654b2c71", + "bytes": 13179 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0039-fusion_mechanical.json", + "sha256": "e74e91429c7f2fd330b623c56830dd290ba250be683ed1868d85c2d443974f1b", + "bytes": 32629 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0040-fusion_mechanical.json", + "sha256": "1243dd429d2d52cd3ab25b108b9fb819630f11d3224bbc33a1f91d2cfc0de969", + "bytes": 9206 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0041-fusion_run_modeling_script.json", + "sha256": "a4ab00d33792849f81ab3121b6ec8d3544cfc71942efc01aacc61ef4baba5904", + "bytes": 41591 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0042-fusion_mech_operation_status.json", + "sha256": "9ca37c9485b401c326e2094eb5a8a261048fc3fa9fb0ea03b1ad6b5ce443cd8d", + "bytes": 13390 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0043-fusion_mechanical.json", + "sha256": "c5141e934e0861caa1e26a76fb80d86100ce312104ab4da96a72cf9ca1ecd259", + "bytes": 9292 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0044-fusion_run_modeling_script.json", + "sha256": "a260ee03f92ce6ffbb8cfffbd33360247f066d6fdf732dee8efcd9b35c078577", + "bytes": 41589 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0045-fusion_mech_operation_status.json", + "sha256": "ff962a0b31d18572cb21a593ff4b5e9773a17b0911473a8574d0ab25443c3137", + "bytes": 13390 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0046-fusion_mechanical.json", + "sha256": "9561c95f4e29bb124a36ddb4f547995aec0642de538d85926051bc379da2e79a", + "bytes": 32629 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0047-fusion_mechanical.json", + "sha256": "b91e8c6065b7600b0dfc1db99c3a3837e1e8e299a796add5ae26023781745128", + "bytes": 32629 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0048-fusion_run_modeling_script.json", + "sha256": "fd71f3516ae0cb0b27c60b263bdd812ff5db24fcd428d945fcffb21b37d940d8", + "bytes": 46579 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0049-fusion_run_modeling_script.json", + "sha256": "7bbee71b9ade88fd5c9332c3e144b30ddccbd2e9bc9677ec257170b7e8c0a628", + "bytes": 88813 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0050-fusion_mechanical.json", + "sha256": "b01dc54b364cc804af5e02c205fa1ca3b08d9ec2bbf6be73fc99da91d12fce03", + "bytes": 7217 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0051-fusion_run_modeling_script.json", + "sha256": "285ca66537d8f3239b940e2165e3e1a56db89ab0553012ea1cfa8dd1b099c148", + "bytes": 50201 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0052-fusion_run_modeling_script.json", + "sha256": "4c92e55bf981e7728b5df5a56415deecce4e1bfdc42d7dea58ea3808d374ac37", + "bytes": 235102 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0053-fusion_run_modeling_script.json", + "sha256": "615780c67c50ee87d49e7c3d904d24bd84df1d034a1434e6d3836b457e775b5a", + "bytes": 38604 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0054-fusion_run_modeling_script.json", + "sha256": "6c15edf45675b5b1e48ee5b989eac90e903fd6cd423067ad6f6e88506045a27f", + "bytes": 37875 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0055-fusion_run_modeling_script.json", + "sha256": "3b138044d4b2f93f0be1e3a90f849e14d3fde9f2816c446d5e8edf70f60ab361", + "bytes": 35709 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0056-fusion_run_modeling_script.json", + "sha256": "eeb284939d8f010ebaee5d7c3a39d56f79a3f9cd7e7bd4d7becb382635c24194", + "bytes": 37437 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0057-fusion_run_modeling_script.json", + "sha256": "9c88ab86c58ade6c6dcf7872110cd6ddf3b5af140113b926c18e78f3fc9545ea", + "bytes": 35178 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0058-fusion_run_modeling_script.json", + "sha256": "1f43e5ef17d6443425c2d491f163564445f9aee6bcbd8ab0ce290546d5fdf954", + "bytes": 35034 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0059-fusion_run_modeling_script.json", + "sha256": "969ec84546ef913532e7c04cccb3204166efc8edb29953e3ea9b3e98d7b7127e", + "bytes": 35177 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0060-fusion_run_modeling_script.json", + "sha256": "f00de391eea2f8667d57aca179da1e5a8d568c37ac33381c2892d655ca3244a7", + "bytes": 35032 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0061-fusion_run_modeling_script.json", + "sha256": "31a3b76c3da53a5230a0a612ee1f577dcb45a3cfac91c393b1e1a7b43a2339e3", + "bytes": 35151 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0062-fusion_get_preferences.json", + "sha256": "5281e5a1bdfda2767265af896850bf9bacca6273e4da5b5e6e57770be7724758", + "bytes": 4741 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0063-fusion_state.json", + "sha256": "d8bb84064d2c747ef2b27976620977833d14ef9930b88f87f5897411cc0c222f", + "bytes": 19213 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0064-fusion_addin_status.json", + "sha256": "63b5f2240b57655e2015ef4a1c7795aa26989dace368861a93438517c8e609c5", + "bytes": 2086 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0065-bridge_list.json", + "sha256": "ff21752a8a133846619d979df4db5e17a79f87fc94275f227fe64bb8fa89b6da", + "bytes": 106330 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/calls/0066-run_script.json", + "sha256": "7f4a6a3cff40e22b4b2131b26e53f31047b1310438e8aa1519be7339bf151ef3", + "bytes": 10963 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2", + "bytes": 28903 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f", + "bytes": 17361 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "bytes": 39936 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "bytes": 25311 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/live-runtime-identity.json", + "sha256": "df509d6f54d2b30846176c1b81a97c5090b4dd491427d326f1001f62089cc056", + "bytes": 1656 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/ownership.json", + "sha256": "ba38aa455941a5a6ddfdef1cfa51393388ce078a0ca6dab7d5458dfdf9ab4efa", + "bytes": 4207 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/report.json", + "sha256": "06ec3a9875fb3a88e947d1a18c1292ae84e71a9ebe80098a2797ddc5abc4b573", + "bytes": 115507 + }, + { + "path": "docs/mechanical-verification/cp8/ordinary/visual-annotations.json", + "sha256": "6e7559b3d56828fd1785fe406917561b9995ab68101bf355966006da30da98fd", + "bytes": 399 + }, + { + "path": "docs/mechanical-verification/cp8/restart/after-native.py", + "sha256": "8c6216acb59cf7918fe1f34c4ee20fa096445810abe22c98c0522116923b277b", + "bytes": 871 + }, + { + "path": "docs/mechanical-verification/cp8/restart/before-native.py", + "sha256": "8ae7d8635c332b0efc8ea6e2c4069a35f1423cf2e58c8831ae3e1ce92ec3cdb5", + "bytes": 1968 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0001-run_script.json", + "sha256": "03ccf36337bcd0235d527a0d49cc467f3ddfa95f66a878cbd995f8ec25ed1176", + "bytes": 2776 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0002-bridge_list.json", + "sha256": "15e06b594b0913d91c0a4c1461d213c66f7a46e4f7812955b72b50f317efa714", + "bytes": 106327 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0003-fusion_get_preferences.json", + "sha256": "d53ab9e5535800a7f283e0b1b78b54e2897c00d549a1f60e35bdc1fc06f4cffd", + "bytes": 4740 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0004-fusion_mcp_call.json", + "sha256": "076248950fa8f1c16e4a7ebe487a70e9ffea2caa815de1f1f5ff700161c0c2b4", + "bytes": 10433 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0005-run_script.json", + "sha256": "843abdf71c1e5eb398f97bad8c028ed899c236ebd08cfa0b2d6ba2b7753b1549", + "bytes": 7060 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0006-launch_process.json", + "sha256": "bf11352738684c0637dd0bbe3a206d6aa8ed9ca5fec35216d7a90644b018ee15", + "bytes": 2061 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0007-run_script.json", + "sha256": "c3174bc2e57dabddbef7819029161284e655e42d2c9749b94d8c40d19e4684c9", + "bytes": 3674 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0008-run_script.json", + "sha256": "f5346ef3d0906879f358f998ebb2af04873313e2d6b394af3f43ea58f00e88c5", + "bytes": 3676 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0009-run_script.json", + "sha256": "0c70024b79f8d615d252d07c0ae58f06378987a8ac6538262ea04763707968e1", + "bytes": 3676 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0010-run_script.json", + "sha256": "97860c7dfd1bf054bfd96522fddc1191640a71806ebe629f7d9b5145c129842b", + "bytes": 3394 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0011-run_script.json", + "sha256": "85649397bcf203a2f35886f0f9712fd454d5d9c6bb00fb26a8b9ea6b414e6a2e", + "bytes": 2776 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0012-fusion_mech_capabilities.json", + "sha256": "b885e24cd0b17393e5dd7655b21b64ffb79da543374cdf787ae87340cad23e7c", + "bytes": 628320 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0013-fusion_mech_operation_status.json", + "sha256": "a42eff9e869f5e4035c391b19d5a830f9d656fb9cb9817e2f15aa609d3149130", + "bytes": 33590 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0014-fusion_mech_operation_status.json", + "sha256": "35f322799b3365b3195d02f372bde4c6b0d64f06d6752235f92017bccae5a684", + "bytes": 13171 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0015-fusion_mech_operation_status.json", + "sha256": "cc1835b321952ced900838792fc725ad67a153431ccf6354950b28dd4a71254c", + "bytes": 13384 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0016-bridge_list.json", + "sha256": "99f565883a298e4351664f60b0713c6b242667a6c453d27f8d45745af36ba554", + "bytes": 106327 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0017-fusion_get_preferences.json", + "sha256": "cb748adfa397de17b1243a57fe5c635f4bc088a45c4c899b83a62d951fe62bd5", + "bytes": 4741 + }, + { + "path": "docs/mechanical-verification/cp8/restart/calls/0018-fusion_mcp_call.json", + "sha256": "85bd50a6589f11b6ffaf0eeb6b6ed606a1fc187efbdc848f2b9a2af42290a736", + "bytes": 8316 + }, + { + "path": "docs/mechanical-verification/cp8/restart/close-exact-process.ps1", + "sha256": "81604bee1f1ba2fa944e340e2dbae7b3c40150def6bc6cee48e85aaf41dd745d", + "bytes": 1931 + }, + { + "path": "docs/mechanical-verification/cp8/restart/qualified-postcheck/calls/0001-fusion_mcp_call.json", + "sha256": "2b7e2114e6de6af476a1b25e90053fa53980fe7068892e90a92a20cff4f33763", + "bytes": 7786 + }, + { + "path": "docs/mechanical-verification/cp8/restart/qualified-postcheck/calls/0002-fusion_mech_capabilities.json", + "sha256": "90265e4873fad2c30edda9d3c815e7b725b9b342ce02ea277e09345b34548f48", + "bytes": 628292 + }, + { + "path": "docs/mechanical-verification/cp8/restart/qualified-postcheck/historical-acceptance.json", + "sha256": "9a0c989c4f8e74bfd889f4195dda762cc6c3ce46abb10e2035ad0ae3833c9bd2", + "bytes": 1599 + }, + { + "path": "docs/mechanical-verification/cp8/restart/qualified-postcheck/native.py", + "sha256": "11718d0ef137e8f8d2ffa1497665d3caa5f881444db34b05252ffff045b716b8", + "bytes": 1025 + }, + { + "path": "docs/mechanical-verification/cp8/restart/qualified-postcheck/result.json", + "sha256": "0f22946feda5f79f31e4d60ff710300a419f8a53a59818c53b3fad05fa70d3b2", + "bytes": 2999 + }, + { + "path": "docs/mechanical-verification/cp8/restart/report.json", + "sha256": "3a4c31643bb11226b7cf4f2b5bef1e193f20a5cdc84f4d82e964da2bffcd2244", + "bytes": 6161 + }, + { + "path": "docs/mechanical-verification/cp8/restart-independent-qualification.json", + "sha256": "dc1e3fba4a65cc32aec5fa00b2d5626274a58ff4d4a38794dfe7949f4a8954d4", + "bytes": 2641 + }, + { + "path": "docs/mechanical-verification/cp8/restart-preflight-original/before-native.py", + "sha256": "9f03fd6368a4ac53d6ab08684ee579477c3d567fa0673f50bc374d8a8d0a2031", + "bytes": 18507 + }, + { + "path": "docs/mechanical-verification/cp8/restart-preflight-original/calls/0001-run_script.json", + "sha256": "1113e34094ee352f581081cb4b5410eb8ffb1df62cdd29a91f5228fec9d1068a", + "bytes": 2776 + }, + { + "path": "docs/mechanical-verification/cp8/restart-preflight-original/calls/0002-bridge_list.json", + "sha256": "048475712fe7c9e1fdbf00cbdd5c729b65185e593a73e019c50f56e477e7d315", + "bytes": 106328 + }, + { + "path": "docs/mechanical-verification/cp8/restart-preflight-original/calls/0003-fusion_get_preferences.json", + "sha256": "becb783c6326469ab7091f0693882e8b6a32da299fe9549004300eed951b8cb6", + "bytes": 4739 + }, + { + "path": "docs/mechanical-verification/cp8/restart-preflight-original/calls/0004-fusion_mcp_call.json", + "sha256": "bbe7e0ae67de08c24b5a9e2c01c10b654d419a43a0593ae4bf39bb2cf654fd00", + "bytes": 50080 + }, + { + "path": "docs/mechanical-verification/cp8/restart-preflight-original/report.json", + "sha256": "bba779fdedcb32dc7ec2e627eeb7377b584d7967a27272443abe40e5fb04a167", + "bytes": 1062 + }, + { + "path": "docs/mechanical-verification/cp8/runtime-source-manifest.json", + "sha256": "614e00b08991efae6a12eab2335360d42348d47293d8ccf4edcbc3f5ebbaeb0d", + "bytes": 164348 + }, + { + "path": "docs/mechanical-verification/cp8/stale-session/calls/0001-fusion_mechanical.json", + "sha256": "7932d4f0346e734dd6864b5697a171f686ab88bd8f61b0daa0cb9774c101b18b", + "bytes": 12222 + }, + { + "path": "docs/mechanical-verification/cp8/stale-session/calls/0002-fusion_mech_operation_status.json", + "sha256": "92c6e86855603620b77f900723a28d6cada6354050bcd0629c2eb832a16073c4", + "bytes": 13146 + }, + { + "path": "docs/mechanical-verification/cp8/stale-session/calls/0003-fusion_mechanical.json", + "sha256": "482936f88c467a99da7ad28996db59a132c4087ef7b93ce5bed6a1c0c92b0ee8", + "bytes": 5423 + }, + { + "path": "docs/mechanical-verification/cp8/stale-session/calls/0004-fusion_mechanical.json", + "sha256": "db619ad1e93c4cb095d5eed2a6b845e0ae873aecc2e8a99261524b723805f665", + "bytes": 12223 + }, + { + "path": "docs/mechanical-verification/cp8/stale-session/calls/0005-fusion_mech_operation_status.json", + "sha256": "a8ffcaaea0d03f1d2e2815dea6deb0f1c7d9efb99bd5edf8a0c629e8c57f275f", + "bytes": 13148 + }, + { + "path": "docs/mechanical-verification/cp8/stale-session/report.json", + "sha256": "7289b89aae8ec86dda153dd1189ecf8168eee03ad7e6b0ad4e7ad156634fe52a", + "bytes": 2395 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/accepted-diagnostic.json", + "sha256": "cf09823dad1bd1a1cbaf61b436b6fd9d5a1e77d08059386f4dc412575b5d3275", + "bytes": 4938 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/baseline.json", + "sha256": "bc9aa832de32e98835d73a1d06ec6ff498ef313cb6f271208a218536b841c441", + "bytes": 12391 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0001-fusion_state.json", + "sha256": "986a1a6481f001aa35c12eea319a61851f575a0962427b2d122ece0922c45fc6", + "bytes": 19212 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0002-fusion_addin_status.json", + "sha256": "f8fb2a02caec14107c0a52cd80a09b835af0d08afb02407371ebebd30aab4a73", + "bytes": 2085 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0003-bridge_list.json", + "sha256": "c0f4fe3351484f3019da1675994bdd69acdd4dc239a2783275306a4a36f9c2c5", + "bytes": 106328 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0004-run_script.json", + "sha256": "647ac42a6870ab2f5e0b6a95755023c231b92a2e88c939e878af401bc4a99246", + "bytes": 10962 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0005-fusion_document_info.json", + "sha256": "a1c06753d923b5660c09e2b11bdc9a27bdc2907fe24c2fa6e9121643862f31bb", + "bytes": 3848 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0006-fusion_run_modeling_script.json", + "sha256": "c2d3cb731b79c3d32b6c61087caa58aeaff62ae3acfe679ebf04ab58b711ee64", + "bytes": 5495 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0007-fusion_get_preferences.json", + "sha256": "084e842d85eaed160c19a99d78744cf5a8bf5194e2eca17e736625bab6a848b4", + "bytes": 4736 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0008-fusion_mech_capabilities.json", + "sha256": "9593b14e0040dc6242bd767a425eec7fa9833bbc039fc2e00d9ad93b6c7e51fa", + "bytes": 628323 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0009-fusion_run_modeling_script.json", + "sha256": "4317007b59f8cc1462b4cb8f035073e8b1f728943207abb24bb1cb7a13cd3b80", + "bytes": 35563 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0010-fusion_mechanical.json", + "sha256": "40c4ab6b513feac3f87ea463a92821250297f4dc1ce11ba88effc3c54a7175da", + "bytes": 27067 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0011-fusion_run_modeling_script.json", + "sha256": "8cc51b7aac6a282b7bd0c5a6fb8f42e119168ac2d732096562a44e5a69eaac7d", + "bytes": 38327 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0012-fusion_mechanical.json", + "sha256": "cb3ed4d83ca00018a73f967cfc22f29c003fb3d13afd06258ed10a436b404c60", + "bytes": 32579 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0013-fusion_run_modeling_script.json", + "sha256": "0134a008d61ee5abb705835383cdc21742d1dc3bf0bd445c12bf76962d12ffb9", + "bytes": 41585 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0014-fusion_mechanical.json", + "sha256": "ba7935dde2e8d04990a9076a039d13af57668d9fe540585232d8e1eb07c0a3ca", + "bytes": 32581 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0015-fusion_mechanical.json", + "sha256": "46ee93c413687e218125de5a7fc1166ca6b54d9ad0b90c15e12c7fa02d2668b0", + "bytes": 14772 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0016-fusion_run_modeling_script.json", + "sha256": "e364337ed8692dadc7fdc12c8152e4d4ff8b0d27c73910a89bb4f1d5c8296c8a", + "bytes": 41585 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0017-fusion_run_modeling_script.json", + "sha256": "417d1a4acd3ff0305a49d285819dbfe6823da2edee6720d63a9a924f42887230", + "bytes": 77135 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0018-fusion_run_modeling_script.json", + "sha256": "138a1c49d7c860640dca25077e1bdea4a16b26c33104354bb7e30559eaf223fa", + "bytes": 41585 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0019-fusion_mechanical.json", + "sha256": "1840a3fb0c05d68986178b3e0dfc58e1248b65931f044ff0f000dc13e48eb091", + "bytes": 32579 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0020-fusion_mechanical.json", + "sha256": "741044b4067e66ff037f5a69302fdec14a5c069451a3deb23175088b048dc37d", + "bytes": 7264 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0021-fusion_run_modeling_script.json", + "sha256": "f1e523b80668973f376aa37356ca6e3864f16b8daa5d68e7ff6aa2c92ba67e76", + "bytes": 50283 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0022-fusion_run_modeling_script.json", + "sha256": "4d8e59ff8e599918f203d8a3e632cf4373190a211f293a19d0295169313ce8b6", + "bytes": 212254 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0023-fusion_run_modeling_script.json", + "sha256": "1e90e773993d2b8f5f277ed18887b0e3c10303d9c71373c6a1d2edd69607db8f", + "bytes": 38605 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0024-fusion_run_modeling_script.json", + "sha256": "898ebba5c9f0a2ad3a66d4c85da539b2795ee65c28fa8b7c7bf44fa6ef2da5e8", + "bytes": 37873 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0025-fusion_run_modeling_script.json", + "sha256": "d16b321e3b06003f24e6d0e17ef37cc43e656c55163b38d414de2ee1d5ffc16f", + "bytes": 36439 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0026-fusion_run_modeling_script.json", + "sha256": "aba5c60cf489b199cc3f5e358a6ed96bb1c0939326b797d7e28c6883cfc2cbea", + "bytes": 37503 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0027-fusion_run_modeling_script.json", + "sha256": "b14c5950ac2bb8d4e630a7a92f57e3f4d70aceff05fd751a1105a4f8106a8f0a", + "bytes": 35177 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0028-fusion_run_modeling_script.json", + "sha256": "c6addd0768dee0ad5e9f5d33133505932c151d942f7993be1aba552684c96e65", + "bytes": 35034 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0029-fusion_run_modeling_script.json", + "sha256": "a515524528a260d89e11881e19266339c39d26f51e8e7127e259da4e3ce15c86", + "bytes": 35177 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0030-fusion_run_modeling_script.json", + "sha256": "5790c98cc6c60443d3b1976e879b41e01291ed8f181b2e190b2746bd2b4d353a", + "bytes": 35034 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0031-fusion_run_modeling_script.json", + "sha256": "b63f0b157b622bd249ffc260d7cd22255337a0985ea1463936d5ec2e89318850", + "bytes": 35151 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0032-fusion_get_preferences.json", + "sha256": "f3fb6e5e8dd25ba837bbb437387e66d3d5952be67fcdcdc0abb200616965c5c0", + "bytes": 4742 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0033-fusion_state.json", + "sha256": "a417f0abd3d6f598086c5f4e972463943a5e53e196398e89d753b2469b554825", + "bytes": 19211 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0034-fusion_addin_status.json", + "sha256": "910b1ec970426ae8efe69e61df9a4fc93a685ff25f70dfb5b0eb2e1c4eb2ab9a", + "bytes": 2085 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0035-bridge_list.json", + "sha256": "acc8e02a5a35e51a9f9072c89765c3642e48a630025e5b1caab0f738d738d9c6", + "bytes": 106329 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/calls/0036-run_script.json", + "sha256": "34222863215c519c229c76b5212e3f28ed396111dcf4e898d66a3fc17d8d2e31", + "bytes": 10962 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/diagnostic_scene.py", + "sha256": "bad536a1d0159eb5e2426e5e671510bc3e0178aee80866f477152f43c3b02073", + "bytes": 11282 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2", + "bytes": 28903 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/probe/READONLY-PROBE.md", + "sha256": "01f33dde1a9bfa821b308a91d0889cadce7c6098af73cdcfbe98e66bc527ff41", + "bytes": 6208 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/probe/read_scene_probe.py", + "sha256": "bc2bcf78675f28151faa4ab0c67276e553792cc0c6c206fad98718219e02814c", + "bytes": 18532 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/probe/test_read_scene_probe.py", + "sha256": "8df35f06355717a0c8bfd64b66a951a4a349b9257aff0b14ff1db7a02edb8ba4", + "bytes": 15227 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f", + "bytes": 17361 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "bytes": 39936 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/diagnostic-sources-20261005T213050Z-422781656d64490da02934d1757322ed/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "bytes": 25311 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/evidence-manifest.json", + "sha256": "faef7b55349fe6c24e04246c2c31993f04c07283160a346e453ea3074d559b5a", + "bytes": 9254 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/independent-review.json", + "sha256": "70520b5cccde5aecbb0106ff8027b5754d004bc766178536c707d242526db58c", + "bytes": 882 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/live-runtime-identity.json", + "sha256": "df509d6f54d2b30846176c1b81a97c5090b4dd491427d326f1001f62089cc056", + "bytes": 1656 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/native-scene-probe.py", + "sha256": "ce82c574608f4f99ce442ced5906b653eff7f1d8314c7851a6a795271a13e397", + "bytes": 18172 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/ownership.json", + "sha256": "6402c38eeaa020aa7ed681f028260bba5de7315876fbed75a5dbd03334af4a20", + "bytes": 4008 + }, + { + "path": "docs/mechanical-verification/cp9-readonly/report.json", + "sha256": "3324ae9e6fc6ad42d205c425aa2b6a832b414b27893d4dde9cdec3ab1d1bae54", + "bytes": 47102 + }, + { + "path": "docs/preprod/fusion-bridge-1.10.6-2026-09-08.md", + "sha256": "2f0fe8835943209bc533ca2e805fe801b94f90c23deaa143bc637259a93e1f4d", + "bytes": 2747 + }, + { + "path": "docs/schematics.md", + "sha256": "b369505db3cba86adf830eeed8406c6792fc184272dae2aa29b87c57c5206fac", + "bytes": 9818 + }, + { + "path": "docs/sign-in-and-updates.md", + "sha256": "7f0150b3c1ab0ca8b44e228757b966b24ef2c9ceccc03fba347baf4ec834871e", + "bytes": 9332 + }, + { + "path": "eagle_lbr.py", + "sha256": "b1e4900ec49ed6bd5f1367869a2d9f9ff39a445fc7c0ef9c0443cb42a7008cdf", + "bytes": 10240 + }, + { + "path": "electronics-libraries.md", + "sha256": "b4d889b019e39ff024fa0be0c405bf1c09afc7e7310398503a7c6f3bdd19cd60", + "bytes": 3159 + }, + { + "path": "examples/ADS8588SIPM.fusion.lbr", + "sha256": "4c81b506a96ceb49101d57c88a925773452b45bcebbc7b21bf4407f63859515f", + "bytes": 18863 + }, + { + "path": "examples/ADS8588SIPM.step", + "sha256": "82a880ae4f382b223c2310e5137ed422b610d572c02bd5c46779d9dc38e706cc", + "bytes": 245077 + }, + { + "path": "examples/jst_connector_generator.py", + "sha256": "a4f3efb3672197ae66cc532a4d2bd98391c5e63b5cf78ee668e5f6a2957eee5e", + "bytes": 6177 + }, + { + "path": "examples/jst_ph_connector.py", + "sha256": "b35b7ec33c064a3fdf0e967bc4c3fa61b78c4ca3d8d638bf0928733f983286ba", + "bytes": 5032 + }, + { + "path": "fusion-hero-new.png", + "sha256": "7827d37ff9f1eceadaaca375b86ef823c058b24ded368888ebf514a89666788a", + "bytes": 515210 + }, + { + "path": "fusion-hero.png", + "sha256": "ea21bac43c7480e4d0e642051685118647f567053816c7e89a3c5af9026dfbe5", + "bytes": 504925 + }, + { + "path": "fusion-mcp-server.md", + "sha256": "f0f198d1aa969161397f98ca402ad696394d7ea8a21dca356e8c2cd91fda236e", + "bytes": 16226 + }, + { + "path": "fusion-preferences.md", + "sha256": "6bc0f5ddf4de5ed5ff200b6ee15df6ab9f740bcca53ed1196e6ccd70b0ff0490", + "bytes": 5070 + }, + { + "path": "fusion_detect.py", + "sha256": "75f5f65fcc4f72373840a684b786f06a79700d0776d6a2000b9ad337edf6bd8b", + "bytes": 68362 + }, + { + "path": "fusion_helper.py", + "sha256": "d53ba9a940d52c42bbcb49c93b96f70bca7ea52080da0e94d1a4a1e5765b979a", + "bytes": 13090 + }, + { + "path": "fusion_ui.py", + "sha256": "0767b1321cf50d53e29fadbbbd21d418a8b886c208cd82f39c6e136abace5dd5", + "bytes": 27521 + }, + { + "path": "fz-2d.png", + "sha256": "6f189228efc236b78a63dcc848b0e6bb583a2cf2b38a1b7378eab2932ff7e2ba", + "bytes": 658681 + }, + { + "path": "fz-3d.png", + "sha256": "0bf6d1bec8a2450a86086546c262a3db13f053ace1a707c46f3fa290766a8d2c", + "bytes": 70199 + }, + { + "path": "fz-bom.png", + "sha256": "70424c123e54eb28f286af8f45ae8572d02a19b778ed22d6939f21fb96b9a39d", + "bytes": 335356 + }, + { + "path": "fz-cloud-files.png", + "sha256": "2080d3bae8c778a1c6750a0645b5fe4e4d76b06b769f033dc767d9561f58ebfb", + "bytes": 209728 + }, + { + "path": "fz-schematic.png", + "sha256": "55066c939c71633f13c924d45afa1dec6ac1d589b8032c09456f1d44de5cffce", + "bytes": 293749 + }, + { + "path": "fz-sensor.png", + "sha256": "c202ee721f711b2f9c09bf6d38d5d2f5004f340f7a27116c1cfe46aa1a825008", + "bytes": 496612 + }, + { + "path": "fz-sessions.png", + "sha256": "b474a67d746993e44f40067de54d4270a3477c3c4dea668bd11496cff760bbcc", + "bytes": 35796 + }, + { + "path": "handlers/__init__.py", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "handlers/close_fusion.py", + "sha256": "fc962c743bebb33e5b43f8d660b2c84f3c197e6770571052d4080f8e50834d53", + "bytes": 19524 + }, + { + "path": "handlers/dialog_classify.py", + "sha256": "c51895f289589f065b6017d2857a83325051c41e5dd9c46c6e5396a3f3d0b7d5", + "bytes": 21337 + }, + { + "path": "handlers/dismiss_recovery.py", + "sha256": "ab5528e38fa6af44620e2b38ff80c306981ad843fca0d730adbef14f27083f03", + "bytes": 14615 + }, + { + "path": "handlers/fusion_ui.py", + "sha256": "33e209bd784f17986bc8b6b5016ad0c0c519e77093ea5498c8fe49d24e4470d9", + "bytes": 39994 + }, + { + "path": "handlers/open_design.py", + "sha256": "cee0cfdea20c259c7122e0b6c754048b57a54fa13efbd424706568d52bbacbc7", + "bytes": 4211 + }, + { + "path": "handlers/taskbar_overlay.py", + "sha256": "5e02457667c879cad05ca34e934c2034354e489a4d9c1c4701d10ec396456d78", + "bytes": 9642 + }, + { + "path": "hero-billboard-v2.png", + "sha256": "2c531ac8f5168e6aa1f9dd3ccb3aafc4a961dbb613cfb901562e180b313d5049", + "bytes": 1637762 + }, + { + "path": "hero-billboard-v3.png", + "sha256": "f9f7aa455a42d2786c258b790cdd993a9ceac4967414ba218311d305caf17c93", + "bytes": 881321 + }, + { + "path": "hero-billboard-v4.png", + "sha256": "0f45af5b834c7f4d6246f09f3e5cd3e8a84892bf3d33277566d22ed24bc098b5", + "bytes": 1087994 + }, + { + "path": "hero-billboard-v5.png", + "sha256": "0f45af5b834c7f4d6246f09f3e5cd3e8a84892bf3d33277566d22ed24bc098b5", + "bytes": 1087994 + }, + { + "path": "hero-billboard-v6.png", + "sha256": "8c1faa648ea255da628b39532951980a3a06c2f9022a8514ea0231adc33fd700", + "bytes": 1081164 + }, + { + "path": "hero-billboard.png", + "sha256": "bac9ce7dea85059c051eab5ad7a17d3844d038562044877f7dfbd9081da4dce6", + "bytes": 1947847 + }, + { + "path": "hero.png", + "sha256": "ae0197bdd31c2cd5667dea7a6c2b2e42488ec39b3430a02bc2ae284a18dc8cde", + "bytes": 324410 + }, + { + "path": "install.sh", + "sha256": "529bbf9b7f99f16512638004be7e5b573e25c77161aff8aaa8f6bbc93d4a7d48", + "bytes": 3337 + }, + { + "path": "install_addin.py", + "sha256": "3c549bed77bca1b844ff3823aaba5da079f9faf6e41cdbff3cd71a058933bea0", + "bytes": 9051 + }, + { + "path": "kicad_lbr.py", + "sha256": "1e0407a64c8bcac8b2a191fbab7b4b0f11455e710035f4e05bb5bc321fde58cc", + "bytes": 21022 + }, + { + "path": "lib-01-open.png", + "sha256": "e1e78227e2192059fb99c2e9749cb432e72c2d3a065fe0b95d1ea2e4bb975ab4", + "bytes": 239881 + }, + { + "path": "lib-02-generator.png", + "sha256": "f3e0cbceeafd387e26096c9c9fabc39c36669dfa025eed4af5fdb1710ebf92f0", + "bytes": 194203 + }, + { + "path": "lib-03-chip-on-footprint.png", + "sha256": "89d96b7a736f5f02ed894a602b21428778751cedce0075e91aa55f321331c9b7", + "bytes": 199654 + }, + { + "path": "lib-04-named-on-footprint.png", + "sha256": "e1c46329b90616b7ef41924f2f9ad6256fb0aaaefd3c654c7f258ce39232c3fd", + "bytes": 336592 + }, + { + "path": "lib-05-clean-ads-on-footprint.png", + "sha256": "adcbac87626e180bf54e03972b12c9118fe5d49e5014850b57b5795f590a24b6", + "bytes": 333743 + }, + { + "path": "lib-06-adomlbr-viewer.png", + "sha256": "d65c8d7935e2a801883b1d10ff780164523da1f0276a934cf9058f3c9c85070e", + "bytes": 602478 + }, + { + "path": "lib-07-lbr-reopened.png", + "sha256": "a5440bd2b861c1b3953f45ab33e311dabdf8936c8f6a69adc5f675dbe0dc8b59", + "bytes": 266366 + }, + { + "path": "lib-08-fixed-4sided-footprint.png", + "sha256": "91affb40cac53b95f085365fb47ce4a8cee1198a169cbd68fce36f419790e945", + "bytes": 272898 + }, + { + "path": "lib-09-3d-bound-moneyshot.png", + "sha256": "dfdc0924d956b8d81dbb0ce7e1f219ce174a75d88c4921a2957db0cab30365f9", + "bytes": 301421 + }, + { + "path": "lib-10-ads-chip-on-footprint.png", + "sha256": "ba81fac9b6f7b52bd33512b33c5766d38928597b1230917d916211615a8df052", + "bytes": 447570 + }, + { + "path": "lib2-12part-library.png", + "sha256": "af749971837de7ad7cf18343e64fa37eca662d491e7c33d8171604bc2ecfa28d", + "bytes": 274394 + }, + { + "path": "lib2-atsamd-chip.png", + "sha256": "0660d1fd895326ae1da6446820b7f92716c261192d23b9d18187466206b7eff3", + "bytes": 313921 + }, + { + "path": "lib2-component.png", + "sha256": "dd587f5a9ea77b10f81a59368f797d80d366fa18518fc413095e21820dc3b35c", + "bytes": 462542 + }, + { + "path": "lib2-esp32-chip.png", + "sha256": "198ea6fe17fe1aecf2b5112fe1ca98df5797097b5872ff5750fe940b10bc97c9", + "bytes": 270223 + }, + { + "path": "lib2-esp32-footprint.png", + "sha256": "373faee1eaa94ac6072efc65ef16ef6980e7517217bbb4b20f3913d770d75858", + "bytes": 216198 + }, + { + "path": "lib2-footprint-editor.png", + "sha256": "1806c11b6ef733c97197de37a02bb97bac397bef38fe3c52073ebed4993e3b1f", + "bytes": 392172 + }, + { + "path": "lib2-symbol.png", + "sha256": "7080c0e3d83df063510c3bb719d519b7b4444644cdec7f5c99a3527395235ef4", + "bytes": 428704 + }, + { + "path": "lib3-138-overview.png", + "sha256": "d57b8001e818f46d864bd310e222b06d7370f9c4e8c904ee542ab539604c1205", + "bytes": 324949 + }, + { + "path": "lib3-cap-3d.png", + "sha256": "c35057f717be98d9b7ecb681c3ce8c9f7a0d0337d880abb45fef9800210263a3", + "bytes": 210383 + }, + { + "path": "lib3-resistor-3d.png", + "sha256": "2be448bb8d22bb2d651ac083f3d1e6118c577b5ba1122dca99a55c362ce7800c", + "bytes": 190100 + }, + { + "path": "library-3d-demo.mp4", + "sha256": "5292fe2f72da773a261871f87d27ad67ce1088ec71074c3aba58d8acfdaf68ea", + "bytes": 3772569 + }, + { + "path": "library-3d-montage.mp4", + "sha256": "b6297730c6e058dc558e55287331c79af78d25e8b9eb6114b3e3da5ec2ef6f3e", + "bytes": 1055064 + }, + { + "path": "library-demo-live.mp4", + "sha256": "5292fe2f72da773a261871f87d27ad67ce1088ec71074c3aba58d8acfdaf68ea", + "bytes": 3772569 + }, + { + "path": "library-demo.mp4", + "sha256": "0ede35bcad262dadc8a33956805ea11f38362e6f9c01c9368e40c7c62302fe55", + "bytes": 2717465 + }, + { + "path": "library2-3d-montage.mp4", + "sha256": "4ba7f3eadcdd82b85a59f1268a6217116b5b07d1f8a2d63549e6ef9c4ed35e7b", + "bytes": 1711888 + }, + { + "path": "library_bundle.py", + "sha256": "d071b600cefb20243259a8a1e27eb3edfbcefd1c502503ac7698ce0b919646c6", + "bytes": 12064 + }, + { + "path": "mechanical-bom.md", + "sha256": "a8a488e57d380a299fbccb66fd568224802cace6793b52151112d91c6fd224f9", + "bytes": 4587 + }, + { + "path": "outcomes.png", + "sha256": "75baad17e52e8b42f56f512a776c80cb9c8aed3c4bf64342ae7fca879aacae13", + "bytes": 34798 + }, + { + "path": "package.json", + "sha256": "75ad117c52f36d7dd3c4bbd81bff6841ebb3374c1f9c2c594b64c9ffa2fed45a", + "bytes": 4778 + }, + { + "path": "page.json", + "sha256": "9e96123c652c3c12ca888a61ca402f4ade7247d032af743d218522e2ca4e8478", + "bytes": 7077 + }, + { + "path": "prefs-1-open.png", + "sha256": "22830f99884fb16f486d1b4d87add6c53044b7b075d33ef2b043d13a2f37fde1", + "bytes": 252832 + }, + { + "path": "prefs-2-general-expanded.png", + "sha256": "fb850d9dc1e6054a015e64b969ff0f3d6ddb4371b2377bd4b7181fa32fb3638a", + "bytes": 280622 + }, + { + "path": "prefs-3-api-mcp.png", + "sha256": "a4809a142f3caec505851de00317cd9e1d6c70423b858c10195d00c919148bd9", + "bytes": 258511 + }, + { + "path": "pub-bridge-list.png", + "sha256": "9dc81163e3cb2f5a29d50664252c2bfcbd66e9a0f9ac18bd7af492ffd7f99117", + "bytes": 349829 + }, + { + "path": "pub-releases.png", + "sha256": "d991a31b1beed52b3f16c49721552723b0e3e819a8c3a513a6992f894555764a", + "bytes": 359786 + }, + { + "path": "requirements-test.txt", + "sha256": "c144e88f7a259b078519c943f54987885467114d211de382f1e2ab4124753733", + "bytes": 139 + }, + { + "path": "resources/adom-overlay-32.png", + "sha256": "23014fd52b3a531e4567837cfed0668843353e02ff7682e06a1c4a2f57d394c5", + "bytes": 678 + }, + { + "path": "resources/adom-overlay.ico", + "sha256": "a5c4559b3ddc28f21d571e2ff47a6b673b05fb2adf3d0b5b74a55df090e6830d", + "bytes": 2078 + }, + { + "path": "resources/demo-audio/aps-f1.mp3", + "sha256": "9f5b210006c232e1fe96f6cbb459166364c4740b2c3f9b738a7eeabd57c244f4", + "bytes": 41040 + }, + { + "path": "resources/demo-audio/aps.json", + "sha256": "d0107fd8a71a8dbb0347f3669b539b53f98b82a3a5f401a86833173e6fb5792e", + "bytes": 327 + }, + { + "path": "resources/demo-audio/aps.mp3", + "sha256": "6fc82677de6bb4c6b0e9ff525a3799e65f324fe78e01bcf98e9c95841c88680a", + "bytes": 60192 + }, + { + "path": "resources/demo-audio/board2d-b.mp3", + "sha256": "b9d68014943e52a2f0fd5ffa5e4d10d0743840d0456d53f2904cb1e6baef975b", + "bytes": 43920 + }, + { + "path": "resources/demo-audio/board2d-f1.mp3", + "sha256": "80c5bd1f45b32e402f6369a6c6722de287add0b9ca7d5e6333fd8f780d403f35", + "bytes": 47664 + }, + { + "path": "resources/demo-audio/board2d-f2.mp3", + "sha256": "4e2edb76c69593b3cb9334f65525c79c421fe8cf38e7f1bed76122666ca20b49", + "bytes": 31392 + }, + { + "path": "resources/demo-audio/board2d-solo.mp3", + "sha256": "f6de4308c191e2feeae1ec0d530f9503a78be33e9d0d124b563c459e19fcb696", + "bytes": 44928 + }, + { + "path": "resources/demo-audio/board2d.json", + "sha256": "9fef8a3a8943cc3101ed3e277ba3dcc8135d0a8eaee21400d30c4e07dbe05bef", + "bytes": 309 + }, + { + "path": "resources/demo-audio/board2d.mp3", + "sha256": "4bc34cd72bac60111b8ad0d4dada3f1a6b7f2f32b376d44264d969e4c202c114", + "bytes": 49680 + }, + { + "path": "resources/demo-audio/board3d-a.mp3", + "sha256": "ebd619ad4a4b8efd2d499e47199edffba6408c3c9779eb874bc144175acf2ab9", + "bytes": 29808 + }, + { + "path": "resources/demo-audio/board3d-b.mp3", + "sha256": "2e3c844eaceabe0322ac87622747402543d28ff7c843e3b5e48d959b1d00736b", + "bytes": 49680 + }, + { + "path": "resources/demo-audio/board3d-f1.mp3", + "sha256": "382c5cbc5051aec453c76031825ea8508708b0012cde2c498c9a4cd8ba2b7022", + "bytes": 47808 + }, + { + "path": "resources/demo-audio/board3d-f2.mp3", + "sha256": "579653b5739449f1bcb7bdea6a0e4407a5adebeb3fac3f8d16ede89ad3c662b5", + "bytes": 43200 + }, + { + "path": "resources/demo-audio/board3d-f3.mp3", + "sha256": "497cbbc777b3cec2142488522973c0ccf46270adf8dba0ec0af61c85ea1bfc99", + "bytes": 46224 + }, + { + "path": "resources/demo-audio/board3d-solo.mp3", + "sha256": "2b3ed7c310a1bb60e8fd33d0c3c75e43b033c88cf2f1d323178983d0f5672c4d", + "bytes": 59184 + }, + { + "path": "resources/demo-audio/board3d.json", + "sha256": "5f9b419c8132d2b41f51c46d6cf4b8218b8b23c1f6a58976d822c35ff543a85f", + "bytes": 333 + }, + { + "path": "resources/demo-audio/board3d.mp3", + "sha256": "0c64eaa912b6c812b8b5f0f35866114736ae7d543e247212507590d03c964215", + "bytes": 56880 + }, + { + "path": "resources/demo-audio/chip-b.mp3", + "sha256": "d6ec97cdaa9878690d11a158a94808ea23cc20fa27652a4ae65587219f183f7e", + "bytes": 62064 + }, + { + "path": "resources/demo-audio/chip-f1.mp3", + "sha256": "c8ed83272ca1669149f05820919f113eabb34b2d4f38d05b82b7679e2d86475f", + "bytes": 41040 + }, + { + "path": "resources/demo-audio/chip-f2.mp3", + "sha256": "f727ee28db5c719c992ada87ba07d75253b19b72282d2eddd115b9b3825bd948", + "bytes": 50544 + }, + { + "path": "resources/demo-audio/chip-f3.mp3", + "sha256": "718f448426c4642a116988a74b62507648bd6f6922c7f4f17ce405baa5b8300a", + "bytes": 47088 + }, + { + "path": "resources/demo-audio/chip-f4.mp3", + "sha256": "51e61bdf3751c3ae8f81466ae60a9ce740a59b09c70145804500e2d5f0fd182f", + "bytes": 44928 + }, + { + "path": "resources/demo-audio/chip-f5.mp3", + "sha256": "db1baeb0b9c4626ca3b7b649e85e81dc9c7c0e6e3e135e8f9a800961f7ad369e", + "bytes": 42624 + }, + { + "path": "resources/demo-audio/chip-f6.mp3", + "sha256": "83c6f7b9c17fd7941ff6f769c81c13336698c0a650e5de030ee6962b03e92c4e", + "bytes": 50112 + }, + { + "path": "resources/demo-audio/chip-f7.mp3", + "sha256": "b4b1434f0ba938ee45c6229902d10dcbe2ed6448a6c5f9882dcf6c6c2fd4be54", + "bytes": 47664 + }, + { + "path": "resources/demo-audio/chip-f8.mp3", + "sha256": "6b89f8045b20fea8568ae281ba6a0f993f74904cdf5680aff3ce0e50922ac1c9", + "bytes": 46368 + }, + { + "path": "resources/demo-audio/chip-f9.mp3", + "sha256": "0c53d12031806111a5fd6c4337065dc065d4934bddb5eede3f506dacf78b5f18", + "bytes": 50256 + }, + { + "path": "resources/demo-audio/chip.json", + "sha256": "108625fcbd1e8fb0303995b1cd06cbd7cf980573a5403e544c030f77b00a466a", + "bytes": 488 + }, + { + "path": "resources/demo-audio/chip.mp3", + "sha256": "22042cd28eecfc9a8f4918b09144324b8fe12de3176088f445c22a2c3a85958a", + "bytes": 118080 + }, + { + "path": "resources/demo-audio/dashboard-short.json", + "sha256": "729ebfc1bb6ff014e2d256801a794268fdaa9c203f008e1636bc30cfbf6d6064", + "bytes": 202 + }, + { + "path": "resources/demo-audio/dashboard-short.mp3", + "sha256": "c72356a21bf47037a34cf8e1588b3e14990bfbc31219dfe2e17028306dc990e6", + "bytes": 8928 + }, + { + "path": "resources/demo-audio/dashboard.mp3", + "sha256": "7641acf8c9ea8564f76052d2c35ea9272b4a83eb159da9da12d7134ea0125fb8", + "bytes": 63360 + }, + { + "path": "resources/demo-audio/dock-short.json", + "sha256": "51a092c9e40b8b0b678547d5c7eaa1a84c7298d7108301a2b198659f70b2007d", + "bytes": 225 + }, + { + "path": "resources/demo-audio/dock-short.mp3", + "sha256": "41c3b3f10c1978a5a93be4984cbdb8951f697a88551c15fcc146792df5ecf9cf", + "bytes": 17424 + }, + { + "path": "resources/demo-audio/dock.mp3", + "sha256": "50c414e7e6d13648997c15321ed992f2609194567184f853a0034fc1eb69b26d", + "bytes": 59904 + }, + { + "path": "resources/demo-audio/done.json", + "sha256": "86071bbb6efe9831e6069689921e3ccdabeae9bbf7661799e32137a0ea6cdf84", + "bytes": 403 + }, + { + "path": "resources/demo-audio/done.mp3", + "sha256": "e697b911db111b73cff4f6d6ac5629b810bdd5e6a8fda40fb511c23990b49838", + "bytes": 95616 + }, + { + "path": "resources/demo-audio/footprint-b.mp3", + "sha256": "c3cada80b069e6a82b07b41d976bd9264277400db274d5a199cdce665f2e8864", + "bytes": 70704 + }, + { + "path": "resources/demo-audio/footprint-f1.mp3", + "sha256": "d58b5554c1a302445879d036065ff3c2122f786875ac5ec9a8bcdd1102a89c22", + "bytes": 40320 + }, + { + "path": "resources/demo-audio/footprint-f2.mp3", + "sha256": "a24be978dca728a023fd5a0d2ee825152b91044708f0c0a7c15113bd903df062", + "bytes": 34992 + }, + { + "path": "resources/demo-audio/footprint.json", + "sha256": "85407860a4e272573ebc1d06775d224061b4fdda80850542168e812544362519", + "bytes": 305 + }, + { + "path": "resources/demo-audio/footprint.mp3", + "sha256": "9681c7dcd1af5dd91ef282d17aba04e81aa9b09768a562b41d1f6f41b3c201b1", + "bytes": 53712 + }, + { + "path": "resources/demo-audio/generic-f1.mp3", + "sha256": "feaf9a4bc0121f1af6be17fe35e35d62266340f12f528d732af6940fd442897f", + "bytes": 42336 + }, + { + "path": "resources/demo-audio/generic-f2.mp3", + "sha256": "2258f702708db4bbe05149a118d9357d1718d8398aa96c5000fd957328e41893", + "bytes": 32976 + }, + { + "path": "resources/demo-audio/generic-f3.mp3", + "sha256": "8414a67af981b8625f06a57b3687e90a6b6326d6809ba8b75844831e71d47d94", + "bytes": 63216 + }, + { + "path": "resources/demo-audio/generic-f4.mp3", + "sha256": "9921d49aaf45b19b1b6f88742bd4a3bae72375344c13f8b1230bfee3d4ebab99", + "bytes": 33840 + }, + { + "path": "resources/demo-audio/hl-board2d.json", + "sha256": "8433a47ba350bf0869236cc40c736a8309aebdca7c15f543a2fa494e4af37a07", + "bytes": 266 + }, + { + "path": "resources/demo-audio/hl-board2d.mp3", + "sha256": "4b4ad03edb6f8e60ee6c7c31480a411ab82ddf2900474c5e45886d737c04df39", + "bytes": 36576 + }, + { + "path": "resources/demo-audio/hl-board3d.json", + "sha256": "7eefcaa25afaedc9d6f40868497ea7a68a831ea685087d474d0e45ea3e6bbdea", + "bytes": 254 + }, + { + "path": "resources/demo-audio/hl-board3d.mp3", + "sha256": "ce4771fc6b41d14c4c95e01937cdbc91d12b6665345b188428dfb7a153905745", + "bytes": 32688 + }, + { + "path": "resources/demo-audio/hl-chip.json", + "sha256": "c5f09113c501991cf315c7cdecc88f33657a5cd523d3cebab87777d76829920d", + "bytes": 280 + }, + { + "path": "resources/demo-audio/hl-chip.mp3", + "sha256": "aa83a2ddfb3dd1149c7deead33cc006799e33922ce23d064c9767d5f61d472ac", + "bytes": 41904 + }, + { + "path": "resources/demo-audio/hl-footprint.json", + "sha256": "21107f4b4178c5cbe518fcfbc74cbb200a11a38ea00f6e8a923613789603542d", + "bytes": 298 + }, + { + "path": "resources/demo-audio/hl-footprint.mp3", + "sha256": "5d17b40bfe2507d555d815c4269f768e6d158f2edf3cf411b1e154ba21b6daba", + "bytes": 48384 + }, + { + "path": "resources/demo-audio/hl-library.json", + "sha256": "4e92a1e8dce00ffcecae6c8a50f6c6fd93010b74006c1c8b8d86842f18128481", + "bytes": 326 + }, + { + "path": "resources/demo-audio/hl-library.mp3", + "sha256": "4df680591597b378303a605008e859ec4056571f0b4061eabc6f411858bcd538", + "bytes": 56304 + }, + { + "path": "resources/demo-audio/hl-opening.json", + "sha256": "13a0b0a5cbd052317c5f11e12e4ac574f07ad990f761a09279a81d401b861f9e", + "bytes": 356 + }, + { + "path": "resources/demo-audio/hl-opening.mp3", + "sha256": "9c204d69d657826b5175185a8cd3d8bbbb1436973a9b3042871887f07524ab05", + "bytes": 69120 + }, + { + "path": "resources/demo-audio/hl-outro.json", + "sha256": "2a6f369e2b230badbeea0b888ba2388426537955edfdb85d17a8a5b56a19d5f5", + "bytes": 293 + }, + { + "path": "resources/demo-audio/hl-outro.mp3", + "sha256": "0c88d562a54c6b4c8cece78699dd8d4364e3105ce65e3d42881542b0c6e6974c", + "bytes": 51120 + }, + { + "path": "resources/demo-audio/hl-schematic.json", + "sha256": "f835e7df761d5258dafae3b631269a0a4d0e0143b375ee8132cb1728ad2ebd67", + "bytes": 270 + }, + { + "path": "resources/demo-audio/hl-schematic.mp3", + "sha256": "2deb8c44d91a29ec8bae1b36b9614e83f96cad4ebe48081f434442498e7a78d3", + "bytes": 45360 + }, + { + "path": "resources/demo-audio/hl-symbol.json", + "sha256": "10773ea983a7a5c818d16e6a23b1b2f4cab32ba253b5018dce99e31be0c1f0cd", + "bytes": 283 + }, + { + "path": "resources/demo-audio/hl-symbol.mp3", + "sha256": "ff2d429081f480b8a331c703303ec0fb52b6d4e165dd6a69640054e0bfeda0d9", + "bytes": 45792 + }, + { + "path": "resources/demo-audio/library-a.mp3", + "sha256": "1dec1f83675cc0d674946f1142698a23be5067f53a2a8820571b0590cd0b508d", + "bytes": 26208 + }, + { + "path": "resources/demo-audio/library-f1.mp3", + "sha256": "07c0c7d2b84e641a8c4f399947185309aa2a86ae2c2feb2fa7e21a1e3217a6c8", + "bytes": 53424 + }, + { + "path": "resources/demo-audio/library-f2.mp3", + "sha256": "9c5d34a19851af11d1a278161643acdd4dadb901741abd0085ef3d453706302d", + "bytes": 47520 + }, + { + "path": "resources/demo-audio/library.json", + "sha256": "22acf33312aa9acb622ba1cdd31d4be5bdd3f2ad246fce23e27557a4fef1fcee", + "bytes": 555 + }, + { + "path": "resources/demo-audio/library.mp3", + "sha256": "0b548388462968525859270734bac986911adc3ff1216135524faf6c938cb282", + "bytes": 150480 + }, + { + "path": "resources/demo-audio/multipart.json", + "sha256": "bb60f56813524ec57bae387cb8f5709ef72fce0b1af39d28fee6828793199c9d", + "bytes": 389 + }, + { + "path": "resources/demo-audio/schematic-a.mp3", + "sha256": "a807059c8c5adae9d65af7d7b62e2c0fa7c712aa886b100f14e816e87f2fa0ee", + "bytes": 72864 + }, + { + "path": "resources/demo-audio/schematic-b.mp3", + "sha256": "8f60568f1e1333afa730c39c48e74f14acb7739eeecfd02f8207c0333a2102fd", + "bytes": 50256 + }, + { + "path": "resources/demo-audio/schematic-f1.mp3", + "sha256": "8a34878eb22be6934eb5ad0c03e53a46b5759895ea455fd18ac5d36ba4aeb638", + "bytes": 54288 + }, + { + "path": "resources/demo-audio/schematic-f2.mp3", + "sha256": "f07c3440ed26c2b03b0c7514e34dc6de3520edb8a00ac7ea5fc40dce60475edd", + "bytes": 38016 + }, + { + "path": "resources/demo-audio/schematic-f3.mp3", + "sha256": "8be6705fcbd31b00e9bb2788ef8f0f7d1bea4c8685216bcc2c01c771ed3b3f81", + "bytes": 32688 + }, + { + "path": "resources/demo-audio/schematic-f4.mp3", + "sha256": "ee8d136d8011734ef35f79cb666fa74afd4bd0d602529b9a198635721b9b2344", + "bytes": 55008 + }, + { + "path": "resources/demo-audio/schematic-f5.mp3", + "sha256": "0d0f3bca28398123a0b35cd65beb65e6a7c6195637b1db94ce8c481ff6313b1d", + "bytes": 45648 + }, + { + "path": "resources/demo-audio/schematic-solo.mp3", + "sha256": "93890cddd4410096cc4fcd252ab80e4bc0480577eaf3da5825ba04ffa2eb1c94", + "bytes": 76176 + }, + { + "path": "resources/demo-audio/schematic.json", + "sha256": "368235fd210961653e9f6747b82984bd729662d46b5e63a244b7bf3309eb2266", + "bytes": 387 + }, + { + "path": "resources/demo-audio/schematic.mp3", + "sha256": "febda5d26604fd12260b6630ed5bc194f0328359e94b9ca93dda5c39071abd65", + "bytes": 86688 + }, + { + "path": "resources/demo-audio/symbol-b.mp3", + "sha256": "2259d266a7dd7f11e90d5f8641e4808780cdac88384639e1322aff991c23cbdf", + "bytes": 82080 + }, + { + "path": "resources/demo-audio/symbol-f1.mp3", + "sha256": "18b0eda7c9abe42a8f47f5779510f9c3a2074432ab34c25b3c6403bee7553f39", + "bytes": 41184 + }, + { + "path": "resources/demo-audio/symbol-f2.mp3", + "sha256": "b22aa4d3337d38cfd686b252ed781e8c17df88795110731601886f8486f51233", + "bytes": 41616 + }, + { + "path": "resources/demo-audio/symbol.json", + "sha256": "ee0e284528ee289c0f1a2448f44754def26582f8bc3ade8c638444a645853077", + "bytes": 406 + }, + { + "path": "resources/demo-audio/symbol.mp3", + "sha256": "23b3702f838862a6fc24cfd336e0f24e79a7b25c87c9e884a6dc7d9e1b9b616e", + "bytes": 81504 + }, + { + "path": "resources/samples/0603WAF3300T5E.lbr", + "sha256": "99913ea90c4bab475507c6d0e06bb8c1e45686398b566c92b10156aaaf5b4809", + "bytes": 5928 + }, + { + "path": "resources/samples/0603WAF3300T5E.step", + "sha256": "1875571c326d0d9e96f36b4efeb8094068ef7619f0a449c781caf0b49c2e5861", + "bytes": 40618 + }, + { + "path": "resources/samples/ADS8588SIPM.fusion.lbr", + "sha256": "da31a822b7f533f5ef7a52ecfd978888a9e4defb16f967edce20de4de72f0188", + "bytes": 18863 + }, + { + "path": "resources/samples/ADS8588SIPM.step", + "sha256": "82a880ae4f382b223c2310e5137ed422b610d572c02bd5c46779d9dc38e706cc", + "bytes": 245077 + }, + { + "path": "rust/Cargo.lock", + "sha256": "f072958eab03c348542baf52d6e082d3cf25346ed75f5b1d65ccb9cc5ceba194", + "bytes": 35362 + }, + { + "path": "rust/Cargo.toml", + "sha256": "be275d4919d09a63c0d5b341fdf8b7e9bf8e9114addedfc9631c69663892bf40", + "bytes": 551 + }, + { + "path": "rust/PORTING.md", + "sha256": "cdbd1c7795936a73c4fa294964cc89937b32854b7d1474668c55c781e0407d71", + "bytes": 49485 + }, + { + "path": "rust/bridge/Cargo.toml", + "sha256": "a4a29bcb211c9713f78f8c6846b8cd84d3868373d4b5cfcb8ffc82c264153177", + "bytes": 853 + }, + { + "path": "rust/bridge/src/addin.rs", + "sha256": "1c047f60ff494524886c3042accc6c8466363dde9ccfc7f0cea7f639eba5a38a", + "bytes": 25090 + }, + { + "path": "rust/bridge/src/addin_install.rs", + "sha256": "aa75349181977f7985210c56688621b62744a23f3083d69ec9e4e544fb706092", + "bytes": 8454 + }, + { + "path": "rust/bridge/src/aps_signin.rs", + "sha256": "21d01ee554dd95e61d550860b1d3d090d15e1ceaf99c5a965d16a712ebc67686", + "bytes": 29049 + }, + { + "path": "rust/bridge/src/attach_orient_block.py", + "sha256": "e6fd837dad1b266f999202224665c6d9ea602b8afea13bd759c9cdd735446cbc", + "bytes": 199 + }, + { + "path": "rust/bridge/src/attach_template.py", + "sha256": "c402f7ec4a928280e38feea2c5a864d8e93496840473832db73908de76f35c38", + "bytes": 1688 + }, + { + "path": "rust/bridge/src/chainexec.rs", + "sha256": "4d02d83422ab70485ef413c87a189acf980254954430781dbafafab074fa01a9", + "bytes": 17780 + }, + { + "path": "rust/bridge/src/chains.rs", + "sha256": "dac4d311cae41e7a086fa08931afdbe2c29dd9f6ff7ecff74da8f92278aedc4f", + "bytes": 53996 + }, + { + "path": "rust/bridge/src/demo.rs", + "sha256": "e2069c22d85e48869b934b17e6b07f91d0c137848cb25a0c6c29d0eea2a6df31", + "bytes": 58911 + }, + { + "path": "rust/bridge/src/electronics.rs", + "sha256": "3a83fbe0f615db400a74ef5a3eec949d615dbe4e4f7d065af42b951630967984", + "bytes": 16239 + }, + { + "path": "rust/bridge/src/epg.rs", + "sha256": "0ccedd7192514b02ceffc082508362d4807e3a27fcf6dd4ab0e54e11959891f4", + "bytes": 8427 + }, + { + "path": "rust/bridge/src/epg_template.py", + "sha256": "b9bfeeb270e8505d04625d41f69d7a4a48646478c1c64e1c9e171c2ed7db40a1", + "bytes": 10595 + }, + { + "path": "rust/bridge/src/epg_types.json", + "sha256": "be5fd128d7becf98002e3ce257f5a2f5c630480a385fe7d5319800c62e19636a", + "bytes": 875 + }, + { + "path": "rust/bridge/src/etiquette.rs", + "sha256": "2ebc3ae027f1a976c6d1265832507bafb32d14732295d487602093dd9e2c3822", + "bytes": 27735 + }, + { + "path": "rust/bridge/src/fusion_default_designrules.xml", + "sha256": "c087e9bf8fb7d4bfc0eaffc280dcb1437c45823d846545cb46938b93d9abf534", + "bytes": 10097 + }, + { + "path": "rust/bridge/src/fusion_prefs.rs", + "sha256": "2aee1d6d12545aaead793719589484a1b1b628230bc0849cbbc0eb3d485a0634", + "bytes": 9912 + }, + { + "path": "rust/bridge/src/fusionpath.rs", + "sha256": "e9d7b98507c70d9d1fccb35f312143e0f6a05e5462b6926b08a2cb48d17e6a45", + "bytes": 7016 + }, + { + "path": "rust/bridge/src/inspect_bodies_script.py", + "sha256": "5e1cf1a6516b3fc4fc705d1dcf7eb4dacc23bef9124a2e0cd6f13dd977cb7dea", + "bytes": 2005 + }, + { + "path": "rust/bridge/src/janitor.rs", + "sha256": "0c6d7bf3c050af375faab5d9cd89204e5a6aa6577411b4f9042c353ab26eddba", + "bytes": 10664 + }, + { + "path": "rust/bridge/src/launch.rs", + "sha256": "76054e794a63abf15defc89166703f0d3da87531a4ea7c9bf2123e1e279dac14", + "bytes": 30613 + }, + { + "path": "rust/bridge/src/lbr_wrap_parts.json", + "sha256": "f237770833807f095940f8b8acbf544b0ce337f44a9b0593eef336a46e3dfb29", + "bytes": 4349 + }, + { + "path": "rust/bridge/src/lifecycle.rs", + "sha256": "7a909d100de6cd57779ab9bb9dcd786293b6d531ce1aeff2e7555a85908b5057", + "bytes": 39826 + }, + { + "path": "rust/bridge/src/livefeed.rs", + "sha256": "08d1f445b524aa602fac937b28bec3e2254f3e7f9405b09a932d8e39d0a1c3b9", + "bytes": 7383 + }, + { + "path": "rust/bridge/src/main.rs", + "sha256": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a", + "bytes": 135406 + }, + { + "path": "rust/bridge/src/maintenance.rs", + "sha256": "f5e98a22248c217edf399993cf8bbc2462fba781c7de64d1c5f8c8141a77a5ce", + "bytes": 17501 + }, + { + "path": "rust/bridge/src/make3d_orient_block.py", + "sha256": "8bcd3f2b86602ea74229a6fd686db5b306d49085d0bf4920b7e37c1fa4b186e1", + "bytes": 412 + }, + { + "path": "rust/bridge/src/make3d_placement_block.py", + "sha256": "9aa001d7eae80edb8a8c23da55ea60f5af8917c7e705896099c35b5ac4b9d879", + "bytes": 1190 + }, + { + "path": "rust/bridge/src/make3d_template.py", + "sha256": "ee5506673f832002796f227c71d693e4879867c7edcdd24b80abd22602d89bc5", + "bytes": 5661 + }, + { + "path": "rust/bridge/src/managed.rs", + "sha256": "941398dc076d4c7189a297cba0361cd5823687e7f64953c68575212da8f3ee62", + "bytes": 30679 + }, + { + "path": "rust/bridge/src/mcp.rs", + "sha256": "f71d03df88067d4d5e20b4a7cf4822ace25b114db8d361b5dc987962e41672d5", + "bytes": 12304 + }, + { + "path": "rust/bridge/src/mint.rs", + "sha256": "85d6430a129bc2ffc5ac005656d6f297058413eef2ae2e6532accd85c247b187", + "bytes": 59385 + }, + { + "path": "rust/bridge/src/operation_status.rs", + "sha256": "cdc3b88f214abeac3d0b0dc50ae10a356cd0c061388d2d39d95bb6fff0753dc1", + "bytes": 5004 + }, + { + "path": "rust/bridge/src/orchestrations.rs", + "sha256": "e26e61c2132fe272231af9e4825cd527d20772209e2aa9d6d9ae3ffb2b978b96", + "bytes": 135681 + }, + { + "path": "rust/bridge/src/palette.rs", + "sha256": "a31810a880fbfe5c7301f5f087b9986218b1fdcb4ce8840f85111ca9bec281b8", + "bytes": 9261 + }, + { + "path": "rust/bridge/src/pref_script.py", + "sha256": "d057d8240103313483bb8627a4a980553e8cc5901dd62249e87d97fd70935f19", + "bytes": 4262 + }, + { + "path": "rust/bridge/src/prove.rs", + "sha256": "4fa3bab3277f885c6017ad368af80d161f8fb5f9c8d0481ef42d0892e2ccd37d", + "bytes": 26631 + }, + { + "path": "rust/bridge/src/readiness_exec.rs", + "sha256": "f6653592d7ec05ebbf6eb548b7484fc4e99a14970e87fc486de6810ca810ef14", + "bytes": 11631 + }, + { + "path": "rust/bridge/src/routing.rs", + "sha256": "ebcf1b04442957dbc2c2731758995cb6b4579e51dcfd5b8cd4f69b4326226187", + "bytes": 2743 + }, + { + "path": "rust/bridge/src/routing_planner.py", + "sha256": "d901c4bad9bad8571e07a35af0afc4a3f74845b0e3dccc56f00b8451846abc2a", + "bytes": 6149 + }, + { + "path": "rust/bridge/src/routing_script.py", + "sha256": "9ce0e7ee1ddab0cec7b90a9ee84c918f1914b41c507b575719e6910b5fdf4a69", + "bytes": 63180 + }, + { + "path": "rust/bridge/src/seat.rs", + "sha256": "62029258deddc252ae016ba2afcd8904cbe697e5cd38a03302f6798018317f49", + "bytes": 10090 + }, + { + "path": "rust/bridge/src/services.rs", + "sha256": "6758b69e2e852995bce3acdfebd0cffdc68dac896555eb18e7fe66d7493a5c4f", + "bytes": 31697 + }, + { + "path": "rust/bridge/src/signin.rs", + "sha256": "cb4dcbbabaf83dc1dbd8ce2e80fd1733b6a81c4fbbc4cf20e78b3cba7c37bd61", + "bytes": 61629 + }, + { + "path": "rust/bridge/src/small_verbs.rs", + "sha256": "a05053ce098062498e7f9b912d12e5998b93b8903f7bec4db243cf22c4a0c526", + "bytes": 47978 + }, + { + "path": "rust/bridge/src/testproject.rs", + "sha256": "02b4d1ec6ab2d196b396f57f58b07e0bdcc522f02524ccbedfae4a4af5f90e21", + "bytes": 38186 + }, + { + "path": "rust/bridge/src/timings.rs", + "sha256": "b41fc1604c44f403bc1fe51f01119c19d62e93d5e5d393c2f733539ad2d6daad", + "bytes": 7226 + }, + { + "path": "rust/bridge/src/tour.rs", + "sha256": "bec9eac6fa40075325f66280f3509633b26cd18b3878b3e7cd84696e4d1a2bed", + "bytes": 94173 + }, + { + "path": "rust/bridge/tests/fixtures/board_info_sample.json", + "sha256": "f2c8688bf3f877f7c13efa6510d73af4792553e8325e91bd4f3be14c20df4ba6", + "bytes": 23538 + }, + { + "path": "rust/bridge/tests/golden/attach_script.json", + "sha256": "506b21ab31ebe8a7a948056bed532186decefabe220e739d1d96894f3caf5495", + "bytes": 3896 + }, + { + "path": "rust/bridge/tests/golden/epg_script.json", + "sha256": "748f7b1c161cdf663cdec3e720714fec0d3757819d96b645b38e3ac5dbbe338c", + "bytes": 44275 + }, + { + "path": "rust/bridge/tests/golden/make3d_script.json", + "sha256": "80ff2d73c9a7c88e5170935d292a8475ef963e324957200c6764b8342356d1c2", + "bytes": 12563 + }, + { + "path": "rust/bridge/tests/golden/mtp.json", + "sha256": "1d61ddf58ff5d121f878cb3304101ff328fb1e219d99652894b34ec2e172fe35", + "bytes": 108747 + }, + { + "path": "rust/core/Cargo.toml", + "sha256": "317c07a50b175ae3fd3ac9ee82065568738e3e84fbe647612c109ecd7ba076dd", + "bytes": 463 + }, + { + "path": "rust/core/src/ab.rs", + "sha256": "f71893214420b66fa75abce0c1ebaeb763fa26b191c6d420abae6201acd0c943", + "bytes": 5197 + }, + { + "path": "rust/core/src/alerts.rs", + "sha256": "e51914d3c4a8122762a45c0ee825f0459ba4197488b319fb755a4170c405b593", + "bytes": 4211 + }, + { + "path": "rust/core/src/aps.rs", + "sha256": "a5bb2860aa8a2b155f41280e8abb1cb8a01fcc50379b1c964f032816d3a2c4fa", + "bytes": 28053 + }, + { + "path": "rust/core/src/contract.rs", + "sha256": "69ca49c4469c323887efecb10333b51ad9f6813fc450422c155f9983238acd26", + "bytes": 1051 + }, + { + "path": "rust/core/src/dialog_rules.json", + "sha256": "05c015e80ee38b68d3a0330d34327cacd294d8f0e235dba1a21d2999c6091784", + "bytes": 9702 + }, + { + "path": "rust/core/src/dialogs.rs", + "sha256": "f956a82345726bc2e50e8b11780a36326f86ae7e930aa79869314fe5b9282d46", + "bytes": 6432 + }, + { + "path": "rust/core/src/host.rs", + "sha256": "7183e1cb5e3fc00d2f1c0b98446612de77a397bc77adcb677822131df36d3943", + "bytes": 5973 + }, + { + "path": "rust/core/src/lib.rs", + "sha256": "4897c959c4bc61a118d4039f2550c7ea365a839e6d537a3f041f26ad6bb41662", + "bytes": 760 + }, + { + "path": "rust/core/src/readiness.rs", + "sha256": "0e89546a8411645e880e27e22d113bebbe04d2a61e019738b82b3ff215737e2d", + "bytes": 15240 + }, + { + "path": "rust/core/src/readiness_hints.json", + "sha256": "c9825ddc2cace06e73c414e2117748f0b49754b240eee0f69a37705034bff867", + "bytes": 6390 + }, + { + "path": "rust/core/src/windows_facts.rs", + "sha256": "12a76a7a56ff7b28cd229bf93628e836deb6d804177b2d65c3545e8793c28013", + "bytes": 8219 + }, + { + "path": "rust/core/tests/alerts_golden.rs", + "sha256": "286b72406009bf3041954c2e4e0becf6bb1c71b30b7458a6251e47ff067e503c", + "bytes": 903 + }, + { + "path": "rust/core/tests/dialogs_golden.rs", + "sha256": "15247100daca1c2cb70d0d434998934191e0fa0d317d92ab3ef53593a011c850", + "bytes": 437 + }, + { + "path": "rust/core/tests/golden/alerts.json", + "sha256": "87a0f799497e63ad1e3ae36c469dcd667cd41bec79d8c733cf391746bae59ffc", + "bytes": 1400 + }, + { + "path": "rust/core/tests/golden/dialog_titles.json", + "sha256": "ca164599b90d6d3b800c232bf9105e10130a5d35c92a93428e3ab63a2f668076", + "bytes": 9056 + }, + { + "path": "rust/core/tests/golden/readiness.json", + "sha256": "2475846c8c047d78dc72d4770f2b1ef4d6b755907576b217c4ad507e8c6df98d", + "bytes": 25147 + }, + { + "path": "rust/core/tests/readiness_golden.rs", + "sha256": "092afc32a81098c2cd8267b827751606a34794be6358fe7c7c3b2a6860a19359", + "bytes": 3195 + }, + { + "path": "rust/lbr/Cargo.toml", + "sha256": "9e943260ba115865f6c734e12a4088a0474963615ad3138b5631513f5336feb0", + "bytes": 502 + }, + { + "path": "rust/lbr/src/lib.rs", + "sha256": "c23a1c6aa81c95ae24d76e2d1bcb5c3d8ca9321a0d11069987d7758f3135c676", + "bytes": 57938 + }, + { + "path": "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbr", + "sha256": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "bytes": 7565 + }, + { + "path": "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbrx", + "sha256": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "bytes": 7565 + }, + { + "path": "rust/lbr/tests/fixtures/CH340G.lbr", + "sha256": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "bytes": 9776 + }, + { + "path": "rust/lbr/tests/fixtures/CH340G.lbrx", + "sha256": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "bytes": 9776 + }, + { + "path": "rust/lbr/tests/fixtures/Demo_Board.bundle.zip", + "sha256": "ad7d754bebdae8e46ee67de4901373b2114c87ad4356da44b6601a38d5c0721f", + "bytes": 354656 + }, + { + "path": "rust/lbr/tests/fixtures/Demo_Board.lbr", + "sha256": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "bytes": 47513 + }, + { + "path": "rust/lbr/tests/fixtures/Demo_Board.lbrx", + "sha256": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "bytes": 47513 + }, + { + "path": "rust/lbr/tests/fixtures/IN-S63BTG.lbr", + "sha256": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "bytes": 7259 + }, + { + "path": "rust/lbr/tests/fixtures/IN-S63BTG.lbrx", + "sha256": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "bytes": 7259 + }, + { + "path": "rust/lbr/tests/fixtures/LAN7800.lbr", + "sha256": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "bytes": 18585 + }, + { + "path": "rust/lbr/tests/fixtures/LAN7800.lbrx", + "sha256": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "bytes": 18585 + }, + { + "path": "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbr", + "sha256": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "bytes": 20255 + }, + { + "path": "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbrx", + "sha256": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "bytes": 20255 + }, + { + "path": "rust/lbr/tests/fixtures/syn_deadconnect.lbr", + "sha256": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "bytes": 9781 + }, + { + "path": "rust/lbr/tests/fixtures/syn_deadconnect.lbrx", + "sha256": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "bytes": 9781 + }, + { + "path": "rust/lbr/tests/fixtures/syn_duppad.lbr", + "sha256": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "bytes": 9776 + }, + { + "path": "rust/lbr/tests/fixtures/syn_duppad.lbrx", + "sha256": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "bytes": 9776 + }, + { + "path": "rust/lbr/tests/fixtures/syn_noteagle.lbr", + "sha256": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "bytes": 348 + }, + { + "path": "rust/lbr/tests/fixtures/syn_noteagle.lbrx", + "sha256": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "bytes": 348 + }, + { + "path": "rust/lbr/tests/fixtures/syn_truncated.lbr", + "sha256": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "bytes": 77 + }, + { + "path": "rust/lbr/tests/fixtures/syn_truncated.lbrx", + "sha256": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "bytes": 77 + }, + { + "path": "rust/lbr/tests/fixtures/zipslip.zip", + "sha256": "62789c0c18ec56ea3a7ae6c6dcceff94581ea5a3f4a7d250229820fc44fb1657", + "bytes": 128 + }, + { + "path": "rust/lbr/tests/golden/ABM8-16.000MHZ-B2-T.json", + "sha256": "59f0a1eb337db1aecd9bd4438c29fa39ff50fc3829e9fc34f8e8b09f1dd6e75d", + "bytes": 300 + }, + { + "path": "rust/lbr/tests/golden/CH340G.json", + "sha256": "a6ab7cc05ec4ef537a499dc844857bbd0b4fbcb693d42f60be2755efa47d7412", + "bytes": 223 + }, + { + "path": "rust/lbr/tests/golden/Demo_Board.bound3.lbr", + "sha256": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "bytes": 48741 + }, + { + "path": "rust/lbr/tests/golden/Demo_Board.bound3.lbrx", + "sha256": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "bytes": 48741 + }, + { + "path": "rust/lbr/tests/golden/Demo_Board.bound5.lbr", + "sha256": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "bytes": 49544 + }, + { + "path": "rust/lbr/tests/golden/Demo_Board.bound5.lbrx", + "sha256": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "bytes": 49544 + }, + { + "path": "rust/lbr/tests/golden/Demo_Board.bound5again.lbr", + "sha256": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "bytes": 49545 + }, + { + "path": "rust/lbr/tests/golden/Demo_Board.bound5again.lbrx", + "sha256": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "bytes": 49545 + }, + { + "path": "rust/lbr/tests/golden/Demo_Board.json", + "sha256": "f5250ac9d4e1761ea2a37f99437dbb431d90011863bbdc3793cddd586334f900", + "bytes": 845 + }, + { + "path": "rust/lbr/tests/golden/Demo_Board.metadata.json", + "sha256": "f77498a63f5c99f5e228dbc6d5d27d32ffbbdb0fc385f3e6f423812105eefd1a", + "bytes": 2024 + }, + { + "path": "rust/lbr/tests/golden/IN-S63BTG.json", + "sha256": "2c9695c52cb73609c8c11af135609746a25f903b556e45dbb1b2bffcde031cda", + "bytes": 206 + }, + { + "path": "rust/lbr/tests/golden/LAN7800.json", + "sha256": "400187b6fa0d2c2a55a1fc166f45be48fd1e1716910f97c15bc86ee3ca29ba9f", + "bytes": 202 + }, + { + "path": "rust/lbr/tests/golden/STM32L431RCT6TR.json", + "sha256": "a4abd1bc6e0d9e22ecb3bb05b188a0df3dcd3acfe645c00c3c0ffdf394526212", + "bytes": 262 + }, + { + "path": "rust/lbr/tests/golden/bundle_files.json", + "sha256": "e9ce9c1fcc880aebdfd9ca91cd3c489fca0c44a109f594d6d71535e24e98b02d", + "bytes": 598 + }, + { + "path": "rust/lbr/tests/golden/inject_bindings.json", + "sha256": "70f08781980c5b3932154f4e05bde9527b8519e57cb79fb625e650d91e428680", + "bytes": 567 + }, + { + "path": "rust/lbr/tests/golden/pair_parts.json", + "sha256": "269217c7b343b934c49668fd3cf31ca26124759198df05971d195c5eff2f7fc5", + "bytes": 7912 + }, + { + "path": "rust/lbr/tests/golden/preflight_and_parts.json", + "sha256": "3fab24b531175c303933c303550bbb36b1a4fac84631e8e136cc5bf5c3d7f4fc", + "bytes": 61036 + }, + { + "path": "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbr", + "sha256": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "bytes": 7607 + }, + { + "path": "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbrx", + "sha256": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "bytes": 7607 + }, + { + "path": "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbr", + "sha256": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "bytes": 7607 + }, + { + "path": "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbrx", + "sha256": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "bytes": 7607 + }, + { + "path": "rust/lbr/tests/golden/split/CH340G.lbr", + "sha256": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "bytes": 9852 + }, + { + "path": "rust/lbr/tests/golden/split/CH340G.lbrx", + "sha256": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "bytes": 9852 + }, + { + "path": "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbr", + "sha256": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "bytes": 9852 + }, + { + "path": "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbrx", + "sha256": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "bytes": 9852 + }, + { + "path": "rust/lbr/tests/golden/split/IN-S63BTG.lbr", + "sha256": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "bytes": 7312 + }, + { + "path": "rust/lbr/tests/golden/split/IN-S63BTG.lbrx", + "sha256": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "bytes": 7312 + }, + { + "path": "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbr", + "sha256": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "bytes": 7312 + }, + { + "path": "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbrx", + "sha256": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "bytes": 7312 + }, + { + "path": "rust/lbr/tests/golden/split/LAN7800.lbr", + "sha256": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "bytes": 18724 + }, + { + "path": "rust/lbr/tests/golden/split/LAN7800.lbrx", + "sha256": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "bytes": 18724 + }, + { + "path": "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbr", + "sha256": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "bytes": 18724 + }, + { + "path": "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbrx", + "sha256": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "bytes": 18724 + }, + { + "path": "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbr", + "sha256": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "bytes": 20500 + }, + { + "path": "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbrx", + "sha256": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "bytes": 20500 + }, + { + "path": "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbr", + "sha256": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "bytes": 20500 + }, + { + "path": "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbrx", + "sha256": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "bytes": 20500 + }, + { + "path": "rust/lbr/tests/golden/split/index.json", + "sha256": "a21429c3d77845998f97a2233394e1756ed99a1ca1b24d19a2fee2a156d0b362", + "bytes": 1942 + }, + { + "path": "rust/lbr/tests/golden.rs", + "sha256": "02df17a9be23b9727e1732f4b5079c23910b2fbfd45dbeaa8b07636c23a306cf", + "bytes": 10582 + }, + { + "path": "rust/os-mac/Cargo.toml", + "sha256": "864f9685ed5bb133c51c7fb979ab03175c6310f7a74db761e024b7635aa10851", + "bytes": 307 + }, + { + "path": "rust/os-mac/src/lib.rs", + "sha256": "d0840cfd26262792ed9318b73df071eb523f7d19ffb72277ccc3ba1ba47263a4", + "bytes": 1334 + }, + { + "path": "rust/os-win/Cargo.toml", + "sha256": "1dbd93b057c4ac2a895a0b2dc2636c19330248854f3a8bde8922d27011b01f45", + "bytes": 692 + }, + { + "path": "rust/os-win/src/lib.rs", + "sha256": "4461931dbe8899dfc8ccc1e80e557cdb7eefbc4e584d4dbe743a31b507f1682b", + "bytes": 29982 + }, + { + "path": "schematics.md", + "sha256": "42bfe500374aefc3dafb0889c3fbbbbf8348fd8b8b2d9f63385287d861da6e04", + "bytes": 3498 + }, + { + "path": "screenshots/architecture.svg", + "sha256": "2319edc086627189e7fd623af8088488c0c5888a9144653b0b554acfe3afe498", + "bytes": 6537 + }, + { + "path": "screenshots/dialog-active-sessions.png", + "sha256": "b474a67d746993e44f40067de54d4270a3477c3c4dea668bd11496cff760bbcc", + "bytes": 35796 + }, + { + "path": "screenshots/epg-0603-103.png", + "sha256": "e6381163177f748434a0a32cf322736a15d6e2f539460e65aa26a4e2986ec31e", + "bytes": 184015 + }, + { + "path": "screenshots/epg-2line-margins.png", + "sha256": "9b98a5e08c32ff5559a7e25822b6a640339ba11fee9a85aea414fb34e3c52a5f", + "bytes": 203913 + }, + { + "path": "screenshots/epg-soic8-lm358-white.png", + "sha256": "862a66046fae1bb6c6fc569af25739907ee8a829dd5f5cba850954ec072fae31", + "bytes": 190679 + }, + { + "path": "screenshots/hero.png", + "sha256": "2ef70acf69d93f208122cd7289abca851fa68e218ea45556412e185015624e6b", + "bytes": 1478470 + }, + { + "path": "screenshots/lib2-12part-library.png", + "sha256": "af749971837de7ad7cf18343e64fa37eca662d491e7c33d8171604bc2ecfa28d", + "bytes": 274394 + }, + { + "path": "screenshots/lib2-atsamd-chip.png", + "sha256": "0660d1fd895326ae1da6446820b7f92716c261192d23b9d18187466206b7eff3", + "bytes": 313921 + }, + { + "path": "screenshots/lib2-component.png", + "sha256": "dd587f5a9ea77b10f81a59368f797d80d366fa18518fc413095e21820dc3b35c", + "bytes": 462542 + }, + { + "path": "screenshots/lib2-esp32-chip.png", + "sha256": "198ea6fe17fe1aecf2b5112fe1ca98df5797097b5872ff5750fe940b10bc97c9", + "bytes": 270223 + }, + { + "path": "screenshots/lib2-esp32-footprint.png", + "sha256": "373faee1eaa94ac6072efc65ef16ef6980e7517217bbb4b20f3913d770d75858", + "bytes": 216198 + }, + { + "path": "screenshots/lib2-footprint-editor.png", + "sha256": "1806c11b6ef733c97197de37a02bb97bac397bef38fe3c52073ebed4993e3b1f", + "bytes": 392172 + }, + { + "path": "screenshots/lib2-symbol.png", + "sha256": "7080c0e3d83df063510c3bb719d519b7b4444644cdec7f5c99a3527395235ef4", + "bytes": 428704 + }, + { + "path": "screenshots/lib3-138-overview.png", + "sha256": "d57b8001e818f46d864bd310e222b06d7370f9c4e8c904ee542ab539604c1205", + "bytes": 324949 + }, + { + "path": "screenshots/lib3-cap-3d.png", + "sha256": "c35057f717be98d9b7ecb681c3ce8c9f7a0d0337d880abb45fef9800210263a3", + "bytes": 210383 + }, + { + "path": "screenshots/lib3-resistor-3d.png", + "sha256": "2be448bb8d22bb2d651ac083f3d1e6118c577b5ba1122dca99a55c362ce7800c", + "bytes": 190100 + }, + { + "path": "screenshots/library-manager-138.png", + "sha256": "9046970a1320bb013a658ffce6faed97bddfa2420ece352f5ab08816aab68457", + "bytes": 165444 + }, + { + "path": "screenshots/readme-2d-board.png", + "sha256": "dbcaba565c5592aacbffb0dc3aa90295b4e59657b9efa5c2955a691da0b2dd09", + "bytes": 301134 + }, + { + "path": "screenshots/readme-3d-board.png", + "sha256": "a016303a131201b9d81de4a30c164d111707a806b96b7eb6daa1c80e63889465", + "bytes": 422940 + }, + { + "path": "screenshots/readme-find-open.png", + "sha256": "e6034889238ed48db87c3ed0c884964f92b3c07b98fbbc86117b15a9875cb0b2", + "bytes": 255859 + }, + { + "path": "screenshots/readme-lbr.png", + "sha256": "8cacd05b8203385cfd860891c97dd95e3f86fc70ec269a385eed03c8815ac900", + "bytes": 353184 + }, + { + "path": "screenshots/readme-modeling.png", + "sha256": "df5d00fa96b459769a4d14bec77fcfc6f443f6b2d6761cad4dd06f4017092c89", + "bytes": 212917 + }, + { + "path": "screenshots/readme-schematic.png", + "sha256": "dee058e3e9d26eeb722dbbb0db76ccd2f1837b7c35dcabe1e15a457e326613f8", + "bytes": 251207 + }, + { + "path": "screenshots/showcase.png", + "sha256": "11cde4adde541a3473b8ee74520a924d9fae03140c0039b6a80eff164dc3e9ed", + "bytes": 461091 + }, + { + "path": "server.py", + "sha256": "c077d9c162e5b170365c5735b69e38995724b0443b4aedc6af9f802ee5539870", + "bytes": 997521 + }, + { + "path": "sign-in-and-updates.md", + "sha256": "245688ceba2eeea85ebbd004256e2f9e7627f1b94b9f1b12ef023ee276ff0380", + "bytes": 5394 + }, + { + "path": "skills/fusion-aps-org-setup/SKILL.md", + "sha256": "61b8c82788147745e64470e45fbf8e672a1b5fab0d33eeb3cca0a5d476f3199e", + "bytes": 5351 + }, + { + "path": "skills/fusion-aps-search/SKILL.md", + "sha256": "8dd58b025963b45230ae45b51a67f98b243cb797cfd914e9f5f4bf205bee3883", + "bytes": 10586 + }, + { + "path": "skills/fusion-aps-signin/SKILL.md", + "sha256": "b6b1d0b6b30df79968f01541fefee6a5283a0a7d933744e563d675d9379a3cfd", + "bytes": 25352 + }, + { + "path": "skills/fusion-autodesk-signin/SKILL.md", + "sha256": "18259c66a9c3fb23dbbeec1bf479c21cc30f1a42fc1191de5b6b1470b4f52d45", + "bytes": 10403 + }, + { + "path": "skills/fusion-board-from-netlist/SKILL.md", + "sha256": "a52d6cf62f91ce2faf749d764830cdcae334ce187714f9e4bd6a83aaeb3f4f5d", + "bytes": 5870 + }, + { + "path": "skills/fusion-bridge-dev/SKILL.md", + "sha256": "870d9037cba5b7be28e56f65ab120de0dcc4797642dbb3a3e5b9852f013e2817", + "bytes": 27123 + }, + { + "path": "skills/fusion-build-parts-library/SKILL.md", + "sha256": "07700a4852237796869d8f3b10a17c3003b0fec98c0c9dd6e022bcd56bc3a5c6", + "bytes": 7705 + }, + { + "path": "skills/fusion-cloud-hygiene/SKILL.md", + "sha256": "0243c18dba9ecc0923f4779d2a2991f4c977e9fb8a426c857cb01c18e60d76d8", + "bytes": 4981 + }, + { + "path": "skills/fusion-cloud-library-import/SKILL.md", + "sha256": "3de0c95dd5bf81d207fc58524eb2f2f78d3a93ddcc3bd0e11e452933afd67e91", + "bytes": 8339 + }, + { + "path": "skills/fusion-cloud-save/SKILL.md", + "sha256": "f3cbc90c0d6861fe9ce5421016afb010b010a3379c386fa57ebee3a7d4643a87", + "bytes": 6357 + }, + { + "path": "skills/fusion-contributing/SKILL.md", + "sha256": "68cc910b2f4b9d3f68e127565f3c826a677cec08bb175474d1470d6d49f1e038", + "bytes": 7286 + }, + { + "path": "skills/fusion-dark-mode/SKILL.md", + "sha256": "b784702c7c54d47fb4583a5d6e29c971670756d7db8dc2088420000fdfbb7aa6", + "bytes": 5144 + }, + { + "path": "skills/fusion-dashboard/SKILL.md", + "sha256": "e8164bbd33d722e107843fa3fac37a349b48d75425a73e2e6aaf98bb766dc442", + "bytes": 3592 + }, + { + "path": "skills/fusion-demo/SKILL.md", + "sha256": "28d19179209271ae3892512c508d33b02a21968f2b874fb8f27479ac92345797", + "bytes": 14834 + }, + { + "path": "skills/fusion-driving/SKILL.md", + "sha256": "d044e5df509131479179f7551194833408e68c9ef4cca8215b476ca620e946f2", + "bytes": 21232 + }, + { + "path": "skills/fusion-eagle-commands/SKILL.md", + "sha256": "34475f68a1f04155de5b5a267d15b657314d7fd3714f8e12488c4f8f26a4e242", + "bytes": 7423 + }, + { + "path": "skills/fusion-electronics/SKILL.md", + "sha256": "7b4b2b5d9e4a0cdb46a2d74b29a45b6bb4a984f92348d60309c8e6aa3a5ca1a7", + "bytes": 12512 + }, + { + "path": "skills/fusion-file-search/SKILL.md", + "sha256": "a2d82fd586835934bbb8634be70a9a671bb0f5241f2251e200a827b9f96446d1", + "bytes": 18097 + }, + { + "path": "skills/fusion-libraries/LIBRARY_FINDINGS.md", + "sha256": "344641aeca44f0f315999be0c3d9d66a6f84c67e79fcb7fec912e93e4311b38e", + "bytes": 14002 + }, + { + "path": "skills/fusion-libraries/MAKING_LIBRARIES.md", + "sha256": "416f37b4945500f73c72a6eb9e5035e422c9d0c3e685d2a80d2caef014c3ecec", + "bytes": 10095 + }, + { + "path": "skills/fusion-libraries/SKILL.md", + "sha256": "44f76c0833c0f9973e48a2028812ae086de715624f9bdb691c4c1ec7c4addd28", + "bytes": 12088 + }, + { + "path": "skills/fusion-license-seat/SKILL.md", + "sha256": "5ea699aa486a2197833692389ee143697bad082fae4d6f575dbd9ceb3281b5e2", + "bytes": 5938 + }, + { + "path": "skills/fusion-managed-libraries/SKILL.md", + "sha256": "8545410fbe124c5ea1ef70469e333f2ed3ccf23cc0c0be65df34636813d58167", + "bytes": 7399 + }, + { + "path": "skills/fusion-mcp-and-preferences/SKILL.md", + "sha256": "2936cc7365e7288c0f1e3b7cb886921be0c9aefb50503307d0bf1fd673cb96ea", + "bytes": 6220 + }, + { + "path": "skills/fusion-molecule-export/SKILL.md", + "sha256": "89f109c0b4c4bdebb3e6fc8936a4a04f21a6e392239a91974c478493036d3a03", + "bytes": 9428 + }, + { + "path": "skills/fusion-multipart-libraries/CREATING_BASIC_PARTS_LIBRARIES.md", + "sha256": "d298f5b0b23f967d7daf78b85a8fbb83773cd2fcdb791d328e740022440c4d32", + "bytes": 10437 + }, + { + "path": "skills/fusion-multipart-libraries/SKILL.md", + "sha256": "ce58b55d98fe2631c1cd133af7103d269c407d1c50d0f49f8e3a2233b57a305c", + "bytes": 20468 + }, + { + "path": "skills/fusion-multiprofile-signin/SKILL.md", + "sha256": "856f5829219379f83c1a617e0b4413b7138a8efc8082667b64dc583bf5f08c06", + "bytes": 17017 + }, + { + "path": "skills/fusion-no-modal-dialogs/SKILL.md", + "sha256": "045356656b4f55ddd55bf232c06713bed25143f4c802ef56f64307da7bb72a99", + "bytes": 12291 + }, + { + "path": "skills/fusion-onboarding/SKILL.md", + "sha256": "ef0217e8bc29c6af69ffab1d3de5b404b89cd852a865cd1167841cd21ae3707b", + "bytes": 11885 + }, + { + "path": "skills/fusion-part-metadata/SKILL.md", + "sha256": "84a1608d2250fb423a73e77ba8e91e4f622b535136b2ba2e5eea24bdddd6ba5f", + "bytes": 8689 + }, + { + "path": "skills/fusion-publishable-lbr/SKILL.md", + "sha256": "c2a8086d5dcfe86e763c315299f0a9baa6f825841a6395bc26b39bc52a94f13f", + "bytes": 8089 + }, + { + "path": "skills/fusion-publishable-lbr/genscript.sh", + "sha256": "d0221a87ea0d37095a56e6cbed270181d6763b5cbaf2ec1d83260b364e265aff", + "bytes": 482 + }, + { + "path": "skills/fusion-publishable-lbr/lbrgate.py", + "sha256": "60b7cd3b8a9bd1b453361b567e703e2d58b741f1b775ee00981a01fcc673fb1c", + "bytes": 2643 + }, + { + "path": "skills/fusion-ralph-test-via-wiki/SKILL.md", + "sha256": "ce98d97b2d0d307bac30c33f72c7e699e1bed4bf119247bbab0fdd953fffad88", + "bytes": 9621 + }, + { + "path": "skills/fusion-routing/SKILL.md", + "sha256": "8a1425226203736fee8a6ad9cca0e2e24425288784052b4cf85e8c353612750b", + "bytes": 6461 + }, + { + "path": "skills/fusion-routing/references/copper-thermal.md", + "sha256": "7e3a6b3934a29dca7697c3840950938107dad3c5181d16388b2015410ab70d0b", + "bytes": 3591 + }, + { + "path": "skills/fusion-routing/references/electrical-priorities.md", + "sha256": "80d33b837e7d6177b0493d15b678fb8219c935ea66f38869ebecb2f465f054f9", + "bytes": 2318 + }, + { + "path": "skills/fusion-web-control/SKILL.md", + "sha256": "9cb22f788e67a1f1338f5359484aab55f5b63261a03933acde47f786162361a7", + "bytes": 17497 + }, + { + "path": "skills/fusion-web-export/SKILL.md", + "sha256": "812622a08c72ed5e4622fa3f0661dac3db9bfd3d0d4a02994d0133a7db5206f9", + "bytes": 7210 + }, + { + "path": "skills/fusion-web-signin/SKILL.md", + "sha256": "eb3713a21abd6f542463b7b232bc8683136077fad5b5a3fb15ab224de3b71b26", + "bytes": 4356 + }, + { + "path": "skills/pcb-stackup/SKILL.md", + "sha256": "14cac0ec8ebb57e2012a5335a7f9e259e16d143e79de36c59fdd9399968c9ceb", + "bytes": 9027 + }, + { + "path": "start.bat", + "sha256": "34bbe2dec678d02f4dbae1e1b983336febad561a9d5e1d440ba861cd77ac46ba", + "bytes": 129 + }, + { + "path": "step-colorize-after.png", + "sha256": "83b61d34340ae3104c4425ca65e5971363d8239a56807d9af882bb36e08e0d71", + "bytes": 176805 + }, + { + "path": "step-colorize-before.png", + "sha256": "1adea907dcc3fd4889680be0f9969d106ef63af2b100ff00c6c51dadbbd92163", + "bytes": 190283 + }, + { + "path": "tests/daily_verb_cron.sh", + "sha256": "6c94a5bc0d157a91e1363eda40b62895a05d9e1b75667e66e1d02a8d63adcb4e", + "bytes": 1660 + }, + { + "path": "tests/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2", + "bytes": 28903 + }, + { + "path": "tests/job_acceptance/busy/CONTRACT.md", + "sha256": "9e80e786ef63b88782188c0fde43cec476849204b279ad7a5613155c078eecc9", + "bytes": 3126 + }, + { + "path": "tests/job_acceptance/busy/README.md", + "sha256": "84ab99f27c756e6e609548c246dd0dbcba03670ffdb5bc40a029b0b7f0c68666", + "bytes": 5531 + }, + { + "path": "tests/job_acceptance/busy/adjudicate_saved.py", + "sha256": "d97f1e44e99b14bacecfbb52cc4bc5a1d747d9b9c1f7a306f2f29258f8608221", + "bytes": 7197 + }, + { + "path": "tests/job_acceptance/busy/busy_status.py", + "sha256": "3cdb4ccf2b326bdd940e209f8254fe773d084cc4ba77933a5651701d03b0f236", + "bytes": 28125 + }, + { + "path": "tests/job_acceptance/busy/manifest.json", + "sha256": "fc778a3e3ccbe4494d37155047ccfe4e983977ff1303a612a034b810e67b6b5f", + "bytes": 1226 + }, + { + "path": "tests/job_acceptance/busy/test_busy_status.py", + "sha256": "28241f5ae8733dd4e3d24a6a4edcd80ec6f0ed894348ac387508355bc6a2c514", + "bytes": 18496 + }, + { + "path": "tests/job_acceptance/history/CONTRACT.md", + "sha256": "304babc725f467d5fb11364f0bfa21d3468617e9ddb4f26ab0ff15f920e11e22", + "bytes": 8455 + }, + { + "path": "tests/job_acceptance/history/history_acceptance.py", + "sha256": "3be02c0f7ee3986e1ade0cb4e920822ca3315983afcf0f6019c9098c54221b9d", + "bytes": 12226 + }, + { + "path": "tests/job_acceptance/history/manifest.json", + "sha256": "0f072df1a6b811f43155699d195f5bdb0f566a08b13d2cebc132ad31cd50fc8c", + "bytes": 1841 + }, + { + "path": "tests/job_acceptance/history/test_history_acceptance.py", + "sha256": "108d4f43d5bccea7fbaafdd9364b1ff87489f4c8bbf658495cde3185dcab16db", + "bytes": 8725 + }, + { + "path": "tests/ralph_assemblies.py", + "sha256": "9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903", + "bytes": 63549 + }, + { + "path": "tests/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "bytes": 42960 + }, + { + "path": "tests/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f", + "bytes": 17361 + }, + { + "path": "tests/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "bytes": 39936 + }, + { + "path": "tests/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "bytes": 25311 + }, + { + "path": "tests/run_verb_tests.py", + "sha256": "2523a0f5612672be8d8310c92e58d02e9382adc107271cc7feef5763a7631b43", + "bytes": 39185 + }, + { + "path": "tests/test_addin_lifecycle.py", + "sha256": "25511747a47c2062ed569798adfbb62795b386572058a4f9ea0980d616896b03", + "bytes": 16544 + }, + { + "path": "tests/test_bridge_contracts.py", + "sha256": "152cd0e20016c4a8a02769527161971b507ee814d1427db096efa23a06dd0143", + "bytes": 7511 + }, + { + "path": "tests/test_document_hygiene.py", + "sha256": "650eea3f8a1d577a90c7e57016188b0c812415f48f9ad8948f1f94a17fdbad13", + "bytes": 1734 + }, + { + "path": "tests/test_fusion_harness.py", + "sha256": "42d9f33cb6359296712ed8aeb43f1d290cf4269dc07d6a9668dde1588e534de2", + "bytes": 33740 + }, + { + "path": "tests/test_http_server.py", + "sha256": "2a4da041d350600ff4e0736a03a4cbde816c2d2074e92163203b2fa89c51827c", + "bytes": 13580 + }, + { + "path": "tests/test_live_feed_drain.py", + "sha256": "76a838eaec5314e6498357b02d4df65e67c4508abb7712cb867e398eb90952b2", + "bytes": 9618 + }, + { + "path": "tests/test_mechanical.py", + "sha256": "4abb8cc9d2f0ba2e6e0541ee87b84299a580446476e5fd1a8b63ddb286189246", + "bytes": 16171 + }, + { + "path": "tests/test_mechanical_assemblies.py", + "sha256": "1f9c6bb003eedb01f9012e331f81a5b88504c5468f0b31bba0b489b8ad670fc9", + "bytes": 30696 + }, + { + "path": "tests/test_mechanical_configurations.py", + "sha256": "8dede467568a1b9f284c00acda9c6c8429f7da26f618dae4cea18003c5a58eb5", + "bytes": 26101 + }, + { + "path": "tests/test_mechanical_everyday.py", + "sha256": "f7e3d1eddd953c86b5f85c9a6d1788085df4968f02c89383c1addf0b06208d32", + "bytes": 19209 + }, + { + "path": "tests/test_mechanical_regular_joints.py", + "sha256": "7688bb79489ca7f3be92ff2b811da555dc29fe1f347d9751d4dd3119ae45dbb4", + "bytes": 34488 + }, + { + "path": "tests/test_mechanical_transactions.py", + "sha256": "ccf361720e2917d474a784e2cfd9c735bfb148ebf9d007d70b4463ae11e84622", + "bytes": 14136 + }, + { + "path": "tests/test_operation_dispatch.py", + "sha256": "19bb8c9dcb4856a10a502b2f4c342a3b40d2ca23327729aede523c23f3ff9eb7", + "bytes": 16186 + }, + { + "path": "tests/test_operation_history.py", + "sha256": "1d049c7cb2e4b965b153f80dead344eccf619094b5a5641c5de1731e665ba3f6", + "bytes": 15318 + }, + { + "path": "tests/test_operation_journal.py", + "sha256": "67e39c879041a192295f6b94972a446d1b06bd9502c171cb4361ceb8d8917fb4", + "bytes": 12623 + }, + { + "path": "tests/test_operation_status_route.py", + "sha256": "7fe221d1a802a69a93624a4b8cbf33406e97d4123ec7399d4c8e84f0fa7bfc32", + "bytes": 5735 + }, + { + "path": "tests/test_portable_tree.py", + "sha256": "c0cef12a2355bbae33f056d4bf7d4af96e64652d0e86118d2da4232419e96b7a", + "bytes": 1852 + }, + { + "path": "tests/test_ralph_assemblies.py", + "sha256": "9ceaa35779f51e0c8b81d15e402301439664d867c73f4e8dd790bf9b28556283", + "bytes": 26324 + }, + { + "path": "tests/test_ralph_campaign.py", + "sha256": "132ce2f342305f71a4ae4473ffe8710967528bafd82b002f1fd29d4af940329a", + "bytes": 17238 + }, + { + "path": "tests/test_ralph_everyday.py", + "sha256": "20487252a3ab759e5236c71e22009a84cc7e80e4f9aa0af5d243e36e7ef60fb8", + "bytes": 8050 + }, + { + "path": "tests/test_ralph_jobs.py", + "sha256": "176f0b4e69b6c9766b1085a6922532220f9e5bfe85366daee1db213f8c2c9662", + "bytes": 13739 + }, + { + "path": "tests/test_routing.py", + "sha256": "be671c46a6a1474a39d2b1846fc76fb27796647cc430bcfc828f9c1957c0e52f", + "bytes": 7427 + }, + { + "path": "timings.py", + "sha256": "b17f946f88286358bcebf397d1467c00010cc3626411a40b7ccfb6522dae425a", + "bytes": 12160 + }, + { + "path": "tools/abrun.py", + "sha256": "5e7a7cd09a3c18c88b912bee5fba3afe77a92aaaa70ace0f52f973f7bb6a4801", + "bytes": 1969 + }, + { + "path": "tools/adrun.py", + "sha256": "ed088ab89f82e13c355f1c60316e5d96e4df3971e998bdeee037a87bee9474ef", + "bytes": 1969 + }, + { + "path": "tools/check-bridge.py", + "sha256": "cb15bef8cbc3d4252a3d656a5484e7459ff340edce171f0489c62baa2212b72b", + "bytes": 8270 + }, + { + "path": "tools/check-naming.sh", + "sha256": "38b4c22c8af31127e5d20b6c24f56cb8000ed6c825a2eda0efc8058952140ebd", + "bytes": 522 + }, + { + "path": "tools/check-portable.sh", + "sha256": "a637d7db4e6dd1948029dd32ac657f3dff48ba31d72af856100b51edf05f033f", + "bytes": 817 + }, + { + "path": "tools/check_portable_tree.py", + "sha256": "56dba86e9d779d8d94acd0db1967ad393b30455c40382c2bfd65e4029d19803d", + "bytes": 2580 + }, + { + "path": "tools/exe-only-flip.sh", + "sha256": "4b19223eb3b198d6ce672502b949634c061ed9f679ac88fbf1966403361d381e", + "bytes": 2634 + }, + { + "path": "tools/freeze-contract.py", + "sha256": "82f51090a79c57adf2f41c27229a860acdc75598aa4ead16893126cd7c848886", + "bytes": 2381 + }, + { + "path": "tools/gen-readme-verbs.py", + "sha256": "c56804ad5e17daef470849724017151956945acb4859fd0083aabd84dc09c45e", + "bytes": 6271 + }, + { + "path": "tools/install-mechanical-dev.ps1", + "sha256": "d6a6b456e65d2b9adffa7d2aaf53a82905bbd720868234bbc8e3ca848ccb3445", + "bytes": 3337 + }, + { + "path": "tools/install-routing-dev.ps1", + "sha256": "6b7aaf8f4e6bad49f1ea01f76e0684ee533ff93290dc0ce81cbf0174132ea3a4", + "bytes": 1240 + }, + { + "path": "tools/live_feed_drain.py", + "sha256": "5c4c383aa317f30f78ef4ee8059d6a5101b278cb3383a3fee90ccb65e35457dd", + "bytes": 11741 + }, + { + "path": "tools/package-mechanical-dev.py", + "sha256": "d8522a4fa8c9b48a93f6c50ebeb84e90fb840eed5d3c8e706fb5951a9aec6f3d", + "bytes": 2376 + }, + { + "path": "tools/promote.py", + "sha256": "d1eca1f21c0af7f085e8e6965f3417c1052bc25e2bff2624c59a851aa656ac09", + "bytes": 975 + }, + { + "path": "tools/promote.sh", + "sha256": "b2577eac39267f94ec6d810d6fee62b211a4cedea7d084e52c77d30b7c685bd5", + "bytes": 2021 + }, + { + "path": "tools/promotions.log", + "sha256": "7dd4a843cef7f86030b5995e5d764d338434cbeade87af2b00fa424e99ea5786", + "bytes": 954 + }, + { + "path": "tools/release-files.txt", + "sha256": "3a00cc7daf773883d68cd2facfd7d03118d835a9aeefdb0f1bb3cbeded5871e4", + "bytes": 3716 + }, + { + "path": "tools/release.sh", + "sha256": "d38172bebf6819c23d542a4f5325e20482c311a3be93231ba1b757d12f60981c", + "bytes": 25889 + }, + { + "path": "tools/rust-commit.sh", + "sha256": "c331c26bde94231b667924bbdabd3e56d1e975729cb7edf9eae8e5537a4151cf", + "bytes": 318 + }, + { + "path": "tools/rust-ship.sh", + "sha256": "1254e4950f1d76bed5e0a4aa81f0bc45a719acb73193cdab753ecf9e5cb8e093", + "bytes": 878 + }, + { + "path": "tools/shadow_check.py", + "sha256": "6cebf4f1e42cb3847360df8b83793bef4a5d36a7cec1bbb744d2e875c2b6919b", + "bytes": 2579 + }, + { + "path": "tools/video/compose.py", + "sha256": "bc5cd01a40598e9f4ba475ad0522141b3480172505a79eee62f50905601b9b3b", + "bytes": 4245 + }, + { + "path": "tools/video/spec-3d.json", + "sha256": "67eb00df3547eb94b40cbe638181c09ff40251f7bb2687af4a8273e81094436a", + "bytes": 3009 + }, + { + "path": "tools/video/spec-board.json", + "sha256": "76c085cdb94be385f91c7f0f69721f4660cd262eb35182a729f4bdd4e42d7904", + "bytes": 1694 + }, + { + "path": "tools/video/spec-modal.json", + "sha256": "577d2900c687a4799b544680a51e0879f8af88f27111836b80ceaf64b24b33e7", + "bytes": 1507 + }, + { + "path": "uninstall.sh", + "sha256": "a181a9fdd5b0ce4718160787ad0e5b935b98da961789022a864602cd3b9079d4", + "bytes": 357 + }, + { + "path": "verbs.png", + "sha256": "fe609ea32203fc53ea0aa1a2732970a5c15c22e753a948b646092993856fe4f7", + "bytes": 43114 + } + ] +} diff --git a/docs/integration-2026-10-06-evidence/gate-dashboard.log b/docs/integration-2026-10-06-evidence/gate-dashboard.log new file mode 100644 index 0000000..0f090ac --- /dev/null +++ b/docs/integration-2026-10-06-evidence/gate-dashboard.log @@ -0,0 +1,34 @@ + Compiling serde_core v1.0.229 + Compiling zmij v1.0.23 + Compiling serde_json v1.0.151 + Compiling memchr v2.8.3 + Compiling itoa v1.0.18 + Compiling fusion-dashboard v1.11.39 (/home/adom/project/fusion-pr10-current/dashboard) +warning: function `hy_get` is never used + --> src/main.rs:1494:4 + | +1494 | fn hy_get(path: &str) -> Option { + | ^^^^^^ + | + = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default + +warning: function `hy_post` is never used + --> src/main.rs:1502:4 + | +1502 | fn hy_post(path: &str, payload: &serde_json::Value) -> Option { + | ^^^^^^^ + +warning: function `current_port` is never used + --> src/main.rs:1515:4 + | +1515 | fn current_port() -> u16 { SERVING_PORT.load(std::sync::atomic::Ordering::Relaxed) } + | ^^^^^^^^^^^^ + +warning: `fusion-dashboard` (bin "fusion-dashboard" test) generated 3 warnings + Finished `test` profile [unoptimized + debuginfo] target(s) in 2.64s + Running unittests src/main.rs (target/debug/deps/fusion_dashboard-f076350d89bfbdc2) + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + diff --git a/docs/integration-2026-10-06-evidence/gate-portability.log b/docs/integration-2026-10-06-evidence/gate-portability.log new file mode 100644 index 0000000..4dc4b88 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/gate-portability.log @@ -0,0 +1,22 @@ +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets -> windows_aarch64_gnullvm +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets -> windows_aarch64_msvc +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets -> windows_i686_gnu +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets -> windows_i686_gnullvm +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets -> windows_i686_msvc +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets -> windows_x86_64_gnu +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets -> windows_x86_64_gnullvm +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> ring -> windows-sys -> windows-targets -> windows_x86_64_msvc +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets -> windows_aarch64_gnullvm +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets -> windows_aarch64_msvc +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets -> windows_i686_gnu +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets -> windows_i686_gnullvm +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets -> windows_i686_msvc +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets -> windows_x86_64_gnu +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets -> windows_x86_64_gnullvm +Reviewed portable TLS dependency: fusion-core -> ureq -> rustls -> rustls-webpki -> ring -> windows-sys -> windows-targets -> windows_x86_64_msvc +No unreviewed platform bindings +no todo!() in the linked crates diff --git a/docs/integration-2026-10-06-evidence/gate-python.log b/docs/integration-2026-10-06-evidence/gate-python.log new file mode 100644 index 0000000..539514b --- /dev/null +++ b/docs/integration-2026-10-06-evidence/gate-python.log @@ -0,0 +1,5 @@ +....................................................................................................................................................................................................................................................................................................................................................................................................................................................................... +---------------------------------------------------------------------- +Ran 455 tests in 11.671s + +OK diff --git a/docs/integration-2026-10-06-evidence/gate-rust.log b/docs/integration-2026-10-06-evidence/gate-rust.log new file mode 100644 index 0000000..f1758c6 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/gate-rust.log @@ -0,0 +1,344 @@ + Compiling proc-macro2 v1.0.107 + Compiling unicode-ident v1.0.24 + Compiling quote v1.0.47 + Compiling cfg-if v1.0.4 + Compiling stable_deref_trait v1.2.1 + Compiling simd-adler32 v0.3.10 + Compiling shlex v2.0.1 + Compiling find-msvc-tools v0.1.11 + Compiling crc32fast v1.5.1 + Compiling adler2 v2.0.1 + Compiling memchr v2.8.3 + Compiling serde_core v1.0.229 + Compiling log v0.4.34 + Compiling zmij v1.0.23 + Compiling writeable v0.6.4 + Compiling hashbrown v0.17.1 + Compiling equivalent v1.0.2 + Compiling litemap v0.8.3 + Compiling serde v1.0.229 + Compiling libc v0.2.189 + Compiling icu_normalizer_data v2.3.0 + Compiling utf8_iter v1.0.4 + Compiling icu_properties_data v2.3.0 + Compiling serde_json v1.0.151 + Compiling smallvec v1.16.0 + Compiling zeroize v1.9.0 + Compiling itoa v1.0.18 + Compiling cc v1.4.4 + Compiling miniz_oxide v0.9.1 + Compiling thiserror v1.0.69 + Compiling once_cell v1.21.4 + Compiling untrusted v0.9.0 + Compiling rustls v0.23.43 + Compiling percent-encoding v2.3.2 + Compiling subtle v2.6.1 + Compiling version_check v0.9.5 + Compiling rustls-pki-types v1.15.1 + Compiling base64 v0.22.1 + Compiling thiserror v2.0.20 + Compiling bumpalo v3.20.3 + Compiling regex-syntax v0.8.11 + Compiling form_urlencoded v1.2.2 + Compiling zerocopy v0.8.56 + Compiling zip v2.4.2 + Compiling typenum v1.20.1 + Compiling vcpkg v0.2.15 + Compiling pkg-config v0.3.34 + Compiling aho-corasick v1.1.5 + Compiling generic-array v0.14.7 + Compiling zopfli v0.8.3 + Compiling ahash v0.8.12 + Compiling roxmltree v0.20.0 + Compiling autocfg v1.5.1 + Compiling webpki-roots v1.0.9 + Compiling webpki-roots v0.26.11 + Compiling fdeflate v0.3.7 + Compiling miniz_oxide v0.8.9 + Compiling httpdate v1.0.3 + Compiling indexmap v2.14.1 + Compiling flate2 v1.1.10 + Compiling bitflags v1.3.2 + Compiling chunked_transfer v1.5.0 + Compiling cpufeatures v0.2.17 + Compiling ascii v1.1.0 + Compiling fallible-streaming-iterator v0.1.9 + Compiling fallible-iterator v0.3.0 + Compiling bitflags v2.13.1 + Compiling num-traits v0.2.19 + Compiling iana-time-zone v0.1.65 + Compiling syn v3.0.4 + Compiling syn v2.0.119 + Compiling tiny_http v0.12.0 + Compiling png v0.17.16 + Compiling ring v0.17.14 + Compiling libsqlite3-sys v0.30.1 + Compiling getrandom v0.2.17 + Compiling block-buffer v0.10.4 + Compiling crypto-common v0.1.7 + Compiling digest v0.10.7 + Compiling chrono v0.4.45 + Compiling sha2 v0.10.9 + Compiling regex-automata v0.4.18 + Compiling displaydoc v0.2.7 + Compiling zerovec-derive v0.11.6 + Compiling serde_derive v1.0.229 + Compiling thiserror-impl v2.0.20 + Compiling synstructure v0.13.2 + Compiling thiserror-impl v1.0.69 + Compiling zerofrom-derive v0.1.7 + Compiling yoke-derive v0.8.2 + Compiling zerofrom v0.1.8 + Compiling yoke v0.8.3 + Compiling zerovec v0.11.8 + Compiling zerotrie v0.2.5 + Compiling regex v1.13.1 + Compiling tinystr v0.8.4 + Compiling potential_utf v0.1.6 + Compiling rustls-webpki v0.103.15 + Compiling icu_collections v2.3.0 + Compiling hashbrown v0.14.5 + Compiling icu_locale_core v2.3.0 + Compiling hashlink v0.9.1 + Compiling icu_provider v2.3.1 + Compiling fusion-lbr v1.11.39 (/home/adom/project/fusion-pr10-current/rust/lbr) + Compiling icu_normalizer v2.3.0 + Compiling icu_properties v2.3.0 + Compiling idna_adapter v1.2.2 + Compiling idna v1.1.0 + Compiling url v2.5.8 + Compiling ureq v2.12.1 + Compiling fusion-core v1.11.39 (/home/adom/project/fusion-pr10-current/rust/core) + Compiling rusqlite v0.32.1 + Compiling fusion-os-mac v1.11.39 (/home/adom/project/fusion-pr10-current/rust/os-mac) + Compiling fusion-os-win v1.11.39 (/home/adom/project/fusion-pr10-current/rust/os-win) + Compiling adom-fusion-bridge v1.11.39 (/home/adom/project/fusion-pr10-current/rust/bridge) +warning: value assigned to `bound_urn` is never read + --> bridge/src/tour.rs:620:25 + | +620 | let mut bound_urn = String::new(); + | ^^^^^^^^^^^^^ this value is reassigned later and never used +... +687 | bound_urn = br["parts"][0]["wip_urn"].as_str().unwrap_or("").to_string(); + | --------- `bound_urn` is overwritten here before the previous value is read + | + = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default + +warning: unreachable pattern + --> bridge/src/tour.rs:941:9 + | +938 | ... "schematic" => vec![("zoom-in", z(2.2)), ("net sweep", json!({"action": "sweep", "path": [[0.40, 0.40], [0.50, 0.42], [0.60, ... + | ----------- matches all the relevant values +... +941 | ... "schematic" => { + | ^^^^^^^^^^^ no value can reach this + | + = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default + +warning: unreachable pattern + --> bridge/src/tour.rs:949:9 + | +939 | ... "board2d" => vec![("zoom-in", z(2.4)), ("copper sweep", json!({"action": "sweep", "path": [[0.42, 0.42], [0.50, 0.45], [0.58,... + | --------- matches all the relevant values +... +949 | ... "board2d" => { + | ^^^^^^^^^ no value can reach this + +warning: function `notify_info` is never used + --> bridge/src/lifecycle.rs:157:8 + | +157 | pub fn notify_info(ctx: &Ctx, title: &str, body: &str) -> bool { + | ^^^^^^^^^^^ + | + = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default + +warning: constant `BLOCKED_RESTART_AFTER_SECS` is never used + --> bridge/src/lifecycle.rs:167:7 + | +167 | const BLOCKED_RESTART_AFTER_SECS: f64 = 90.0; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ + +warning: function `now_secs` is never used + --> bridge/src/lifecycle.rs:169:4 + | +169 | fn now_secs() -> f64 { std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).map(|d| d.as_secs_f64()).unwrap_or(0.0) } + | ^^^^^^^^ + +warning: function `begin_blocked_restart` is never used + --> bridge/src/lifecycle.rs:174:4 + | +174 | fn begin_blocked_restart(ctx: &Ctx, blocking: &[Value], held: f64) -> bool { + | ^^^^^^^^^^^^^^^^^^^^^ + +warning: trait `TakeIfObject` is never used + --> bridge/src/signin.rs:110:7 + | +110 | trait TakeIfObject { fn take_if_object(self) -> Option; } + | ^^^^^^^^^^^^ + +warning: function `banner` is never used + --> bridge/src/tour.rs:138:4 + | +138 | fn banner(action: &str, title: &str, detail: &str, percent: Option) { + | ^^^^^^ + +warning: fields `pin_pts` and `pad_pts` are never read + --> bridge/src/tour.rs:520:114 + | +520 | ...ct Sample { lbr: String, step: Option, deviceset: String, package: String, pins: usize, pads: usize, pin_pts: Vec<(f64, f64)>, pad_pts: V... + | ------ fields in this struct ^^^^^^^ ^^^^^^^ + +warning: function `settle` is never used + --> bridge/src/tour.rs:875:4 + | +875 | fn settle(seconds: f64) -> Value { json!({"action": "wait", "seconds": seconds}) } + | ^^^^^^ + +warning: function `pan_from` is never used + --> bridge/src/tour.rs:877:4 + | +877 | fn pan_from(fit: (f64, f64, f64, f64), x1: f64, y1: f64, x2: f64, y2: f64) -> Value { let mut b = pan_box(x1, y1, x2, y2); b["from"... + | ^^^^^^^^ + +warning: `adom-fusion-bridge` (bin "adom-fusion-bridge" test) generated 12 warnings + Finished `test` profile [unoptimized + debuginfo] target(s) in 22.08s + Running unittests src/main.rs (target/debug/deps/adom_fusion_bridge-c743d46384c245a3) + +running 35 tests +test addin::tests::timeouts_and_ownership ... ok +test addin::tests::api_error_classifier_matches_python_table ... ok +test epg::tests::float_repr ... ok +test etiquette::tests::b64_matches_python ... ok +test fusion_prefs::tests::py_dumps_matches_python ... ok +test etiquette::tests::bridge_doc_text_and_ledger_window ... ok +test mint::tests::attach_script_matches_python_golden ... ok +test epg::tests::epg_script_matches_python ... ok +test mint::tests::placement_parses_and_refuses ... ok +test mint::tests::mint_script_matches_python_golden ... ok +test operation_status::tests::only_status_aliases_use_this_route ... ok +test fusionpath::tests::spaced_inputs_are_staged_with_siblings_and_named_the_same ... ok +test orchestrations::bound_p3d_tests::picks_each_parts_own_binding ... ok +test orchestrations::doc_name_tests::short_names_count ... ok +test orchestrations::tests::bytes_repr_matches_python ... ok +test orchestrations::tests::ratio_matches_difflib_on_known_pairs ... ok +test palette::tests::stale_runs_do_not_pin_the_palette ... ok +test small_verbs::closable_tests::a_small_dialog_with_cancel_may_be_closed ... ok +test small_verbs::closable_tests::a_window_sized_frame_is_never_closed ... ok +test small_verbs::image_delivery_tests::replies_without_images_are_untouched ... ok +test small_verbs::image_delivery_tests::a_reply_that_already_has_full_path_is_left_alone ... ok +test small_verbs::closable_tests::an_eagle_editor_window_is_never_closed ... ok +test small_verbs::closable_tests::a_window_with_no_dismiss_button_is_left_open ... ok +test small_verbs::image_delivery_tests::old_path_keys_gain_full_path_and_screenshots ... ok +test fusion_prefs::tests::pref_script_is_byte_identical_to_server_py ... ok +test routing::tests::transport_failure_is_preserved ... ok +test operation_status::tests::busy_native_thread_does_not_block_cached_history_route ... ok +test orchestrations::tests::wrap_skeleton_pinned_to_server_py ... ok +test routing::tests::unwraps_semantic_failure ... ok +test timings::tests::record_rolls_ten_and_rounds ... ok +test orchestrations::png_tests::flat_and_busy_images_are_told_apart ... ok +test operation_status::tests::cold_endpoint_returns_unknown_without_host_or_repair_context ... ok +test testproject::tests::test_project_xml_matches_python_golden ... ok +test operation_status::tests::unavailable_and_malformed_responses_never_trigger_a_fallback ... ok +test electronics::tests::board_fallback_reads_the_sample ... ok + +test result: ok. 35 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.15s + + Running unittests src/lib.rs (target/debug/deps/fusion_core-d5d31ee418c79330) + +running 13 tests +test alerts::tests::stamps_round_trip ... ok +test aps::tests::free_endpoint_guard_matches_python ... ok +test aps::tests::urlencode_is_form_safe ... ok +test aps::tests::usage_month_is_utc_year_month ... ok +test dialogs::panel_tests::fusion_panels_are_not_dialogs ... ok +test dialogs::tests::own_palette_is_never_a_dialog ... ok +test windows_facts::tests::a_non_maximized_main_is_never_the_dialog ... ok +test windows_facts::tests::palette_is_never_the_main_window ... ok +test dialogs::tests::assertion_body_classifies ... ok +test windows_facts::tests::sign_in_titles ... ok +test windows_facts::tests::seat_dialog_shapes_from_the_field_notes ... ok +test aps::tests::usage_counter_resets_on_a_new_month_and_caps ... ok +test contract::tests::the_frozen_catalog_parses_and_is_nonempty ... ok + +test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s + + Running tests/alerts_golden.rs (target/debug/deps/alerts_golden-fcbb90f43ceaefd5) + +running 1 test +test alert_parsing_matches_the_python_bridge ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Running tests/dialogs_golden.rs (target/debug/deps/dialogs_golden-16abee4d2b523a1a) + +running 1 test +test title_classifier_matches_python ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Running tests/readiness_golden.rs (target/debug/deps/readiness_golden-5385cf14401899f0) + +running 1 test +test readiness_matches_the_python_handler_in_every_scenario ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s + + Running unittests src/lib.rs (target/debug/deps/fusion_lbr-9a5879f23b672e79) + +running 2 tests +test fusion_att_tests::fusion_att_values_are_read_in_layers ... ok +test heatsink_tests::heatsink_vias_are_not_shorts ... ok + +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s + + Running tests/golden.rs (target/debug/deps/golden-baeae8d80de73771) + +running 8 tests +test a_non_library_is_refused_not_guessed ... ok +test pairing_matches_the_python_bridge ... ok +test metadata_matches_the_python_bridge ... ok +test artifact_names_match_the_python_bridge ... ok +test bundle_staging_matches_python ... ok +test split_per_part_matches_python_byte_for_byte ... ok +test binding_injection_matches_python_and_accumulates ... ok +test preflight_and_lints_match_the_python_bridge ... ok + +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s + + Running unittests src/lib.rs (target/debug/deps/fusion_os_mac-e8f11a8e90b8741c) + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Running unittests src/lib.rs (target/debug/deps/fusion_os_win-7f59850a39bade0e) + +running 1 test +test tests::paths_never_panic_off_windows ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Doc-tests fusion_core + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Doc-tests fusion_lbr + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Doc-tests fusion_os_mac + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Doc-tests fusion_os_win + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + diff --git a/docs/integration-2026-10-06-evidence/gate-shadow.log b/docs/integration-2026-10-06-evidence/gate-shadow.log new file mode 100644 index 0000000..08e3d4f --- /dev/null +++ b/docs/integration-2026-10-06-evidence/gate-shadow.log @@ -0,0 +1 @@ +0 shadowing finding(s) diff --git a/docs/integration-2026-10-06-evidence/gate-windows.log b/docs/integration-2026-10-06-evidence/gate-windows.log new file mode 100644 index 0000000..85d6cef --- /dev/null +++ b/docs/integration-2026-10-06-evidence/gate-windows.log @@ -0,0 +1,217 @@ + Compiling proc-macro2 v1.0.107 + Compiling quote v1.0.47 + Compiling unicode-ident v1.0.24 + Compiling cfg-if v1.0.4 + Compiling stable_deref_trait v1.2.1 + Compiling find-msvc-tools v0.1.11 + Compiling shlex v2.0.1 + Compiling version_check v0.9.5 + Compiling simd-adler32 v0.3.10 + Compiling writeable v0.6.4 + Compiling crc32fast v1.5.1 + Compiling litemap v0.8.3 + Compiling memchr v2.8.3 + Compiling utf8_iter v1.0.4 + Compiling icu_properties_data v2.3.0 + Compiling icu_normalizer_data v2.3.0 + Compiling adler2 v2.0.1 + Compiling smallvec v1.16.0 + Compiling zeroize v1.9.0 + Compiling log v0.4.34 + Compiling serde_core v1.0.229 + Compiling once_cell v1.21.4 + Compiling zmij v1.0.23 + Compiling hashbrown v0.17.1 + Compiling equivalent v1.0.2 + Compiling getrandom v0.2.17 + Compiling cc v1.4.4 + Compiling rustls-pki-types v1.15.1 + Compiling untrusted v0.9.0 + Compiling zerocopy v0.8.56 + Compiling serde_json v1.0.151 + Compiling serde v1.0.229 + Compiling percent-encoding v2.3.2 + Compiling windows_x86_64_gnu v0.52.6 + Compiling typenum v1.20.1 + Compiling rustls v0.23.43 + Compiling miniz_oxide v0.9.1 + Compiling itoa v1.0.18 + Compiling generic-array v0.14.7 + Compiling ahash v0.8.12 + Compiling thiserror v1.0.69 + Compiling form_urlencoded v1.2.2 + Compiling autocfg v1.5.1 + Compiling thiserror v2.0.20 + Compiling vcpkg v0.2.15 + Compiling pkg-config v0.3.34 + Compiling subtle v2.6.1 + Compiling regex-syntax v0.8.11 + Compiling bumpalo v3.20.3 + Compiling base64 v0.22.1 + Compiling zip v2.4.2 + Compiling windows-targets v0.52.6 + Compiling fdeflate v0.3.7 + Compiling windows-sys v0.59.0 + Compiling miniz_oxide v0.8.9 + Compiling webpki-roots v1.0.9 + Compiling cpufeatures v0.2.17 + Compiling httpdate v1.0.3 + Compiling chunked_transfer v1.5.0 + Compiling webpki-roots v0.26.11 + Compiling aho-corasick v1.1.5 + Compiling zopfli v0.8.3 + Compiling roxmltree v0.20.0 + Compiling indexmap v2.14.1 + Compiling windows-link v0.2.1 + Compiling flate2 v1.1.10 + Compiling ascii v1.1.0 + Compiling bitflags v1.3.2 + Compiling bitflags v2.13.1 + Compiling fallible-streaming-iterator v0.1.9 + Compiling num-traits v0.2.19 + Compiling fallible-iterator v0.3.0 + Compiling syn v3.0.4 + Compiling syn v2.0.119 + Compiling tiny_http v0.12.0 + Compiling png v0.17.16 + Compiling ring v0.17.14 + Compiling libsqlite3-sys v0.30.1 + Compiling block-buffer v0.10.4 + Compiling crypto-common v0.1.7 + Compiling digest v0.10.7 + Compiling chrono v0.4.45 + Compiling sha2 v0.10.9 + Compiling regex-automata v0.4.18 + Compiling synstructure v0.13.2 + Compiling thiserror-impl v1.0.69 + Compiling zerofrom-derive v0.1.7 + Compiling yoke-derive v0.8.2 + Compiling displaydoc v0.2.7 + Compiling zerovec-derive v0.11.6 + Compiling serde_derive v1.0.229 + Compiling thiserror-impl v2.0.20 + Compiling zerofrom v0.1.8 + Compiling yoke v0.8.3 + Compiling zerotrie v0.2.5 + Compiling zerovec v0.11.8 + Compiling hashbrown v0.14.5 + Compiling tinystr v0.8.4 + Compiling potential_utf v0.1.6 + Compiling icu_collections v2.3.0 + Compiling icu_locale_core v2.3.0 + Compiling regex v1.13.1 + Compiling hashlink v0.9.1 + Compiling rustls-webpki v0.103.15 + Compiling icu_provider v2.3.1 + Compiling icu_normalizer v2.3.0 + Compiling icu_properties v2.3.0 + Compiling fusion-lbr v1.11.39 (/home/adom/project/fusion-pr10-current/rust/lbr) + Compiling idna_adapter v1.2.2 + Compiling idna v1.1.0 + Compiling url v2.5.8 + Compiling ureq v2.12.1 + Compiling fusion-core v1.11.39 (/home/adom/project/fusion-pr10-current/rust/core) + Compiling fusion-os-win v1.11.39 (/home/adom/project/fusion-pr10-current/rust/os-win) + Compiling rusqlite v0.32.1 + Compiling adom-fusion-bridge v1.11.39 (/home/adom/project/fusion-pr10-current/rust/bridge) +warning: value assigned to `bound_urn` is never read + --> bridge/src/tour.rs:620:25 + | +620 | let mut bound_urn = String::new(); + | ^^^^^^^^^^^^^ this value is reassigned later and never used +... +687 | bound_urn = br["parts"][0]["wip_urn"].as_str().unwrap_or("").to_string(); + | --------- `bound_urn` is overwritten here before the previous value is read + | + = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default + +warning: unreachable pattern + --> bridge/src/tour.rs:941:9 + | +938 | ... "schematic" => vec![("zoom-in", z(2.2)), ("net sweep", json!({"action": "sweep", "path": [[0.40, 0.40], [0.50, 0.42], [0.60, ... + | ----------- matches all the relevant values +... +941 | ... "schematic" => { + | ^^^^^^^^^^^ no value can reach this + | + = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default + +warning: unreachable pattern + --> bridge/src/tour.rs:949:9 + | +939 | ... "board2d" => vec![("zoom-in", z(2.4)), ("copper sweep", json!({"action": "sweep", "path": [[0.42, 0.42], [0.50, 0.45], [0.58,... + | --------- matches all the relevant values +... +949 | ... "board2d" => { + | ^^^^^^^^^ no value can reach this + +warning: struct `NoHost` is never constructed + --> bridge/src/main.rs:83:8 + | +83 | struct NoHost; + | ^^^^^^ + | + = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default + +warning: function `notify_info` is never used + --> bridge/src/lifecycle.rs:157:8 + | +157 | pub fn notify_info(ctx: &Ctx, title: &str, body: &str) -> bool { + | ^^^^^^^^^^^ + +warning: constant `BLOCKED_RESTART_AFTER_SECS` is never used + --> bridge/src/lifecycle.rs:167:7 + | +167 | const BLOCKED_RESTART_AFTER_SECS: f64 = 90.0; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ + +warning: function `now_secs` is never used + --> bridge/src/lifecycle.rs:169:4 + | +169 | fn now_secs() -> f64 { std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).map(|d| d.as_secs_f64()).unwrap_or(0.0) } + | ^^^^^^^^ + +warning: function `begin_blocked_restart` is never used + --> bridge/src/lifecycle.rs:174:4 + | +174 | fn begin_blocked_restart(ctx: &Ctx, blocking: &[Value], held: f64) -> bool { + | ^^^^^^^^^^^^^^^^^^^^^ + +warning: function `make_3d_script` is never used + --> bridge/src/mint.rs:71:8 + | +71 | pub fn make_3d_script(model_path: &str, orient: bool, pin1: Option<(f64, f64)>, layers_off: &[String], task: &str, name: &str) -> St... + | ^^^^^^^^^^^^^^ + +warning: trait `TakeIfObject` is never used + --> bridge/src/signin.rs:110:7 + | +110 | trait TakeIfObject { fn take_if_object(self) -> Option; } + | ^^^^^^^^^^^^ + +warning: function `banner` is never used + --> bridge/src/tour.rs:138:4 + | +138 | fn banner(action: &str, title: &str, detail: &str, percent: Option) { + | ^^^^^^ + +warning: fields `pin_pts` and `pad_pts` are never read + --> bridge/src/tour.rs:520:114 + | +520 | ...ct Sample { lbr: String, step: Option, deviceset: String, package: String, pins: usize, pads: usize, pin_pts: Vec<(f64, f64)>, pad_pts: V... + | ------ fields in this struct ^^^^^^^ ^^^^^^^ + +warning: function `settle` is never used + --> bridge/src/tour.rs:875:4 + | +875 | fn settle(seconds: f64) -> Value { json!({"action": "wait", "seconds": seconds}) } + | ^^^^^^ + +warning: function `pan_from` is never used + --> bridge/src/tour.rs:877:4 + | +877 | fn pan_from(fit: (f64, f64, f64, f64), x1: f64, y1: f64, x2: f64, y2: f64) -> Value { let mut b = pan_box(x1, y1, x2, y2); b["from"... + | ^^^^^^^^ + +warning: `adom-fusion-bridge` (bin "adom-fusion-bridge") generated 14 warnings + Finished `release` profile [optimized] target(s) in 1m 44s diff --git a/docs/integration-2026-10-06-evidence/history-tests.log b/docs/integration-2026-10-06-evidence/history-tests.log new file mode 100644 index 0000000..196c984 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/history-tests.log @@ -0,0 +1,5 @@ +...................................... +---------------------------------------------------------------------- +Ran 38 tests in 0.250s + +OK diff --git a/docs/integration-2026-10-06-evidence/identity-audit-r1.json b/docs/integration-2026-10-06-evidence/identity-audit-r1.json new file mode 100644 index 0000000..4d69b6b --- /dev/null +++ b/docs/integration-2026-10-06-evidence/identity-audit-r1.json @@ -0,0 +1,76 @@ +{ + "manifestSha256": "9041f6a24b4dab24fea34eb28a03647d2eaf11ddb422aeb591b258c5ce389a4d", + "expectedManifestSha256": "9041f6a24b4dab24fea34eb28a03647d2eaf11ddb422aeb591b258c5ce389a4d", + "frozenFiles": 1204, + "frozenFileMismatches": [], + "masterOnlyFiles": 61, + "masterOnlyMismatches": [], + "versions": { + "BRIDGE_VERSION": { + "equalsMaster": true, + "sha256": "890201f472e406726cfc4e0c7f78706a559d614b1fc9e171a8f4e8c5d3fd2388", + "version": "1.11.39" + }, + "bridge.json": { + "equalsMaster": false, + "sha256": "927635e362b440b600abcd7d39deabe8128d62edb7b73fa53c5cf2d92ce4f3ce", + "version": "1.11.39" + }, + "adom-bridge-fusion-manifest.json": { + "equalsMaster": true, + "sha256": "01c305914bc13ec370a624ec444b0d1887e9c6ca548be9ae338a10ed12b89893", + "version": "1.11.39" + }, + "rust/Cargo.toml": { + "equalsMaster": true, + "sha256": "be275d4919d09a63c0d5b341fdf8b7e9bf8e9114addedfc9631c69663892bf40", + "version": "1.11.39" + }, + "rust/Cargo.lock": { + "equalsMaster": true, + "sha256": "f072958eab03c348542baf52d6e082d3cf25346ed75f5b1d65ccb9cc5ceba194", + "fusionPackages": [ + { + "name": "adom-fusion-bridge", + "version": "1.11.39" + }, + { + "name": "fusion-core", + "version": "1.11.39" + }, + { + "name": "fusion-lbr", + "version": "1.11.39" + }, + { + "name": "fusion-os-mac", + "version": "1.11.39" + }, + { + "name": "fusion-os-win", + "version": "1.11.39" + } + ] + }, + "dashboard/Cargo.toml": { + "equalsMaster": true, + "sha256": "2b2e0fa4aed650f75a9ca1f5cbfecd5d2feb0ebdcf1467386c7c798431f61c5b", + "version": "1.11.39" + }, + "dashboard/Cargo.lock": { + "equalsMaster": true, + "sha256": "03c08d5cd1da907edb998abb1f367f11b970c5a014a937bf98013eaf1b4e111a", + "fusionPackages": [ + { + "name": "fusion-dashboard", + "version": "1.11.39" + } + ] + }, + "addin/AdomBridge/AdomBridge.manifest": { + "equalsMaster": true, + "sha256": "1dc6a2f367d38eb30e74499a1b2426a4256a6c773a1efd04e37637eab54ddb05", + "version": "1.0.20" + } + } +} diff --git a/docs/integration-2026-10-06-evidence/independent-verification.json b/docs/integration-2026-10-06-evidence/independent-verification.json new file mode 100644 index 0000000..fddb28b --- /dev/null +++ b/docs/integration-2026-10-06-evidence/independent-verification.json @@ -0,0 +1,193 @@ +{ + "verdict": "PASS_SOURCE_ONLY", + "candidate": "/home/adom/project/fusion-pr10-current", + "inputs": { + "master": "52221e25dcbe11ebccb2dfdaac98c81dec7b8931", + "branch": "7be40e9021c13ad430c28e108a6bf544d3f9481c", + "base": "a721e84613f6744bb837cfb7b828795abbc565f5" + }, + "manifest": { + "manifestSha256": "9041f6a24b4dab24fea34eb28a03647d2eaf11ddb422aeb591b258c5ce389a4d", + "expectedManifestSha256": "9041f6a24b4dab24fea34eb28a03647d2eaf11ddb422aeb591b258c5ce389a4d", + "frozenFiles": 1204, + "frozenFileMismatches": [], + "masterOnlyFiles": 61, + "masterOnlyMismatches": [], + "versions": { + "BRIDGE_VERSION": { + "equalsMaster": true, + "sha256": "890201f472e406726cfc4e0c7f78706a559d614b1fc9e171a8f4e8c5d3fd2388", + "version": "1.11.39" + }, + "bridge.json": { + "equalsMaster": false, + "sha256": "927635e362b440b600abcd7d39deabe8128d62edb7b73fa53c5cf2d92ce4f3ce", + "version": "1.11.39" + }, + "adom-bridge-fusion-manifest.json": { + "equalsMaster": true, + "sha256": "01c305914bc13ec370a624ec444b0d1887e9c6ca548be9ae338a10ed12b89893", + "version": "1.11.39" + }, + "rust/Cargo.toml": { + "equalsMaster": true, + "sha256": "be275d4919d09a63c0d5b341fdf8b7e9bf8e9114addedfc9631c69663892bf40", + "version": "1.11.39" + }, + "rust/Cargo.lock": { + "equalsMaster": true, + "sha256": "f072958eab03c348542baf52d6e082d3cf25346ed75f5b1d65ccb9cc5ceba194", + "fusionPackages": [ + { + "name": "adom-fusion-bridge", + "version": "1.11.39" + }, + { + "name": "fusion-core", + "version": "1.11.39" + }, + { + "name": "fusion-lbr", + "version": "1.11.39" + }, + { + "name": "fusion-os-mac", + "version": "1.11.39" + }, + { + "name": "fusion-os-win", + "version": "1.11.39" + } + ] + }, + "dashboard/Cargo.toml": { + "equalsMaster": true, + "sha256": "2b2e0fa4aed650f75a9ca1f5cbfecd5d2feb0ebdcf1467386c7c798431f61c5b", + "version": "1.11.39" + }, + "dashboard/Cargo.lock": { + "equalsMaster": true, + "sha256": "03c08d5cd1da907edb998abb1f367f11b970c5a014a937bf98013eaf1b4e111a", + "fusionPackages": [ + { + "name": "fusion-dashboard", + "version": "1.11.39" + } + ] + }, + "addin/AdomBridge/AdomBridge.manifest": { + "equalsMaster": true, + "sha256": "1dc6a2f367d38eb30e74499a1b2426a4256a6c773a1efd04e37637eab54ddb05", + "version": "1.0.20" + } + } + }, + "executed": { + "maintainedPython": { + "tests": 455, + "failed": 0, + "skipped": 0, + "modules": { + "test_addin_lifecycle": 12, + "test_bridge_contracts": 7, + "test_document_hygiene": 6, + "test_fusion_harness": 35, + "test_http_server": 18, + "test_live_feed_drain": 12, + "test_mechanical": 21, + "test_mechanical_assemblies": 31, + "test_mechanical_configurations": 26, + "test_mechanical_everyday": 22, + "test_mechanical_regular_joints": 36, + "test_mechanical_transactions": 19, + "test_operation_dispatch": 17, + "test_operation_history": 17, + "test_operation_journal": 17, + "test_operation_status_route": 6, + "test_portable_tree": 5, + "test_ralph_assemblies": 58, + "test_ralph_campaign": 33, + "test_ralph_everyday": 14, + "test_ralph_jobs": 19, + "test_routing": 24 + }, + "command": "python3 -B -m unittest discover -s tests -p 'test_*.py' -v", + "durationSeconds": 12.559 + }, + "independentCoexistence": { + "tests": 8, + "failed": 0, + "mechanicalPreparationSubcases": 54, + "unknownFieldRefusalSubcases": 54, + "boardStaleGuardSubcases": 7, + "command": "FUSION_CANDIDATE=/home/adom/project/fusion-pr10-current python3 -B -m unittest -v test_coexistence" + } + }, + "observed": { + "publicCatalogCount": 179, + "upstreamPublicCount": 176, + "mechanicalSchemasAndDispatcherCount": 54, + "allUpstreamOnlyFilesPreserved": 61, + "frozenFilesUnchanged": 1204, + "configurationOperations": [ + "configuration_inspect" + ], + "publicCatalogExpectedExistingChange": [ + "fusion_mcp_call.example" + ], + "bridgeVersion": "1.11.39", + "addinManifestHealthHistoryVersion": "1.0.20" + }, + "findings": [], + "limitations": [ + "Source-only/fake-API boundary: no merged native Fusion or electronics execution was performed.", + "Compiled executable, package and installation identity are separate root-owned gates; this verifier did not run Cargo or Windows builds.", + "The 54 schema preparation/refusal probes do not prove all 54 kernel operations or every option branch.", + "Exact version strings preserve upstream separate bridge/addin versions. Candidate provenance requires frozen source/build hashes because it is not a newly numbered release.", + "Earlier private generator errors are retained and adjudicated as test-construction defects; no product changes were made for them." + ], + "hostCalls": 0, + "candidateWritesByVerifier": 0, + "artifacts": { + "ACCEPTANCE.md": { + "sha256": "b357e571995010cb19a1fcbceb5f68847ecc4c8c1a67effbd3616963fa4b3e11", + "bytes": 3877 + }, + "branch-schema-baseline-corrected.log": { + "sha256": "23d890efbfe027e4a2ac3c8aeb94dfdd90688cd3be3a2fe5348066dd01c8c470", + "bytes": 9291 + }, + "branch-schema-baseline-final.log": { + "sha256": "02928ba4d140e2483a18640a754f08cd878e5d85439753f9c7a47ab2d074698f", + "bytes": 307 + }, + "branch-schema-baseline.log": { + "sha256": "83b9c41daa665bada9380b342cb8cda1aedf14fceb1e174526eb385f62622e53", + "bytes": 85984 + }, + "identity-audit-r1.json": { + "sha256": "5ecef3ae7eb8fb9dc74bd1b1703900c23ea765d09f59928aaed12940d25acabf", + "bytes": 2263 + }, + "merged-coexistence-r1.log": { + "sha256": "7d718dd68fe78e0a648553d388146646c51414e17758675a7578674bc9b3dd4a", + "bytes": 1410 + }, + "merged-python-r1.log": { + "sha256": "a2381a99315dffc28972b0af22b86e84d4e4491403d4c37e58e0312cb28abeba", + "bytes": 72514 + }, + "source-baseline.json": { + "sha256": "490d7261b84d73016faef61b304e9297f1b33f5a25bcb08c7487d08af253d6ae", + "bytes": 874 + }, + "test_coexistence.py": { + "sha256": "3c6cb36f22340925e9ce24a502ce8a261f3d69eb512528b4b6a3e63411d1b550", + "bytes": 9040 + }, + "upstream-behavior-baseline.log": { + "sha256": "2ba40179c23896735010de7ce0741c5b480c11202b55df825501b4dbc185dd3a", + "bytes": 600 + } + } +} diff --git a/docs/integration-2026-10-06-evidence/independent-verification.md b/docs/integration-2026-10-06-evidence/independent-verification.md new file mode 100644 index 0000000..0839d13 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/independent-verification.md @@ -0,0 +1,15 @@ +# Independent PR10 merge verification, frozen r1 + +**PASS at the source/offline behavioral boundary. No findings remain in this bounded review.** + +Candidate: `/home/adom/project/fusion-pr10-current`. Input identities are recorded in `verification-r1.json`. Builder's frozen manifest SHA-256 is `9041f6a24b4dab24fea34eb28a03647d2eaf11ddb422aeb591b258c5ce389a4d`; all 1,204 listed files still match it after verification. All 61 upstream-only changes remain byte-identical to current master. + +The maintained Python suite passed **455/455 tests**, with zero skips or failures. Eight independent coexistence tests also passed. These separately verify the exact 179-entry public catalog union, authoring/frozen-contract/manifest agreement, both add-in handler inventories, and preserved upstream routing implementation/default rules. Every one of the 54 mechanical schemas accepts a valid typed envelope and refuses an unknown field; actual dispatcher names match those 54 schemas. Configurations remain inspect-only. + +Independent behavior fixtures confirmed seven board mutation entrypoints refuse a stale revision before native command emission, electronics BOM preserves repeated quantities and board-only distinctions, and schematic planning preserves pad-to-pin net mapping without writing files. These are offline behaviors; they do not establish live routing or CAD kernel correctness. + +Version reporting remains truthful to upstream: bridge/Rust/dashboard/package markers are 1.11.39, and add-in manifest, health and operation-history identity use the separate 1.0.20 add-in version. `bridge.json` changes its verb inventory while retaining 1.11.39. The candidate is identified by source and fresh-build hashes, not a claim that this merged code was already released or loaded. + +`merged-python-r1.log`, `merged-coexistence-r1.log`, `identity-audit-r1.json`, and `verification-r1.json` preserve raw results and artifact hashes. The private schema-generator baseline mistakes are retained and documented; they required no product correction. No candidate source files were written by this verifier. + +Compiled artifact identity and all merged native Fusion/electronics acceptance remain outside this verifier's completed gate. Root is handling compilation separately. No host, native, deployment, publication, screenshot or Shotlog calls were made. diff --git a/docs/integration-2026-10-06-evidence/merged-coexistence-r1.log b/docs/integration-2026-10-06-evidence/merged-coexistence-r1.log new file mode 100644 index 0000000..2fa44d2 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/merged-coexistence-r1.log @@ -0,0 +1,13 @@ +test_all_54_mechanical_schemas_accept_minimal_typed_envelopes_and_reject_extra_fields (test_coexistence.Coexistence.test_all_54_mechanical_schemas_accept_minimal_typed_envelopes_and_reject_extra_fields) ... ok +test_board_mutators_refuse_stale_identity_without_emitting_commands (test_coexistence.Coexistence.test_board_mutators_refuse_stale_identity_without_emitting_commands) ... ok +test_both_addin_handler_inventories_survive (test_coexistence.Coexistence.test_both_addin_handler_inventories_survive) ... ok +test_electronics_bom_retains_repetitions_and_board_only_rows (test_coexistence.Coexistence.test_electronics_bom_retains_repetitions_and_board_only_rows) ... ok +test_exact_179_verb_union_and_three_way_contract_fields (test_coexistence.Coexistence.test_exact_179_verb_union_and_three_way_contract_fields) ... ok +test_frozen_catalog_equals_authoring_and_manifest_exactly (test_coexistence.Coexistence.test_frozen_catalog_equals_authoring_and_manifest_exactly) ... ok +test_schematic_plan_is_pure_and_preserves_pad_to_pin_net_mapping (test_coexistence.Coexistence.test_schematic_plan_is_pure_and_preserves_pad_to_pin_net_mapping) ... ok +test_upstream_routing_implementation_and_embedded_rules_unchanged (test_coexistence.Coexistence.test_upstream_routing_implementation_and_embedded_rules_unchanged) ... ok + +---------------------------------------------------------------------- +Ran 8 tests in 0.121s + +OK diff --git a/docs/integration-2026-10-06-evidence/merged-python-r1.log b/docs/integration-2026-10-06-evidence/merged-python-r1.log new file mode 100644 index 0000000..bb9ff41 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/merged-python-r1.log @@ -0,0 +1,460 @@ +test_accepted_slow_body_cannot_use_successor_listener_or_admit_history (test_addin_lifecycle.AddinLifecycle.test_accepted_slow_body_cannot_use_successor_listener_or_admit_history) ... ok +test_accepted_slow_headers_cannot_report_successor_health (test_addin_lifecycle.AddinLifecycle.test_accepted_slow_headers_cannot_report_successor_health) ... ok +test_failed_unregister_retains_only_owned_identity_for_cleanup_retry (test_addin_lifecycle.AddinLifecycle.test_failed_unregister_retains_only_owned_identity_for_cleanup_retry) ... ok +test_false_event_return_without_callback_expires_without_dispatch (test_addin_lifecycle.AddinLifecycle.test_false_event_return_without_callback_expires_without_dispatch) ... ok +test_live_http_start_does_not_replace_app_or_event_and_draining_restart_refuses (test_addin_lifecycle.AddinLifecycle.test_live_http_start_does_not_replace_app_or_event_and_draining_restart_refuses) ... ok +test_non_collision_bind_error_is_failure_with_owned_event_cleanup (test_addin_lifecycle.AddinLifecycle.test_non_collision_bind_error_is_failure_with_owned_event_cleanup) ... ok +test_refused_registration_and_handler_unwind_without_listener (test_addin_lifecycle.AddinLifecycle.test_refused_registration_and_handler_unwind_without_listener) ... ok +test_repeated_run_preserves_current_registration_and_restart_gets_new_id (test_addin_lifecycle.AddinLifecycle.test_repeated_run_preserves_current_registration_and_restart_gets_new_id) ... ok +test_retirement_after_admission_resolves_through_existing_nonexecution_cas (test_addin_lifecycle.AddinLifecycle.test_retirement_after_admission_resolves_through_existing_nonexecution_cas) ... ok +test_thread_start_failures_close_bound_socket_and_stop_started_threads (test_addin_lifecycle.AddinLifecycle.test_thread_start_failures_close_bound_socket_and_stop_started_threads) ... ok +test_two_loaded_copies_have_one_listener_and_loser_stop_cannot_unregister_winner (test_addin_lifecycle.AddinLifecycle.test_two_loaded_copies_have_one_listener_and_loser_stop_cannot_unregister_winner) ... ok +test_windows_exclusivity_is_set_before_bind_with_no_reuse (test_addin_lifecycle.AddinLifecycle.test_windows_exclusivity_is_set_before_bind_with_no_reuse) ... ok +test_addin_dispatch_handlers_resolve_to_declared_functions (test_bridge_contracts.BridgeContracts.test_addin_dispatch_handlers_resolve_to_declared_functions) ... ok +test_addin_health_and_history_use_the_separate_manifest_version (test_bridge_contracts.BridgeContracts.test_addin_health_and_history_use_the_separate_manifest_version) ... ok +test_catalog_has_no_duplicates_and_manifest_exposes_exact_set (test_bridge_contracts.BridgeContracts.test_catalog_has_no_duplicates_and_manifest_exposes_exact_set) ... ok +test_each_catalog_verb_has_a_rust_route_declaration (test_bridge_contracts.BridgeContracts.test_each_catalog_verb_has_a_rust_route_declaration) ... ok +test_frozen_catalog_matches_all_authoring_fields (test_bridge_contracts.BridgeContracts.test_frozen_catalog_matches_all_authoring_fields) ... ok +test_python_sources_parse_including_all_addin_commands (test_bridge_contracts.BridgeContracts.test_python_sources_parse_including_all_addin_commands) ... ok +test_runtime_packaging_versions_are_consistent (test_bridge_contracts.BridgeContracts.test_runtime_packaging_versions_are_consistent) ... ok +test_blank_untouched_is_not_dirty (test_document_hygiene.Hygiene.test_blank_untouched_is_not_dirty) ... ok +test_enumeration_failure_does_not_replace_result (test_document_hygiene.Hygiene.test_enumeration_failure_does_not_replace_result) ... ok +test_errors_and_original_hint_preserved (test_document_hygiene.Hygiene.test_errors_and_original_hint_preserved) ... ok +test_export_does_not_clear_dirty_state (test_document_hygiene.Hygiene.test_export_does_not_clear_dirty_state) ... ok +test_previously_saved_but_modified (test_document_hygiene.Hygiene.test_previously_saved_but_modified) ... ok +test_unknown_is_not_reported_clean (test_document_hygiene.Hygiene.test_unknown_is_not_reported_clean) ... ok +test_expected_refusal_does_not_accept_infrastructure_or_wrong_cause (test_fusion_harness.Envelopes.test_expected_refusal_does_not_accept_infrastructure_or_wrong_cause) ... ok +test_full_catalog_domain_data_does_not_exhaust_envelope_budget (test_fusion_harness.Envelopes.test_full_catalog_domain_data_does_not_exhaust_envelope_budget) ... ok +test_malformed_unknown_predicate_and_empty_catalog_fail (test_fusion_harness.Envelopes.test_malformed_unknown_predicate_and_empty_catalog_fail) ... ok +test_native_data_stays_nested_and_domain_flags_are_not_status (test_fusion_harness.Envelopes.test_native_data_stays_nested_and_domain_flags_are_not_status) ... ok +test_rich_native_replies_keep_fields_outside_output_summary (test_fusion_harness.Envelopes.test_rich_native_replies_keep_fields_outside_output_summary) ... ok +test_script_stdout_and_plain_mcp_text_are_domain_data (test_fusion_harness.Envelopes.test_script_stdout_and_plain_mcp_text_are_domain_data) ... ok +test_semantic_failures_survive_every_transport_wrapper (test_fusion_harness.Envelopes.test_semantic_failures_survive_every_transport_wrapper) ... ok +test_discovered_scratch_root_remains_fixed_after_registration (test_fusion_harness.Ownership.test_discovered_scratch_root_remains_fixed_after_registration) ... ok +test_exception_runs_cleanup_only_for_verified_owned_document (test_fusion_harness.Ownership.test_exception_runs_cleanup_only_for_verified_owned_document) ... ok +test_failed_owner_read_cannot_authorize_close_or_file_delete (test_fusion_harness.Ownership.test_failed_owner_read_cannot_authorize_close_or_file_delete) ... ok +test_missing_checkpoint_and_wrong_identity_never_call_closer (test_fusion_harness.Ownership.test_missing_checkpoint_and_wrong_identity_never_call_closer) ... ok +test_only_registered_scratch_files_are_deleted_and_unowned_sentinel_survives (test_fusion_harness.Ownership.test_only_registered_scratch_files_are_deleted_and_unowned_sentinel_survives) ... ok +test_preferences_restore_actual_baseline_and_preserve_concurrent_change (test_fusion_harness.Ownership.test_preferences_restore_actual_baseline_and_preserve_concurrent_change) ... ok +test_resume_preserves_target_and_requires_rebound_identity_adapters (test_fusion_harness.Ownership.test_resume_preserves_target_and_requires_rebound_identity_adapters) ... ok +test_resumed_preference_and_custom_cleanup_never_disappear (test_fusion_harness.Ownership.test_resumed_preference_and_custom_cleanup_never_disappear) ... ok +test_manual_only_makes_zero_host_calls_and_reports_no_pass (test_fusion_harness.RunnerSafety.test_manual_only_makes_zero_host_calls_and_reports_no_pass) ... ok +test_only_never_authorizes_manual_or_fixture_or_changed_args (test_fusion_harness.RunnerSafety.test_only_never_authorizes_manual_or_fixture_or_changed_args) ... ok +test_runner_exception_still_writes_final_report_and_manifest (test_fusion_harness.RunnerSafety.test_runner_exception_still_writes_final_report_and_manifest) ... ok +test_unknown_only_refuses_before_constructing_client (test_fusion_harness.RunnerSafety.test_unknown_only_refuses_before_constructing_client) ... ok +test_absent_or_malformed_mutation_outcome_is_ambiguous (test_fusion_harness.Transport.test_absent_or_malformed_mutation_outcome_is_ambiguous) ... ok +test_caller_argument_reuse_cannot_rewrite_timed_out_operation_identity (test_fusion_harness.Transport.test_caller_argument_reuse_cannot_rewrite_timed_out_operation_identity) ... ok +test_campaign_retains_owned_fixtures_when_durable_outcome_stays_unknown (test_fusion_harness.Transport.test_campaign_retains_owned_fixtures_when_durable_outcome_stays_unknown) ... ok +test_durable_pending_and_unknown_outcomes_are_ambiguous_through_envelopes (test_fusion_harness.Transport.test_durable_pending_and_unknown_outcomes_are_ambiguous_through_envelopes) ... ok +test_nonzero_exit_cannot_pass_even_if_stdout_claims_success (test_fusion_harness.Transport.test_nonzero_exit_cannot_pass_even_if_stdout_claims_success) ... ok +test_only_exact_durable_not_executed_timeout_is_nonambiguous (test_fusion_harness.Transport.test_only_exact_durable_not_executed_timeout_is_nonambiguous) ... ok +test_pending_and_lost_terminal_ack_reconcile_by_status_without_replay (test_fusion_harness.Transport.test_pending_and_lost_terminal_ack_reconcile_by_status_without_replay) ... ok +test_reconcile_only_polls_original_operation_and_retains_first_timeout (test_fusion_harness.Transport.test_reconcile_only_polls_original_operation_and_retains_first_timeout) ... ok +test_running_unknown_wrong_identity_and_contradictory_terminal_remain_ambiguous (test_fusion_harness.Transport.test_running_unknown_wrong_identity_and_contradictory_terminal_remain_ambiguous) ... ok +test_terminal_history_digest_binds_immutable_payload_not_only_operation_id (test_fusion_harness.Transport.test_terminal_history_digest_binds_immutable_payload_not_only_operation_id) ... ok +test_terminal_identity_is_required_inside_matching_wrapped_status (test_fusion_harness.Transport.test_terminal_identity_is_required_inside_matching_wrapped_status) ... ok +test_terminal_label_cannot_hide_nested_unresolved_lifecycle (test_fusion_harness.Transport.test_terminal_label_cannot_hide_nested_unresolved_lifecycle) ... ok +test_terminal_proof_rejects_outer_unknown_and_contradictory_execution (test_fusion_harness.Transport.test_terminal_proof_rejects_outer_unknown_and_contradictory_execution) ... ok +test_terminal_status_rejects_explicitly_nonterminal_or_conflicting_durability (test_fusion_harness.Transport.test_terminal_status_rejects_explicitly_nonterminal_or_conflicting_durability) ... ok +test_timeout_mutation_is_dispatched_once_and_raw_attempt_preserved (test_fusion_harness.Transport.test_timeout_mutation_is_dispatched_once_and_raw_attempt_preserved) ... ok +test_uncoded_native_timeout_is_ambiguous_for_mutation (test_fusion_harness.Transport.test_uncoded_native_timeout_is_ambiguous_for_mutation) ... ok +test_body_size_limit_precedes_read_or_dispatch (test_http_server.HttpTransport.test_body_size_limit_precedes_read_or_dispatch) ... ok +test_conflicting_framing_and_invalid_unicode_are_rejected (test_http_server.HttpTransport.test_conflicting_framing_and_invalid_unicode_are_rejected) ... ok +test_duplicate_callback_cannot_replace_first_result (test_http_server.HttpTransport.test_duplicate_callback_cannot_replace_first_result) ... ok +test_fast_event_cannot_outrun_waiter (test_http_server.HttpTransport.test_fast_event_cannot_outrun_waiter) ... ok +test_fire_exception_cleans_waiter_and_busy_state (test_http_server.HttpTransport.test_fire_exception_cleans_waiter_and_busy_state) ... ok +test_invalid_content_length_is_structured_error (test_http_server.HttpTransport.test_invalid_content_length_is_structured_error) ... ok +test_invalid_timeouts_are_rejected_before_dispatch (test_http_server.HttpTransport.test_invalid_timeouts_are_rejected_before_dispatch) ... ok +test_late_callback_is_dropped_after_timeout (test_http_server.HttpTransport.test_late_callback_is_dropped_after_timeout) ... ok +test_malformed_json_is_a_structured_error (test_http_server.HttpTransport.test_malformed_json_is_a_structured_error) ... ok +test_nonobject_command_and_args_are_rejected_before_dispatch (test_http_server.HttpTransport.test_nonobject_command_and_args_are_rejected_before_dispatch) ... ok +test_partial_body_times_out_without_dispatch (test_http_server.HttpTransport.test_partial_body_times_out_without_dispatch) ... ok +test_simultaneous_requests_keep_results_separate (test_http_server.HttpTransport.test_simultaneous_requests_keep_results_separate) ... ok +test_slow_valid_body_does_not_truncate_large_response (test_http_server.HttpTransport.test_slow_valid_body_does_not_truncate_large_response) ... ok +test_status_and_operation_status_bypass_busy_cad_queue (test_http_server.HttpTransport.test_status_and_operation_status_bypass_busy_cad_queue) ... ok +test_trickling_body_cannot_extend_absolute_deadline (test_http_server.HttpTransport.test_trickling_body_cannot_extend_absolute_deadline) ... ok +test_trickling_header_cannot_extend_absolute_deadline (test_http_server.HttpTransport.test_trickling_header_cannot_extend_absolute_deadline) ... ok +test_watchdog_cannot_release_or_erase_live_owner (test_http_server.HttpTransport.test_watchdog_cannot_release_or_erase_live_owner) ... ok +test_watchdog_uses_effective_caller_deadline (test_http_server.HttpTransport.test_watchdog_uses_effective_caller_deadline) ... ok +test_actual_status_timeout_remains_failure_after_successful_transfers (test_live_feed_drain.FeedEvidenceTests.test_actual_status_timeout_remains_failure_after_successful_transfers) ... ok +test_drain_tail_allows_native_end_delivery_after_capture_window (test_live_feed_drain.FeedEvidenceTests.test_drain_tail_allows_native_end_delivery_after_capture_window) ... ok +test_expired_read_does_not_inject_or_start_next_frame (test_live_feed_drain.FeedEvidenceTests.test_expired_read_does_not_inject_or_start_next_frame) ... ok +test_failed_injection_is_not_counted (test_live_feed_drain.FeedEvidenceTests.test_failed_injection_is_not_counted) ... ok +test_header_without_pixels_cannot_transfer (test_live_feed_drain.FeedEvidenceTests.test_header_without_pixels_cannot_transfer) ... ok +test_native_truncation_or_missing_popup_never_claims_complete (test_live_feed_drain.FeedEvidenceTests.test_native_truncation_or_missing_popup_never_claims_complete) ... ok +test_owned_start_keeps_native_duration_and_full_delivery_allowance (test_live_feed_drain.FeedEvidenceTests.test_owned_start_keeps_native_duration_and_full_delivery_allowance) ... ok +test_replacement_during_fetch_discards_foreign_batch (test_live_feed_drain.FeedEvidenceTests.test_replacement_during_fetch_discards_foreign_batch) ... ok +test_running_feed_at_deadline_is_explicitly_partial (test_live_feed_drain.FeedEvidenceTests.test_running_feed_at_deadline_is_explicitly_partial) ... ok +test_successful_injection_is_not_reclassified_when_next_work_has_no_budget (test_live_feed_drain.FeedEvidenceTests.test_successful_injection_is_not_reclassified_when_next_work_has_no_budget) ... ok +test_unusable_tail_budget_never_starts_injection_and_retains_backlog (test_live_feed_drain.FeedEvidenceTests.test_unusable_tail_budget_never_starts_injection_and_retains_backlog) ... ok +test_valid_pixels_transfer_without_claiming_visual_pass (test_live_feed_drain.FeedEvidenceTests.test_valid_pixels_transfer_without_claiming_visual_pass) ... ok +test_3mf_disables_printer_launch_and_multiple_outputs (test_mechanical.Exports.test_3mf_disables_printer_launch_and_multiple_outputs) ... ok +test_cleanup_failure_after_publication_is_success_with_warning (test_mechanical.Exports.test_cleanup_failure_after_publication_is_success_with_warning) ... ok +test_empty_preserves (test_mechanical.Exports.test_empty_preserves) ... ok +test_exception_preserves (test_mechanical.Exports.test_exception_preserves) ... ok +test_exclusive_publication_cannot_clobber_racing_writer (test_mechanical.Exports.test_exclusive_publication_cannot_clobber_racing_writer) ... ok +test_false_preserves (test_mechanical.Exports.test_false_preserves) ... ok +test_missing_capability_preserves_existing_bytes (test_mechanical.Exports.test_missing_capability_preserves_existing_bytes) ... ok +test_success_publishes (test_mechanical.Exports.test_success_publishes) ... ok +test_unlink_failure_after_hardlink_reports_published (test_mechanical.Exports.test_unlink_failure_after_hardlink_reports_published) ... ok +test_bom_counts_root_children_and_repeated_identity (test_mechanical.Safety.test_bom_counts_root_children_and_repeated_identity) ... ok +test_child_revision_changes_target_even_when_root_unchanged (test_mechanical.Safety.test_child_revision_changes_target_even_when_root_unchanged) ... ok +test_compute_false_and_warning_are_not_healthy (test_mechanical.Safety.test_compute_false_and_warning_are_not_healthy) ... ok +test_document_creation_id_and_name_cannot_select_copy (test_mechanical.Safety.test_document_creation_id_and_name_cannot_select_copy) ... ok +test_failed_parameter_edit_restores_original_with_readback (test_mechanical.Safety.test_failed_parameter_edit_restores_original_with_readback) ... ok +test_mass_includes_root_and_does_not_merge_same_names (test_mechanical.Safety.test_mass_includes_root_and_does_not_merge_same_names) ... ok +test_occurrence_suppression_comes_from_timeline_not_occurrence (test_mechanical.Safety.test_occurrence_suppression_comes_from_timeline_not_occurrence) ... ok +test_old_session_and_invalid_boolean_fail_before_handler (test_mechanical.Safety.test_old_session_and_invalid_boolean_fail_before_handler) ... ok +test_repeat_id_returns_original_after_timeout_and_conflict_refuses (test_mechanical.Safety.test_repeat_id_returns_original_after_timeout_and_conflict_refuses) ... ok +test_stale_and_ambiguous_tokens_refuse (test_mechanical.Safety.test_stale_and_ambiguous_tokens_refuse) ... ok +test_transport_metadata_is_excluded_from_payload_and_retry_fingerprint (test_mechanical.Safety.test_transport_metadata_is_excluded_from_payload_and_retry_fingerprint) ... ok +test_fast_event_is_registered_before_fire (test_mechanical.Transport.test_fast_event_is_registered_before_fire) ... ok +test_bom_cleanup_failure_after_publication_stays_successful (test_mechanical_assemblies.AssemblyBOM.test_bom_cleanup_failure_after_publication_stays_successful) ... ok +test_bom_declares_and_uses_high_accuracy_for_all_physical_rows (test_mechanical_assemblies.AssemblyBOM.test_bom_declares_and_uses_high_accuracy_for_all_physical_rows) ... ok +test_flat_and_structured_csv_retain_provenance_and_parent_paths (test_mechanical_assemblies.AssemblyBOM.test_flat_and_structured_csv_retain_provenance_and_parent_paths) ... ok +test_nested_repeated_definitions_and_root_mass_count_once (test_mechanical_assemblies.AssemblyBOM.test_nested_repeated_definitions_and_root_mass_count_once) ... ok +test_physical_walk_detects_cycle_hidden_by_purchased_collapse (test_mechanical_assemblies.AssemblyBOM.test_physical_walk_detects_cycle_hidden_by_purchased_collapse) ... ok +test_purchased_collapse_and_exclusion_do_not_change_physical_mass (test_mechanical_assemblies.AssemblyBOM.test_purchased_collapse_and_exclusion_do_not_change_physical_mass) ... ok +test_component_duplicate_wrappers_resolve_by_api_equality_only (test_mechanical_assemblies.AssemblySelection.test_component_duplicate_wrappers_resolve_by_api_equality_only) ... ok +test_definition_geometry_without_instance_context_refuses (test_mechanical_assemblies.AssemblySelection.test_definition_geometry_without_instance_context_refuses) ... ok +test_explicit_root_reference_roundtrips_without_token_lookup (test_mechanical_assemblies.AssemblySelection.test_explicit_root_reference_roundtrips_without_token_lookup) ... ok +test_independent_copy_applies_requested_pose_and_rejects_recompute_reset (test_mechanical_assemblies.AssemblySelection.test_independent_copy_applies_requested_pose_and_rejects_recompute_reset) ... ok +test_initial_placement_refused_set_and_capture_failure_are_not_success (test_mechanical_assemblies.AssemblySelection.test_initial_placement_refused_set_and_capture_failure_are_not_success) ... ok +test_interference_body_budget_is_shared_across_occurrence_selections (test_mechanical_assemblies.AssemblySelection.test_interference_body_budget_is_shared_across_occurrence_selections) ... ok +test_interference_parent_and_contained_body_refuse_before_analysis (test_mechanical_assemblies.AssemblySelection.test_interference_parent_and_contained_body_refuse_before_analysis) ... ok +test_nested_creation_returns_every_placed_context_without_local_tokens (test_mechanical_assemblies.AssemblySelection.test_nested_creation_returns_every_placed_context_without_local_tokens) ... ok +test_degenerate_edge_without_curve_keeps_vertex_witness (test_mechanical_assemblies.ImportedTopology.test_degenerate_edge_without_curve_keeps_vertex_witness) ... ok +test_imported_feature_unavailable_index_retains_state_and_order (test_mechanical_assemblies.ImportedTopology.test_imported_feature_unavailable_index_retains_state_and_order) ... ok +test_degree_and_mm_limits_convert_without_enabling_unrequested_axes (test_mechanical_assemblies.JointLimits.test_degree_and_mm_limits_convert_without_enabling_unrequested_axes) ... ok +test_implicit_limit_enable_is_verified_and_explicit_false_is_preserved (test_mechanical_assemblies.JointLimits.test_implicit_limit_enable_is_verified_and_explicit_false_is_preserved) ... ok +test_inverted_or_outside_rest_limits_refuse_before_changes (test_mechanical_assemblies.JointLimits.test_inverted_or_outside_rest_limits_refuse_before_changes) ... ok +test_joint_and_group_rename_suppression_must_read_back (test_mechanical_assemblies.JointLimits.test_joint_and_group_rename_suppression_must_read_back) ... ok +test_joint_drive_capture_failure_does_not_report_success (test_mechanical_assemblies.JointLimits.test_joint_drive_capture_failure_does_not_report_success) ... ok +test_joint_drive_captures_once_after_all_axes_without_changing_rest (test_mechanical_assemblies.JointLimits.test_joint_drive_captures_once_after_all_axes_without_changing_rest) ... ok +test_joint_suppression_captures_pending_state_in_both_directions (test_mechanical_assemblies.JointLimits.test_joint_suppression_captures_pending_state_in_both_directions) ... ok +test_motion_base_wrapper_is_cast_and_limits_change_witness (test_mechanical_assemblies.JointLimits.test_motion_base_wrapper_is_cast_and_limits_change_witness) ... ok +test_rigid_group_suppression_captures_pending_state_and_checks_readback (test_mechanical_assemblies.JointLimits.test_rigid_group_suppression_captures_pending_state_and_checks_readback) ... ok +test_schema_requires_joint_geometry_and_rejects_wrong_motion_fields (test_mechanical_assemblies.JointLimits.test_schema_requires_joint_geometry_and_rejects_wrong_motion_fields) ... ok +test_nested_body_uses_same_occurrence_context_resolution (test_mechanical_assemblies.MetadataAndImports.test_nested_body_uses_same_occurrence_context_resolution) ... ok +test_occurrence_path_disambiguates_shared_nested_definition (test_mechanical_assemblies.MetadataAndImports.test_occurrence_path_disambiguates_shared_nested_definition) ... ok +test_same_name_wrong_material_id_cannot_pass_assignment_readback (test_mechanical_assemblies.MetadataAndImports.test_same_name_wrong_material_id_cannot_pass_assignment_readback) ... ok +test_supplier_import_hash_mismatch_and_credentials_refuse_before_model (test_mechanical_assemblies.MetadataAndImports.test_supplier_import_hash_mismatch_and_credentials_refuse_before_model) ... ok +test_witness_changes_for_supplier_grounding_and_material (test_mechanical_assemblies.MetadataAndImports.test_witness_changes_for_supplier_grounding_and_material) ... ok +test_active_row_and_graph_links_are_witnessed_even_with_equal_values (test_mechanical_configurations.Configurations.test_active_row_and_graph_links_are_witnessed_even_with_equal_values) ... ok +test_bad_cell_address_and_duplicate_ids_and_budget_never_claim_complete (test_mechanical_configurations.Configurations.test_bad_cell_address_and_duplicate_ids_and_budget_never_claim_complete) ... ok +test_bare_number_in_default_seconds_is_not_proof_of_unitless (test_mechanical_configurations.Configurations.test_bare_number_in_default_seconds_is_not_proof_of_unitless) ... ok +test_both_csv_modes_stamp_target_and_active_configuration_without_activation (test_mechanical_configurations.Configurations.test_both_csv_modes_stamp_target_and_active_configuration_without_activation) ... ok +test_child_model_parameter_owner_is_native_component_and_user_parameter_is_design_scoped (test_mechanical_configurations.Configurations.test_child_model_parameter_owner_is_native_component_and_user_parameter_is_design_scoped) ... ok +test_complete_configured_design_still_refuses_indirect_model_writes_before_native_gate (test_mechanical_configurations.Configurations.test_complete_configured_design_still_refuses_indirect_model_writes_before_native_gate) ... ok +test_conversion_error_sentinel_cannot_become_a_valid_value (test_mechanical_configurations.Configurations.test_conversion_error_sentinel_cannot_become_a_valid_value) ... ok +test_discovery_exposes_only_read_operation_and_rejects_configuration_writes (test_mechanical_configurations.Configurations.test_discovery_exposes_only_read_operation_and_rejects_configuration_writes) ... ok +test_explicit_effective_suppression_and_visibility_remain_distinct (test_mechanical_configurations.Configurations.test_explicit_effective_suppression_and_visibility_remain_distinct) ... ok +test_external_configuration_blocks_standard_design_mutations (test_mechanical_configurations.Configurations.test_external_configuration_blocks_standard_design_mutations) ... ok +test_generated_configuration_identity_is_bound_and_all_strict_paths_refuse (test_mechanical_configurations.Configurations.test_generated_configuration_identity_is_bound_and_all_strict_paths_refuse) ... ok +test_inactive_cell_change_invalidates_revision_and_recovery_witness (test_mechanical_configurations.Configurations.test_inactive_cell_change_invalidates_revision_and_recovery_witness) ... ok +test_incomplete_scopes_refuse_before_transaction_or_compute (test_mechanical_configurations.Configurations.test_incomplete_scopes_refuse_before_transaction_or_compute) ... ok +test_invalidated_source_wrapper_rebinds_by_fresh_api_equality (test_mechanical_configurations.Configurations.test_invalidated_source_wrapper_rebinds_by_fresh_api_equality) ... ok +test_missing_configured_flag_is_unknown_and_refuses_strict_witness (test_mechanical_configurations.Configurations.test_missing_configured_flag_is_unknown_and_refuses_strict_witness) ... ok +test_missing_or_contradictory_single_configuration_identity_cannot_be_complete (test_mechanical_configurations.Configurations.test_missing_or_contradictory_single_configuration_identity_cannot_be_complete) ... ok +test_missing_preview_getters_keep_stable_cells_but_never_authorize_writes (test_mechanical_configurations.Configurations.test_missing_preview_getters_keep_stable_cells_but_never_authorize_writes) ... ok +test_missing_reserved_cell_address_retains_all_other_cells_and_blocks_witness (test_mechanical_configurations.Configurations.test_missing_reserved_cell_address_retains_all_other_cells_and_blocks_witness) ... ok +test_numeric_and_text_cells_use_separate_native_getters_and_units (test_mechanical_configurations.Configurations.test_numeric_and_text_cells_use_separate_native_getters_and_units) ... ok +test_offline_property_cells_and_unreadable_source_preserve_remaining_cells (test_mechanical_configurations.Configurations.test_offline_property_cells_and_unreadable_source_preserve_remaining_cells) ... ok +test_reserved_row_is_separate_and_complete_cell_graph_drives_stale_guard (test_mechanical_configurations.Configurations.test_reserved_row_is_separate_and_complete_cell_graph_drives_stale_guard) ... ok +test_reserved_row_overlap_flags_hierarchy_and_count_mismatch_remain_incomplete (test_mechanical_configurations.Configurations.test_reserved_row_overlap_flags_hierarchy_and_count_mismatch_remain_incomplete) ... ok +test_same_property_id_on_distinct_owner_does_not_merge (test_mechanical_configurations.Configurations.test_same_property_id_on_distinct_owner_does_not_merge) ... ok +test_signed_values_including_minus_one_survive_verified_linear_units (test_mechanical_configurations.Configurations.test_signed_values_including_minus_one_survive_verified_linear_units) ... ok +test_unconfigured_preserves_normal_read_and_never_requests_table (test_mechanical_configurations.Configurations.test_unconfigured_preserves_normal_read_and_never_requests_table) ... ok +test_unsupported_units_refuse_instead_of_accepting_fallback_conversion (test_mechanical_configurations.Configurations.test_unsupported_units_refuse_instead_of_accepting_fallback_conversion) ... ok +test_angle_apex_and_degenerate_witness_validation (test_mechanical_everyday.Boundaries.test_angle_apex_and_degenerate_witness_validation) ... ok +test_component_near_copies_trimmed_brep_and_binds_reversed_native_witness (test_mechanical_everyday.Boundaries.test_component_near_copies_trimmed_brep_and_binds_reversed_native_witness) ... ok +test_component_vertex_near_uses_native_point_without_brep_copy (test_mechanical_everyday.Boundaries.test_component_vertex_near_uses_native_point_without_brep_copy) ... ok +test_constraint_retarget_at_intersection_changes_recovery_graph (test_mechanical_everyday.Boundaries.test_constraint_retarget_at_intersection_changes_recovery_graph) ... ok +test_construction_axis_cross_component_creation_context_required (test_mechanical_everyday.Boundaries.test_construction_axis_cross_component_creation_context_required) ... ok +test_dimension_retarget_and_orientation_change_are_witnessed (test_mechanical_everyday.Boundaries.test_dimension_retarget_and_orientation_change_are_witnessed) ... ok +test_distance_units_and_witness_mismatch (test_mechanical_everyday.Boundaries.test_distance_units_and_witness_mismatch) ... ok +test_empty_trim_requires_explicit_delete_and_empty_break_is_failure (test_mechanical_everyday.Boundaries.test_empty_trim_requires_explicit_delete_and_empty_break_is_failure) ... ok +test_flag_changes_and_collection_reordering_do_not_prove_curve_edit (test_mechanical_everyday.Boundaries.test_flag_changes_and_collection_reordering_do_not_prove_curve_edit) ... ok +test_in_place_extend_returns_fresh_original_only_after_persistent_change (test_mechanical_everyday.Boundaries.test_in_place_extend_returns_fresh_original_only_after_persistent_change) ... ok +test_measurement_rejects_definition_and_unrooted_context (test_mechanical_everyday.Boundaries.test_measurement_rejects_definition_and_unrooted_context) ... ok +test_new_schemas_require_frame_and_forbid_boolean_quantities (test_mechanical_everyday.Boundaries.test_new_schemas_require_frame_and_forbid_boolean_quantities) ... ok +test_offset_flow_order_is_preserved_and_disconnection_refused (test_mechanical_everyday.Boundaries.test_offset_flow_order_is_preserved_and_disconnection_refused) ... ok +test_offset_signed_request_and_postcompute_reset_refused (test_mechanical_everyday.Boundaries.test_offset_signed_request_and_postcompute_reset_refused) ... ok +test_parallel_line_plane_fallback_uses_world_sketch_geometry (test_mechanical_everyday.Boundaries.test_parallel_line_plane_fallback_uses_world_sketch_geometry) ... ok +test_parallel_native_zero_witness_uses_geometry_without_inventing_points (test_mechanical_everyday.Boundaries.test_parallel_native_zero_witness_uses_geometry_without_inventing_points) ... ok +test_query_ambiguity_empty_budget_and_inapplicable_filter_fail (test_mechanical_everyday.Boundaries.test_query_ambiguity_empty_budget_and_inapplicable_filter_fail) ... ok +test_query_uses_rotated_root_normals_and_keeps_instance_refs (test_mechanical_everyday.Boundaries.test_query_uses_rotated_root_normals_and_keeps_instance_refs) ... ok +test_returned_curve_cannot_hide_no_persistent_change (test_mechanical_everyday.Boundaries.test_returned_curve_cannot_hide_no_persistent_change) ... ok +test_spline_recovery_witness_observes_shape_beyond_endpoints (test_mechanical_everyday.Boundaries.test_spline_recovery_witness_observes_shape_beyond_endpoints) ... ok +test_unreadable_or_foreign_graph_fails_before_witness_can_claim_recovery (test_mechanical_everyday.Boundaries.test_unreadable_or_foreign_graph_fails_before_witness_can_claim_recovery) ... ok +test_unrelated_sketch_change_cannot_hide_selected_curve_noop (test_mechanical_everyday.Boundaries.test_unrelated_sketch_change_cannot_hide_selected_curve_noop) ... ok +test_base_wrappers_cast_before_reading_occurrence_context_or_geometry (test_mechanical_regular_joints.Boundaries.test_base_wrappers_cast_before_reading_occurrence_context_or_geometry) ... ok +test_custom_motion_axis_graph_detects_coincident_source_retargeting (test_mechanical_regular_joints.Boundaries.test_custom_motion_axis_graph_detects_coincident_source_retargeting) ... ok +test_existing_rigid_false_edit_skips_setter_but_still_checks_readback (test_mechanical_regular_joints.Boundaries.test_existing_rigid_false_edit_skips_setter_but_still_checks_readback) ... ok +test_frame_validation_rejects_nan_scale_and_left_handed_frame (test_mechanical_regular_joints.Boundaries.test_frame_validation_rejects_nan_scale_and_left_handed_frame) ... ok +test_fresh_attachment_verification_does_not_read_retained_input_or_switch_source_context (test_mechanical_regular_joints.Boundaries.test_fresh_attachment_verification_does_not_read_retained_input_or_switch_source_context) ... ok +test_geometry_keypoints_and_edge_ownership_fail_before_factory (test_mechanical_regular_joints.Boundaries.test_geometry_keypoints_and_edge_ownership_fail_before_factory) ... ok +test_inferred_motion_is_explicitly_refused (test_mechanical_regular_joints.Boundaries.test_inferred_motion_is_explicitly_refused) ... ok +test_initial_alignment_refuses_equal_distance_wrong_axis_and_no_solve (test_mechanical_regular_joints.Boundaries.test_initial_alignment_refuses_equal_distance_wrong_axis_and_no_solve) ... ok +test_integrated_joint_data_has_consistent_matrix_units_and_keeps_asbuilt_contract (test_mechanical_regular_joints.Boundaries.test_integrated_joint_data_has_consistent_matrix_units_and_keeps_asbuilt_contract) ... ok +test_link_drive_checks_partner_delta_and_preserves_original_ratio (test_mechanical_regular_joints.Boundaries.test_link_drive_checks_partner_delta_and_preserves_original_ratio) ... ok +test_link_motion_rejects_rigid_or_wrong_axis_before_api (test_mechanical_regular_joints.Boundaries.test_link_motion_rejects_rigid_or_wrong_axis_before_api) ... ok +test_link_readback_retains_native_second_member_and_explicit_same_joint_flag (test_mechanical_regular_joints.Boundaries.test_link_readback_retains_native_second_member_and_explicit_same_joint_flag) ... ok +test_link_result_refuses_membership_ratio_or_flag_mismatch (test_mechanical_regular_joints.Boundaries.test_link_result_refuses_membership_ratio_or_flag_mismatch) ... ok +test_locked_moving_to_rigid_redefinition_has_no_unlock_setter_before_or_after_roll (test_mechanical_regular_joints.Boundaries.test_locked_moving_to_rigid_redefinition_has_no_unlock_setter_before_or_after_roll) ... ok +test_motion_link_ratio_edit_keeps_item_evaluated_and_never_rolls_before_it (test_mechanical_regular_joints.Boundaries.test_motion_link_ratio_edit_keeps_item_evaluated_and_never_rolls_before_it) ... ok +test_moving_create_uses_native_lock_setter_and_checks_persisted_flag (test_mechanical_regular_joints.Boundaries.test_moving_create_uses_native_lock_setter_and_checks_persisted_flag) ... ok +test_native_definition_selector_refuses_foreign_and_proxy (test_mechanical_regular_joints.Boundaries.test_native_definition_selector_refuses_foreign_and_proxy) ... ok +test_native_joint_frames_are_not_transformed_again_or_called_physical_orientation (test_mechanical_regular_joints.Boundaries.test_native_joint_frames_are_not_transformed_again_or_called_physical_orientation) ... ok +test_native_origin_geometry_proxy_accepts_exact_definition_only (test_mechanical_regular_joints.Boundaries.test_native_origin_geometry_proxy_accepts_exact_definition_only) ... ok +test_new_schemas_register_and_require_real_geometry (test_mechanical_regular_joints.Boundaries.test_new_schemas_register_and_require_real_geometry) ... ok +test_origin_creation_verifies_explicitly_applied_default_flip (test_mechanical_regular_joints.Boundaries.test_origin_creation_verifies_explicitly_applied_default_flip) ... ok +test_pair_accepts_repeated_definition_instances_but_not_same_or_ancestor (test_mechanical_regular_joints.Boundaries.test_pair_accepts_repeated_definition_instances_but_not_same_or_ancestor) ... ok +test_parameter_readback_is_not_expression_or_display_name_equality (test_mechanical_regular_joints.Boundaries.test_parameter_readback_is_not_expression_or_display_name_equality) ... ok +test_pose_readback_uses_root_mm_and_refuses_grounded_movement (test_mechanical_regular_joints.Boundaries.test_pose_readback_uses_root_mm_and_refuses_grounded_movement) ... ok +test_ratio_only_edit_cannot_reset_omitted_reversal_or_motion (test_mechanical_regular_joints.Boundaries.test_ratio_only_edit_cannot_reset_omitted_reversal_or_motion) ... ok +test_regular_state_includes_attachment_offsets_and_lock (test_mechanical_regular_joints.Boundaries.test_regular_state_includes_attachment_offsets_and_lock) ... ok +test_requested_axis_readback_for_each_native_motion_family (test_mechanical_regular_joints.Boundaries.test_requested_axis_readback_for_each_native_motion_family) ... ok +test_rigid_create_false_never_calls_native_lock_setter_and_checks_final_flag (test_mechanical_regular_joints.Boundaries.test_rigid_create_false_never_calls_native_lock_setter_and_checks_final_flag) ... ok +test_rigid_edit_requires_an_explicit_change_before_adding_implicit_lock (test_mechanical_regular_joints.Boundaries.test_rigid_edit_requires_an_explicit_change_before_adding_implicit_lock) ... ok +test_rigid_to_moving_applies_lock_at_restored_end_then_captures (test_mechanical_regular_joints.Boundaries.test_rigid_to_moving_applies_lock_at_restored_end_then_captures) ... ok +test_rigid_true_refuses_create_and_edit_before_any_native_mutation (test_mechanical_regular_joints.Boundaries.test_rigid_true_refuses_create_and_edit_before_any_native_mutation) ... ok +test_single_joint_link_accepts_only_null_or_same_native_second_member (test_mechanical_regular_joints.Boundaries.test_single_joint_link_accepts_only_null_or_same_native_second_member) ... ok +test_source_graph_witness_stays_equal_after_compute_but_detects_retargeting (test_mechanical_regular_joints.Boundaries.test_source_graph_witness_stays_equal_after_compute_but_detects_retargeting) ... ok +test_source_identity_survives_invalidated_wrapper_without_token_string_identity (test_mechanical_regular_joints.Boundaries.test_source_identity_survives_invalidated_wrapper_without_token_string_identity) ... ok +test_timeline_restore_refusal_is_reported (test_mechanical_regular_joints.Boundaries.test_timeline_restore_refusal_is_reported) ... ok +test_timeline_restored_after_setter_exception_and_failed_roll (test_mechanical_regular_joints.Boundaries.test_timeline_restored_after_setter_exception_and_failed_roll) ... ok +test_http_status_bypasses_held_main_thread_lock (test_mechanical_transactions.Ledger.test_http_status_bypasses_held_main_thread_lock) ... ok +test_running_operation_status_does_not_wait_for_mutation (test_mechanical_transactions.Ledger.test_running_operation_status_does_not_wait_for_mutation) ... ok +test_acknowledged_abort_does_not_hide_leaked_feature_name (test_mechanical_transactions.ReviewRegressions.test_acknowledged_abort_does_not_hide_leaked_feature_name) ... ok +test_construction_reference_ownership_uses_component (test_mechanical_transactions.ReviewRegressions.test_construction_reference_ownership_uses_component) ... ok +test_inspected_profile_reference_roundtrips (test_mechanical_transactions.ReviewRegressions.test_inspected_profile_reference_roundtrips) ... ok +test_partial_second_direction_refuses_before_pattern_creation (test_mechanical_transactions.ReviewRegressions.test_partial_second_direction_refuses_before_pattern_creation) ... ok +test_rectangular_pattern_disables_implicit_second_direction (test_mechanical_transactions.ReviewRegressions.test_rectangular_pattern_disables_implicit_second_direction) ... ok +test_symmetric_extrusion_passes_requested_taper (test_mechanical_transactions.ReviewRegressions.test_symmetric_extrusion_passes_requested_taper) ... ok +test_move_vector_and_extrude_axis_variants_do_not_conflict (test_mechanical_transactions.Schemas.test_move_vector_and_extrude_axis_variants_do_not_conflict) ... ok +test_parameter_batch_variants_are_strict (test_mechanical_transactions.Schemas.test_parameter_batch_variants_are_strict) ... ok +test_wrong_feature_fields_and_boolean_numbers_refuse (test_mechanical_transactions.Schemas.test_wrong_feature_fields_and_boolean_numbers_refuse) ... ok +test_changed_document_is_never_aborted (test_mechanical_transactions.Transactions.test_changed_document_is_never_aborted) ... ok +test_failed_abort_cannot_claim_recovery (test_mechanical_transactions.Transactions.test_failed_abort_cannot_claim_recovery) ... ok +test_native_failure_diagnostics_survive_transaction_wrapper (test_mechanical_transactions.Transactions.test_native_failure_diagnostics_survive_transaction_wrapper) ... ok +test_partial_batch_is_aborted_and_witness_verified (test_mechanical_transactions.Transactions.test_partial_batch_is_aborted_and_witness_verified) ... ok +test_postcommit_inspection_failure_reports_committed (test_mechanical_transactions.Transactions.test_postcommit_inspection_failure_reports_committed) ... ok +test_result_serialization_failure_aborts_before_commit (test_mechanical_transactions.Transactions.test_result_serialization_failure_aborts_before_commit) ... ok +test_success_retargets_every_nested_reference_after_commit (test_mechanical_transactions.Transactions.test_success_retargets_every_nested_reference_after_commit) ... ok +test_unsupported_transaction_never_runs_mutation (test_mechanical_transactions.Transactions.test_unsupported_transaction_never_runs_mutation) ... ok +test_admission_precedes_native_observation_and_fast_completion_is_durable (test_operation_dispatch.DurableDispatch.test_admission_precedes_native_observation_and_fast_completion_is_durable) ... ok +test_busy_lock_failure_records_no_start_without_custom_event (test_operation_dispatch.DurableDispatch.test_busy_lock_failure_records_no_start_without_custom_event) ... ok +test_concurrent_duplicate_and_status_never_wait_for_native_lock (test_operation_dispatch.DurableDispatch.test_concurrent_duplicate_and_status_never_wait_for_native_lock) ... ok +test_failed_admission_never_fires_event_or_observes_document (test_operation_dispatch.DurableDispatch.test_failed_admission_never_fires_event_or_observes_document) ... ok +test_false_return_retains_waiter_for_a_callback_delivered_later (test_operation_dispatch.DurableDispatch.test_false_return_retains_waiter_for_a_callback_delivered_later) ... ok +test_false_return_with_claimed_execution_times_out_unknown_then_status_completes (test_operation_dispatch.DurableDispatch.test_false_return_with_claimed_execution_times_out_unknown_then_status_completes) ... ok +test_false_without_callback_expires_and_exception_uses_delivery_failure (test_operation_dispatch.DurableDispatch.test_false_without_callback_expires_and_exception_uses_delivery_failure) ... ok +test_false_without_callback_timeout_prevents_late_native_execution (test_operation_dispatch.DurableDispatch.test_false_without_callback_timeout_prevents_late_native_execution) ... ok +test_fast_completed_handler_wins_over_late_false_delivery_return (test_operation_dispatch.DurableDispatch.test_fast_completed_handler_wins_over_late_false_delivery_return) ... ok +test_initialization_flush_failure_never_publishes_or_dispatches (test_operation_dispatch.DurableDispatch.test_initialization_flush_failure_never_publishes_or_dispatches) ... ok +test_invalid_stale_dispatch_identity_is_refused_before_document_observation (test_operation_dispatch.DurableDispatch.test_invalid_stale_dispatch_identity_is_refused_before_document_observation) ... ok +test_real_document_observer_refuses_worker_thread_before_api_access (test_operation_dispatch.DurableDispatch.test_real_document_observer_refuses_worker_thread_before_api_access) ... ok +test_terminal_completion_wins_between_waiter_removal_and_timeout_cas (test_operation_dispatch.DurableDispatch.test_terminal_completion_wins_between_waiter_removal_and_timeout_cas) ... ok +test_terminal_persistence_failure_returns_unknown_and_never_reexecutes (test_operation_dispatch.DurableDispatch.test_terminal_persistence_failure_returns_unknown_and_never_reexecutes) ... ok +test_timeout_preserves_claimed_execution_and_later_terminal_result (test_operation_dispatch.DurableDispatch.test_timeout_preserves_claimed_execution_and_later_terminal_result) ... ok +test_timeout_terminalizes_never_delivered_event_and_late_event_cannot_start (test_operation_dispatch.DurableDispatch.test_timeout_terminalizes_never_delivered_event_and_late_event_cannot_start) ... ok +test_timeout_wins_after_alive_check_before_execution_claim (test_operation_dispatch.DurableDispatch.test_timeout_wins_after_alive_check_before_execution_claim) ... ok +test_changed_canonical_request_is_refused_before_native_claim (test_operation_history.DurableHistory.test_changed_canonical_request_is_refused_before_native_claim) ... ok +test_commit_succeeded_but_acknowledgement_lost_is_reconciled_from_disk (test_operation_history.DurableHistory.test_commit_succeeded_but_acknowledgement_lost_is_reconciled_from_disk) ... ok +test_confirmed_skip_and_generation_conflict_have_no_native_execution_claim (test_operation_history.DurableHistory.test_confirmed_skip_and_generation_conflict_have_no_native_execution_claim) ... ok +test_conflicting_submitted_digest_is_rejected_without_changing_original_execution (test_operation_history.DurableHistory.test_conflicting_submitted_digest_is_rejected_without_changing_original_execution) ... ok +test_delivery_failure_racing_started_handler_stays_unknown_if_persistence_fails (test_operation_history.DurableHistory.test_delivery_failure_racing_started_handler_stays_unknown_if_persistence_fails) ... ok +test_dispatch_commit_failure_status_retains_known_no_start_without_durable_terminal_claim (test_operation_history.DurableHistory.test_dispatch_commit_failure_status_retains_known_no_start_without_durable_terminal_claim) ... ok +test_duplicate_admission_storage_fault_preserves_running_or_observed_execution (test_operation_history.DurableHistory.test_duplicate_admission_storage_fault_preserves_running_or_observed_execution) ... ok +test_duplicate_start_or_delivery_fault_cannot_erase_observed_execution (test_operation_history.DurableHistory.test_duplicate_start_or_delivery_fault_cannot_erase_observed_execution) ... ok +test_large_or_non_json_observation_cannot_break_failure_serialization (test_operation_history.DurableHistory.test_large_or_non_json_observation_cannot_break_failure_serialization) ... ok +test_lost_admission_acknowledgement_requires_reconciliation_without_redispatch (test_operation_history.DurableHistory.test_lost_admission_acknowledgement_requires_reconciliation_without_redispatch) ... ok +test_lost_waiter_cannot_overwrite_started_or_terminal_work (test_operation_history.DurableHistory.test_lost_waiter_cannot_overwrite_started_or_terminal_work) ... ok +test_old_event_cannot_mark_previous_session_history_not_executed (test_operation_history.DurableHistory.test_old_event_cannot_mark_previous_session_history_not_executed) ... ok +test_old_session_history_is_queryable_but_never_readmitted (test_operation_history.DurableHistory.test_old_session_history_is_queryable_but_never_readmitted) ... ok +test_random_outage_ids_never_allocate_unbounded_failure_metadata (test_operation_history.DurableHistory.test_random_outage_ids_never_allocate_unbounded_failure_metadata) ... ok +test_start_commit_failure_never_reports_running_forever (test_operation_history.DurableHistory.test_start_commit_failure_never_reports_running_forever) ... ok +test_terminal_persistence_failure_preserves_observed_native_result_without_rollback_claim (test_operation_history.DurableHistory.test_terminal_persistence_failure_preserves_observed_native_result_without_rollback_claim) ... ok +test_unproven_conflict_exception_does_not_assert_no_execution (test_operation_history.DurableHistory.test_unproven_conflict_exception_does_not_assert_no_execution) ... ok +test_caller_mutation_cannot_rewrite_admitted_target_or_digest (test_operation_journal.DurableJournal.test_caller_mutation_cannot_rewrite_admitted_target_or_digest) ... ok +test_capacity_never_evicts_old_entries_or_rejects_valid_lookup (test_operation_journal.DurableJournal.test_capacity_never_evicts_old_entries_or_rejects_valid_lookup) ... ok +test_commit_failure_never_returns_claimed_and_preserves_prior_phase (test_operation_journal.DurableJournal.test_commit_failure_never_returns_claimed_and_preserves_prior_phase) ... ok +test_complete_record_survives_new_journal_instance_with_exact_identity_and_result (test_operation_journal.DurableJournal.test_complete_record_survives_new_journal_instance_with_exact_identity_and_result) ... ok +test_corrupted_record_blocks_lookup_and_unrelated_new_admission (test_operation_journal.DurableJournal.test_corrupted_record_blocks_lookup_and_unrelated_new_admission) ... ok +test_duplicate_admission_and_argument_conflict_are_atomic_across_instances (test_operation_journal.DurableJournal.test_duplicate_admission_and_argument_conflict_are_atomic_across_instances) ... ok +test_each_crash_boundary_remains_nonterminal_without_automatic_progress (test_operation_journal.DurableJournal.test_each_crash_boundary_remains_nonterminal_without_automatic_progress) ... ok +test_external_hardlink_is_refused_even_when_database_is_valid (test_operation_journal.DurableJournal.test_external_hardlink_is_refused_even_when_database_is_valid) ... ok +test_false_success_and_out_of_order_terminal_state_are_rejected (test_operation_journal.DurableJournal.test_false_success_and_out_of_order_terminal_state_are_rejected) ... ok +test_first_lookup_recovers_hot_rollback_journal_after_real_process_exit (test_operation_journal.DurableJournal.test_first_lookup_recovers_hot_rollback_journal_after_real_process_exit) ... ok +test_initialization_flush_uses_writable_descriptor_before_publication (test_operation_journal.DurableJournal.test_initialization_flush_uses_writable_descriptor_before_publication) ... ok +test_invalid_paths_and_linked_database_refuse (test_operation_journal.DurableJournal.test_invalid_paths_and_linked_database_refuse) ... ok +test_lookup_missing_history_has_no_filesystem_side_effect (test_operation_journal.DurableJournal.test_lookup_missing_history_has_no_filesystem_side_effect) ... ok +test_only_one_generation_claims_dispatch_and_execution (test_operation_journal.DurableJournal.test_only_one_generation_claims_dispatch_and_execution) ... ok +test_published_initial_database_is_usable_before_staging_link_cleanup (test_operation_journal.DurableJournal.test_published_initial_database_is_usable_before_staging_link_cleanup) ... ok +test_terminal_record_size_failure_keeps_executing_evidence (test_operation_journal.DurableJournal.test_terminal_record_size_failure_keeps_executing_evidence) ... ok +test_wrong_storage_version_is_not_migrated_or_reset (test_operation_journal.DurableJournal.test_wrong_storage_version_is_not_migrated_or_reset) ... ok +test_cold_endpoint_refuses_without_retry_or_repair (test_operation_status_route.StatusRoute.test_cold_endpoint_refuses_without_retry_or_repair) ... ok +test_native_failure_is_preserved_and_bad_transport_is_unknown (test_operation_status_route.StatusRoute.test_native_failure_is_preserved_and_bad_transport_is_unknown) ... ok +test_other_commands_keep_the_existing_dispatch_path (test_operation_status_route.StatusRoute.test_other_commands_keep_the_existing_dispatch_path) ... ok +test_public_and_internal_aliases_bypass_all_lifecycle_and_busy_functions (test_operation_status_route.StatusRoute.test_public_and_internal_aliases_bypass_all_lifecycle_and_busy_functions) ... ok +test_transport_timeout_does_not_diagnose_or_retry (test_operation_status_route.StatusRoute.test_transport_timeout_does_not_diagnose_or_retry) ... ok +test_trickled_reply_cannot_extend_total_deadline (test_operation_status_route.StatusRoute.test_trickled_reply_cannot_extend_total_deadline) ... ok +test_binding_also_reached_elsewhere_is_rejected (test_portable_tree.DependencyGateTests.test_binding_also_reached_elsewhere_is_rejected) ... ok +test_existing_portable_tls_path_is_reported (test_portable_tree.DependencyGateTests.test_existing_portable_tls_path_is_reported) ... ok +test_missing_or_malformed_tree_fails (test_portable_tree.DependencyGateTests.test_missing_or_malformed_tree_fails) ... ok +test_nonbinding_added_beneath_ring_does_not_grant_blanket_exception (test_portable_tree.DependencyGateTests.test_nonbinding_added_beneath_ring_does_not_grant_blanket_exception) ... ok +test_unreviewed_transitive_binding_is_rejected (test_portable_tree.DependencyGateTests.test_unreviewed_transitive_binding_is_rejected) ... ok +test_axial_follower_drift_cannot_pass_matching_joint_values_and_rotation (test_ralph_assemblies.CoupledPhysicalAnchorTests.test_axial_follower_drift_cannot_pass_matching_joint_values_and_rotation) ... ok +test_existing_attachment_offset_is_not_accepted_as_a_valid_baseline (test_ralph_assemblies.CoupledPhysicalAnchorTests.test_existing_attachment_offset_is_not_accepted_as_a_valid_baseline) ... ok +test_lateral_driver_drift_cannot_pass_matching_joint_values_and_rotation (test_ralph_assemblies.CoupledPhysicalAnchorTests.test_lateral_driver_drift_cannot_pass_matching_joint_values_and_rotation) ... ok +test_true_off_origin_rotation_changes_translation_but_keeps_anchor (test_ralph_assemblies.CoupledPhysicalAnchorTests.test_true_off_origin_rotation_changes_translation_but_keeps_anchor) ... ok +test_fixed_old_baseline_wrong_follower_delta_is_rejected (test_ralph_assemblies.CoupledStepTests.test_fixed_old_baseline_wrong_follower_delta_is_rejected) ... ok +test_native_resolved_baseline_replaces_old_driver_assumption (test_ralph_assemblies.CoupledStepTests.test_native_resolved_baseline_replaces_old_driver_assumption) ... ok +test_physical_z_oracle_refuses_flipped_fixture (test_ralph_assemblies.CoupledStepTests.test_physical_z_oracle_refuses_flipped_fixture) ... ok +test_positive_ratio_uses_post_unsuppression_baseline (test_ralph_assemblies.CoupledStepTests.test_positive_ratio_uses_post_unsuppression_baseline) ... ok +test_uncoupled_follower_is_rejected (test_ralph_assemblies.CoupledStepTests.test_uncoupled_follower_is_rejected) ... ok +test_wrong_final_driver_target_is_rejected (test_ralph_assemblies.CoupledStepTests.test_wrong_final_driver_target_is_rejected) ... ok +test_wrong_signed_physical_direction_cannot_pass_magnitude (test_ralph_assemblies.CoupledStepTests.test_wrong_signed_physical_direction_cannot_pass_magnitude) ... ok +test_compute_success_does_not_override_unhealthy_native_joint (test_ralph_assemblies.DeleteOutcomeTests.test_compute_success_does_not_override_unhealthy_native_joint) ... ok +test_failed_delete_requires_complete_graph_restore (test_ralph_assemblies.DeleteOutcomeTests.test_failed_delete_requires_complete_graph_restore) ... ok +test_referenced_origin_requires_public_mutation_refusal (test_ralph_assemblies.DeleteOutcomeTests.test_referenced_origin_requires_public_mutation_refusal) ... ok +test_ambiguous_operation_blocks_native_graph_probe (test_ralph_assemblies.EntryTests.test_ambiguous_operation_blocks_native_graph_probe) ... ok +test_incomplete_run_refuses_before_campaign (test_ralph_assemblies.EntryTests.test_incomplete_run_refuses_before_campaign) ... ok +test_plan_never_constructs_live_campaign (test_ralph_assemblies.EntryTests.test_plan_never_constructs_live_campaign) ... ok +test_recovery_uses_assembly_graph_witness (test_ralph_assemblies.EntryTests.test_recovery_uses_assembly_graph_witness) ... ok +test_rich_witness_injected_before_lifecycle_guard (test_ralph_assemblies.EntryTests.test_rich_witness_injected_before_lifecycle_guard) ... ok +test_asbuilt_attachment_and_frame_are_in_recovery_graph (test_ralph_assemblies.GraphTests.test_asbuilt_attachment_and_frame_are_in_recovery_graph) ... ok +test_asbuilt_health_reads_timeline_without_fake_direct_properties (test_ralph_assemblies.GraphTests.test_asbuilt_health_reads_timeline_without_fake_direct_properties) ... ok +test_asbuilt_missing_timeline_health_refuses (test_ralph_assemblies.GraphTests.test_asbuilt_missing_timeline_health_refuses) ... ok +test_attachment_retarget_identical_geometry_changes_witness (test_ralph_assemblies.GraphTests.test_attachment_retarget_identical_geometry_changes_witness) ... ok +test_compute_failed_health_changes_witness (test_ralph_assemblies.GraphTests.test_compute_failed_health_changes_witness) ... ok +test_duplicate_component_names_refuse_graph (test_ralph_assemblies.GraphTests.test_duplicate_component_names_refuse_graph) ... ok +test_foreign_attachment_refuses_graph (test_ralph_assemblies.GraphTests.test_foreign_attachment_refuses_graph) ... ok +test_joint_angle_value_changes_even_same_expression (test_ralph_assemblies.GraphTests.test_joint_angle_value_changes_even_same_expression) ... ok +test_link_membership_and_ratio_are_native_evidence (test_ralph_assemblies.GraphTests.test_link_membership_and_ratio_are_native_evidence) ... ok +test_native_origin_source_context_is_definition_scoped (test_ralph_assemblies.GraphTests.test_native_origin_source_context_is_definition_scoped) ... ok +test_occurrence_grounding_changes_witness (test_ralph_assemblies.GraphTests.test_occurrence_grounding_changes_witness) ... ok +test_occurrence_retarget_same_definition_changes_witness (test_ralph_assemblies.GraphTests.test_occurrence_retarget_same_definition_changes_witness) ... ok +test_origin_frame_change_is_not_hidden_by_definition_normalization (test_ralph_assemblies.GraphTests.test_origin_frame_change_is_not_hidden_by_definition_normalization) ... ok +test_origin_orientation_source_changes_witness (test_ralph_assemblies.GraphTests.test_origin_orientation_source_changes_witness) ... ok +test_timeline_marker_changes_witness (test_ralph_assemblies.GraphTests.test_timeline_marker_changes_witness) ... ok +test_all_eight_recorded_native_occurrence_poses_pass_physical_oracle (test_ralph_assemblies.NumericOracleTests.test_all_eight_recorded_native_occurrence_poses_pass_physical_oracle) ... ok +test_axis_oracle_rejects_zero_nan_and_wrong_direction (test_ralph_assemblies.NumericOracleTests.test_axis_oracle_rejects_zero_nan_and_wrong_direction) ... ok +test_matrix_inverse_roundtrip_rotated_translation (test_ralph_assemblies.NumericOracleTests.test_matrix_inverse_roundtrip_rotated_translation) ... ok +test_native_joint_frame_angle_is_not_accepted_as_body_angle (test_ralph_assemblies.NumericOracleTests.test_native_joint_frame_angle_is_not_accepted_as_body_angle) ... ok +test_omitted_physical_z_flip_is_rejected (test_ralph_assemblies.NumericOracleTests.test_omitted_physical_z_flip_is_rejected) ... ok +test_orientation_check_does_not_accept_translation_only (test_ralph_assemblies.NumericOracleTests.test_orientation_check_does_not_accept_translation_only) ... ok +test_placement_rejects_wrong_actual_pose_even_when_parameters_would_match (test_ralph_assemblies.NumericOracleTests.test_placement_rejects_wrong_actual_pose_even_when_parameters_would_match) ... ok +test_rotation_magnitude_not_parameter_echo (test_ralph_assemblies.NumericOracleTests.test_rotation_magnitude_not_parameter_echo) ... ok +test_additional_fault_or_unverified_restore_never_qualifies (test_ralph_assemblies.SnapshotRefusalTests.test_additional_fault_or_unverified_restore_never_qualifies) ... ok +test_degenerate_face_normal_refused (test_ralph_assemblies.SnapshotRefusalTests.test_degenerate_face_normal_refused) ... ok +test_exact_observed_empty_snapshot_boundary (test_ralph_assemblies.SnapshotRefusalTests.test_exact_observed_empty_snapshot_boundary) ... ok +test_face_center_cannot_hide_tilt (test_ralph_assemblies.SnapshotRefusalTests.test_face_center_cannot_hide_tilt) ... ok +test_lost_or_appended_history_never_qualifies (test_ralph_assemblies.SnapshotRefusalTests.test_lost_or_appended_history_never_qualifies) ... ok +test_unrelated_health_fault_never_qualifies (test_ralph_assemblies.SnapshotRefusalTests.test_unrelated_health_fault_never_qualifies) ... ok +test_arbitrary_appended_feature_is_rejected (test_ralph_assemblies.TimelineEditTests.test_arbitrary_appended_feature_is_rejected) ... ok +test_more_than_one_added_snapshot_is_rejected (test_ralph_assemblies.TimelineEditTests.test_more_than_one_added_snapshot_is_rejected) ... ok +test_no_pending_position_need_not_add_snapshot (test_ralph_assemblies.TimelineEditTests.test_no_pending_position_need_not_add_snapshot) ... ok +test_old_numeric_marker_before_new_end_is_rejected (test_ralph_assemblies.TimelineEditTests.test_old_numeric_marker_before_new_end_is_rejected) ... ok +test_pending_snapshot_is_rejected (test_ralph_assemblies.TimelineEditTests.test_pending_snapshot_is_rejected) ... ok +test_replaced_or_reordered_original_entity_is_rejected (test_ralph_assemblies.TimelineEditTests.test_replaced_or_reordered_original_entity_is_rejected) ... ok +test_snapshot_type_name_without_native_collection_identity_is_rejected (test_ralph_assemblies.TimelineEditTests.test_snapshot_type_name_without_native_collection_identity_is_rejected) ... ok +test_verified_snapshot_can_extend_end (test_ralph_assemblies.TimelineEditTests.test_verified_snapshot_can_extend_end) ... ok +test_inventory_remains_json_after_native_timeline_baseline (test_ralph_assemblies.TimelineRegistryTests.test_inventory_remains_json_after_native_timeline_baseline) ... ok +test_timeline_probe_isolated_by_exact_document_id (test_ralph_assemblies.TimelineRegistryTests.test_timeline_probe_isolated_by_exact_document_id) ... ok +test_busy_refuses_before_pass_through (test_ralph_campaign.BaselineTests.test_busy_refuses_before_pass_through) ... ok +test_cleanup_finally_runs_on_interrupt (test_ralph_campaign.BaselineTests.test_cleanup_finally_runs_on_interrupt) ... ok +test_health_from_wrong_host_refuses (test_ralph_campaign.BaselineTests.test_health_from_wrong_host_refuses) ... ok +test_health_from_wrong_port_refuses (test_ralph_campaign.BaselineTests.test_health_from_wrong_port_refuses) ... ok +test_health_from_wrong_process_refuses (test_ralph_campaign.BaselineTests.test_health_from_wrong_process_refuses) ... ok +test_health_probe_does_not_execute_discovered_executable (test_ralph_campaign.BaselineTests.test_health_probe_does_not_execute_discovered_executable) ... ok +test_multiple_inventory_processes_refuse_before_script (test_ralph_campaign.BaselineTests.test_multiple_inventory_processes_refuse_before_script) ... ok +test_nested_failure_does_not_count_as_success (test_ralph_campaign.BaselineTests.test_nested_failure_does_not_count_as_success) ... ok +test_non_design_refuses_before_preferences (test_ralph_campaign.BaselineTests.test_non_design_refuses_before_preferences) ... ok +test_nonloopback_listener_refuses (test_ralph_campaign.BaselineTests.test_nonloopback_listener_refuses) ... ok +test_observation_baseline_sends_no_mutations (test_ralph_campaign.BaselineTests.test_observation_baseline_sends_no_mutations) ... ok +test_plan_never_constructs_bridge_client (test_ralph_campaign.BaselineTests.test_plan_never_constructs_bridge_client) ... ok +test_sidecar_version_cannot_attest_native_executable (test_ralph_campaign.BaselineTests.test_sidecar_version_cannot_attest_native_executable) ... ok +test_stale_inventory_with_correct_live_version_is_accepted (test_ralph_campaign.BaselineTests.test_stale_inventory_with_correct_live_version_is_accepted) ... ok +test_stopped_refuses_before_launch_gated_queries (test_ralph_campaign.BaselineTests.test_stopped_refuses_before_launch_gated_queries) ... ok +test_wrong_actual_version_refuses_even_when_inventory_matches (test_ralph_campaign.BaselineTests.test_wrong_actual_version_refuses_even_when_inventory_matches) ... ok +test_wrong_host_refuses (test_ralph_campaign.BaselineTests.test_wrong_host_refuses) ... ok +test_wrong_version_refuses_before_native_calls (test_ralph_campaign.BaselineTests.test_wrong_version_refuses_before_native_calls) ... ok +test_zero_documents_never_calls_script_or_preferences (test_ralph_campaign.BaselineTests.test_zero_documents_never_calls_script_or_preferences) ... ok +test_baseline_object_is_never_closed (test_ralph_campaign.NativeGuardTests.test_baseline_object_is_never_closed) ... ok +test_changed_checkpoint_bytes_retains (test_ralph_campaign.NativeGuardTests.test_changed_checkpoint_bytes_retains) ... ok +test_exact_object_closes_despite_creation_id_collision (test_ralph_campaign.NativeGuardTests.test_exact_object_closes_despite_creation_id_collision) ... ok +test_failed_import_identity_keeps_provisional_object (test_ralph_campaign.NativeGuardTests.test_failed_import_identity_keeps_provisional_object) ... ok +test_missing_checkpoint_retains (test_ralph_campaign.NativeGuardTests.test_missing_checkpoint_retains) ... ok +test_model_witness_change_retains (test_ralph_campaign.NativeGuardTests.test_model_witness_change_retains) ... ok +test_saved_owned_document_retains (test_ralph_campaign.NativeGuardTests.test_saved_owned_document_retains) ... ok +test_user_selected_external_document_retains (test_ralph_campaign.NativeGuardTests.test_user_selected_external_document_retains) ... ok +test_wrong_run_marker_retains (test_ralph_campaign.NativeGuardTests.test_wrong_run_marker_retains) ... ok +test_wrong_session_retains (test_ralph_campaign.NativeGuardTests.test_wrong_session_retains) ... ok +test_empty_review_is_not_visual_pass (test_ralph_campaign.VisualTests.test_empty_review_is_not_visual_pass) ... ok +test_nonfinite_native_values_never_match (test_ralph_campaign.VisualTests.test_nonfinite_native_values_never_match) ... ok +test_review_is_bound_to_exact_image_bytes (test_ralph_campaign.VisualTests.test_review_is_bound_to_exact_image_bytes) ... ok +test_unreviewed_image_rejected (test_ralph_campaign.VisualTests.test_unreviewed_image_rejected) ... ok +test_ambiguous_operation_blocks_extra_native_oracles (test_ralph_everyday.EntryTests.test_ambiguous_operation_blocks_extra_native_oracles) ... ok +test_default_plan_never_constructs_campaign (test_ralph_everyday.EntryTests.test_default_plan_never_constructs_campaign) ... ok +test_everyday_recovery_selects_extended_witness_campaign (test_ralph_everyday.EntryTests.test_everyday_recovery_selects_extended_witness_campaign) ... ok +test_incomplete_run_never_constructs_campaign (test_ralph_everyday.EntryTests.test_incomplete_run_never_constructs_campaign) ... ok +test_shared_recovery_default_stays_cp4_campaign (test_ralph_everyday.EntryTests.test_shared_recovery_default_stays_cp4_campaign) ... ok +test_recovery_counts_new_checks_and_preserves_prior_failure (test_ralph_everyday.RecoveryAccountingTests.test_recovery_counts_new_checks_and_preserves_prior_failure) ... ok +test_coincident_retarget_same_geometry_changes_witness (test_ralph_everyday.WitnessTests.test_coincident_retarget_same_geometry_changes_witness) ... ok +test_curve_endpoint_retarget_same_geometry_changes_witness (test_ralph_everyday.WitnessTests.test_curve_endpoint_retarget_same_geometry_changes_witness) ... ok +test_dimension_retarget_same_geometry_changes_witness (test_ralph_everyday.WitnessTests.test_dimension_retarget_same_geometry_changes_witness) ... ok +test_dimension_value_changes_witness (test_ralph_everyday.WitnessTests.test_dimension_value_changes_witness) ... ok +test_foreign_graph_relationship_fails_closed (test_ralph_everyday.WitnessTests.test_foreign_graph_relationship_fails_closed) ... ok +test_invalid_native_spline_data_refuses (test_ralph_everyday.WitnessTests.test_invalid_native_spline_data_refuses) ... ok +test_nullable_known_link_is_recorded (test_ralph_everyday.WitnessTests.test_nullable_known_link_is_recorded) ... ok +test_spline_controls_are_geometry_evidence (test_ralph_everyday.WitnessTests.test_spline_controls_are_geometry_evidence) ... ok +test_actual_cli_and_rust_decorations_do_not_change_recorded_native_result (test_ralph_jobs.HistoryContract.test_actual_cli_and_rust_decorations_do_not_change_recorded_native_result) ... ok +test_annotation_projection_never_masks_nested_failure_or_changed_payload (test_ralph_jobs.HistoryContract.test_annotation_projection_never_masks_nested_failure_or_changed_payload) ... ok +test_blank_error_exception_cannot_hide_other_types_payload_or_failure (test_ralph_jobs.HistoryContract.test_blank_error_exception_cannot_hide_other_types_payload_or_failure) ... ok +test_contradictory_history_phase_and_execution_claims_refuse (test_ralph_jobs.HistoryContract.test_contradictory_history_phase_and_execution_claims_refuse) ... ok +test_history_comparison_retains_failed_result_with_outer_annotations (test_ralph_jobs.HistoryContract.test_history_comparison_retains_failed_result_with_outer_annotations) ... ok +test_immutable_result_comparison_preserves_json_types (test_ralph_jobs.HistoryContract.test_immutable_result_comparison_preserves_json_types) ... ok +test_matching_actual_history_and_transport_only_replay_pass (test_ralph_jobs.HistoryContract.test_matching_actual_history_and_transport_only_replay_pass) ... ok +test_native_failure_is_a_durable_failed_result_not_status_success (test_ralph_jobs.HistoryContract.test_native_failure_is_a_durable_failed_result_not_status_success) ... ok +test_nonterminal_or_out_of_order_history_refuses (test_ralph_jobs.HistoryContract.test_nonterminal_or_out_of_order_history_refuses) ... ok +test_only_replay_annotation_may_differ_in_immutable_result (test_ralph_jobs.HistoryContract.test_only_replay_annotation_may_differ_in_immutable_result) ... ok +test_real_successful_cli_empty_error_is_only_an_outer_annotation (test_ralph_jobs.HistoryContract.test_real_successful_cli_empty_error_is_only_an_outer_annotation) ... ok +test_same_name_different_document_digest_and_source_do_not_pass (test_ralph_jobs.HistoryContract.test_same_name_different_document_digest_and_source_do_not_pass) ... ok +test_ambiguous_work_blocks_extra_native_document_inventory (test_ralph_jobs.LifecycleGuards.test_ambiguous_work_blocks_extra_native_document_inventory) ... ok +test_default_plan_is_offline_and_excludes_restart_faults (test_ralph_jobs.LifecycleGuards.test_default_plan_is_offline_and_excludes_restart_faults) ... ok +test_dispatch_persists_immutable_request_before_single_public_call (test_ralph_jobs.LifecycleGuards.test_dispatch_persists_immutable_request_before_single_public_call) ... ok +test_document_set_oracle_uses_native_object_equality_without_name_matching (test_ralph_jobs.LifecycleGuards.test_document_set_oracle_uses_native_object_equality_without_name_matching) ... ok +test_missing_versions_and_only_filter_cannot_dispatch (test_ralph_jobs.LifecycleGuards.test_missing_versions_and_only_filter_cannot_dispatch) ... ok +test_owned_depth_selection_distinguishes_equal_model_parameter_and_refuses_ambiguity (test_ralph_jobs.LifecycleGuards.test_owned_depth_selection_distinguishes_equal_model_parameter_and_refuses_ambiguity) ... ok +test_registration_failure_retains_exact_created_identity_before_other_checks (test_ralph_jobs.LifecycleGuards.test_registration_failure_retains_exact_created_identity_before_other_checks) ... ok +test_bad_outline (test_routing.RoutingTests.test_bad_outline) ... ok +test_board_edge (test_routing.RoutingTests.test_board_edge) ... ok +test_bool (test_routing.RoutingTests.test_bool) ... ok +test_crossbar_all_nets_and_shared_vias (test_routing.RoutingTests.test_crossbar_all_nets_and_shared_vias) ... ok +test_crossing_opposite_layer (test_routing.RoutingTests.test_crossing_opposite_layer) ... ok +test_crossing_other_pad (test_routing.RoutingTests.test_crossing_other_pad) ... ok +test_crossing_other_trace (test_routing.RoutingTests.test_crossing_other_trace) ... ok +test_identity_guard (test_routing.RoutingTests.test_identity_guard) ... ok +test_injected_command (test_routing.RoutingTests.test_injected_command) ... ok +test_invalid_via (test_routing.RoutingTests.test_invalid_via) ... ok +test_nan (test_routing.RoutingTests.test_nan) ... ok +test_no_route_when_same_layer_is_partitioned (test_routing.RoutingTests.test_no_route_when_same_layer_is_partitioned) ... ok +test_obstacle_planner_chooses_vias (test_routing.RoutingTests.test_obstacle_planner_chooses_vias) ... ok +test_obstacle_planner_same_layer_detour (test_routing.RoutingTests.test_obstacle_planner_same_layer_detour) ... ok +test_planner_budget_is_read_only (test_routing.RoutingTests.test_planner_budget_is_read_only) ... ok +test_planner_wrong_net (test_routing.RoutingTests.test_planner_wrong_net) ... ok +test_polygon_not_silently_ignored (test_routing.RoutingTests.test_polygon_not_silently_ignored) ... ok +test_revision_guard_before_mutation (test_routing.RoutingTests.test_revision_guard_before_mutation) ... ok +test_rules (test_routing.RoutingTests.test_rules) ... ok +test_six_net_fixture (test_routing.RoutingTests.test_six_net_fixture) ... ok +test_via_insertion_margin_rejects_native_shove_trigger (test_routing.RoutingTests.test_via_insertion_margin_rejects_native_shove_trigger) ... ok +test_wildcards (test_routing.RoutingTests.test_wildcards) ... ok +test_wrong_layer (test_routing.RoutingTests.test_wrong_layer) ... ok +test_wrong_net_pad (test_routing.RoutingTests.test_wrong_net_pad) ... ok + +---------------------------------------------------------------------- +Ran 455 tests in 12.559s + +OK diff --git a/docs/integration-2026-10-06-evidence/offline-gates.json b/docs/integration-2026-10-06-evidence/offline-gates.json new file mode 100644 index 0000000..87af94f --- /dev/null +++ b/docs/integration-2026-10-06-evidence/offline-gates.json @@ -0,0 +1,544 @@ +{ + "runId": "20261006T154556Z-455dee0f35", + "version": "1.11.39", + "coverage": "offline only; no native Fusion workflow certified", + "sourceSha256": { + "BRIDGE_VERSION": "890201f472e406726cfc4e0c7f78706a559d614b1fc9e171a8f4e8c5d3fd2388", + "ab_client.py": "f6a0a55fdd325ffd3fbae5c7acc62a552f94b415e54524f09be85238c115d6a5", + "ad_client.py": "c324775d17ccebe671acd54818eaf801e3f3136f5586ec9352331d98fce4ea0c", + "addin/AdomBridge/AdomBridge.manifest": "1dc6a2f367d38eb30e74499a1b2426a4256a6c773a1efd04e37637eab54ddb05", + "addin/AdomBridge/AdomBridge.py": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "addin/AdomBridge/commands/__init__.py": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "addin/AdomBridge/commands/activity_palette.py": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "addin/AdomBridge/commands/app_state.py": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "addin/AdomBridge/commands/assembly_bom.py": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "addin/AdomBridge/commands/close_document.py": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "addin/AdomBridge/commands/cloud_documents.py": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "addin/AdomBridge/commands/design_info.py": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "addin/AdomBridge/commands/document_hygiene.py": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "addin/AdomBridge/commands/document_info.py": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "addin/AdomBridge/commands/electron_view.py": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "addin/AdomBridge/commands/electronics.py": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "addin/AdomBridge/commands/export.py": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "addin/AdomBridge/commands/import_file.py": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "addin/AdomBridge/commands/manufacturing.py": "13ce099142d7c0059b47e3bdccb498d2491b01493cd4bb131f7e8bdd9a567893", + "addin/AdomBridge/commands/mechanical/__init__.py": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "addin/AdomBridge/commands/mechanical/assemblies.py": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "addin/AdomBridge/commands/mechanical/assembly_state.py": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "addin/AdomBridge/commands/mechanical/bill_of_materials.py": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "addin/AdomBridge/commands/mechanical/configurations.py": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "addin/AdomBridge/commands/mechanical/core.py": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "addin/AdomBridge/commands/mechanical/exporting.py": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "addin/AdomBridge/commands/mechanical/features.py": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "addin/AdomBridge/commands/mechanical/geometry.py": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "addin/AdomBridge/commands/mechanical/joint_state.py": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "addin/AdomBridge/commands/mechanical/journal.py": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "addin/AdomBridge/commands/mechanical/motion_links.py": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "addin/AdomBridge/commands/mechanical/operation_history.py": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "addin/AdomBridge/commands/mechanical/operations.py": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "addin/AdomBridge/commands/mechanical/purchased.py": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "addin/AdomBridge/commands/mechanical/readback.py": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "addin/AdomBridge/commands/mechanical/regular_joints.py": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "addin/AdomBridge/commands/mechanical/schema.json": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "addin/AdomBridge/commands/mechanical/sketch_edits.py": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "addin/AdomBridge/commands/mechanical/sketches.py": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "addin/AdomBridge/commands/mechanical/transactions.py": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "addin/AdomBridge/commands/modeling.py": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "addin/AdomBridge/commands/open_electronics_file.py": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "addin/AdomBridge/commands/open_lbr.py": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "addin/AdomBridge/commands/parameters.py": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "addin/AdomBridge/commands/physical_properties.py": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "addin/AdomBridge/commands/screenshot.py": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "addin/AdomBridge/commands/silkscreen_capture.py": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "addin/AdomBridge/http_server.py": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "addin/AdomBridge/resources/cam/jlcpcb-2layers.cam": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "addin/AdomBridge/resources/cam/jlcpcb-4layers.cam": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "addin/AdomBridge/resources/dru/Adom-InstaPCB-2-Layer.edru": "b8f1e7b131baca5167af88a3b79f821f95905f6e071b2d7a5aaf8e63b6a02972", + "addin/AdomBridge/resources/dru/Adom-InstaPCB-4-Layer.edru": "52014638450f1e6bea80ff01a2da7045760ab38c61f1f3e06f61b30ad334f823", + "addin/AdomBridge/resources/dru/AdomDefaults-jlcpcb-2layers-accurate.edru": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "addin/AdomBridge/resources/dru/AdomDefaults-jlcpcb-4layers-accurate.edru": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "addin/AdomBridge/resources/ulp/detect_layers.ulp": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "adom-bridge-fusion-manifest.json": "01c305914bc13ec370a624ec444b0d1887e9c6ca548be9ae338a10ed12b89893", + "aps.py": "872325ad79d780e3438b44ead8c704e7c95919c17eb467515e8a7e38dfe13c76", + "bridge.json": "927635e362b440b600abcd7d39deabe8128d62edb7b73fa53c5cf2d92ce4f3ce", + "contracts/describe.json": "78fac068e84ee98a65e189c344d8d585395d2e2930576bc493c5ea3807a20bd0", + "dashboard/.gitignore": "b53ee26e6ff1da219b0563333a76d2c9ec19eec713d6ee54e11a1edacb0e9f3d", + "dashboard/Cargo.lock": "03c08d5cd1da907edb998abb1f367f11b970c5a014a937bf98013eaf1b4e111a", + "dashboard/Cargo.toml": "2b2e0fa4aed650f75a9ca1f5cbfecd5d2feb0ebdcf1467386c7c798431f61c5b", + "dashboard/src/demo_audio.rs": "9f0bc1252a3469ec20cb2e3c04c1357b116a0ea9c41b20ef9917c85b1dba2b10", + "dashboard/src/main.rs": "853700ca597d7b9bf458a0af574ab36dd47d9eb951f10b704714c6250746762d", + "dashboard/ui/fusion-icon.png": "a5554421f76c39e3c9a271a95af1f4a623c416381d4c81e2413604b00dd71f5f", + "dashboard/ui/index.html": "319be1ee31938d4873b00cbcf8e4cb63187ba5960493c249b1f5a82a7a854254", + "dashboard/ui/quick-actions.html": "8f7e61c684d96c242ecd124a608b634a5cd14e29e1108d5f3e5cc6582d1039fb", + "dashboard/ui/vendor/newbie-panel.js": "5ed214867df8d16e7c5c50f2508361aa41c04547bc42caf90da7129939e7b8d2", + "demo/audio/2d-board.mp3": "aa3d9708a741395391ff1291aa80022faa82c0ede318aa475d68f099480da809", + "demo/audio/3d-board.mp3": "0e186a8724a661bded904d2fddfd734cea806fe4fc5fd1bf156f9b615170b8ad", + "demo/audio/3d-package.mp3": "0c8d3c0f21beb7a69dbdeb8c935897c5b6f138b93abb3fc56bcbee2cb4c0be20", + "demo/audio/aps.mp3": "1d8bde4b955db04e8328e1dc2578c443217e7300321b9d4ef33df218e91315cf", + "demo/audio/datahub.mp3": "51da3bc18c696baff6c670cf1caf3e8592d431e801a3e4cce927f12c6a2407dc", + "demo/audio/device.mp3": "25eafbaabdd04ed1671e790a0052c01c74ce6ecffe99f2858edd96e8e123bdf0", + "demo/audio/exports.mp3": "ba26a1ed4e7eccb289971126d747e4bb2fa84dc149fd14b156641cb4fd702684", + "demo/audio/footprint.mp3": "40edb0635be76e07d55be8eb80a80b599baf8be3ff590b678d7f76837ee3cab3", + "demo/audio/launch.mp3": "0fb9eb73f8190dd0104a63564f21851d43d56869a2f806b59a64f37c49529a4f", + "demo/audio/library.mp3": "266fac1e5d9ffadae8ec2f14bec83860f872fa8df02bbc34bee017c968120c83", + "demo/audio/make-project.mp3": "a820c7e290493f77841f445a34fad8e040592eb1cbd7472dcee8d5d0c4f9d285", + "demo/audio/mcp.mp3": "e20fed5b4b379392cd07577cfa4dce0cfd4d0ec6c848f9d8319d7327c57de2ff", + "demo/audio/open-design.mp3": "c0995723fc3fc96821df77589c9790cb79e5d21935b6a246d3912d07f9051c6d", + "demo/audio/schematic.mp3": "883aebd1fa3f0082c57c38a4cd252a46360581db37ddf7dfe057a0b7bfa141ee", + "demo/audio/stage.mp3": "6a644f2d40d60021e7aa51c29eec8c2472354f3ca6970b7e6f8afd96f7165c2e", + "demo/audio/symbol.mp3": "a21241431172fb50e47c85a9fcd8cd424a668f884e0b98fc941c4652c7155e06", + "describe.py": "62699752888b561a29cacfef8bce50e559dc8075ef170613ea0424113c341722", + "dockbar.json": "0de36d6305ebec71d5936dc1d29274ee8215d5fd7302f8459658a821d8022f00", + "docs/img/dock-fusion.svg": "365d419a49a6a79f0b88460a067352dd5506d5dbfa1311f3e70d7484103c5cc6", + "eagle_lbr.py": "b1e4900ec49ed6bd5f1367869a2d9f9ff39a445fc7c0ef9c0443cb42a7008cdf", + "fusion_detect.py": "75f5f65fcc4f72373840a684b786f06a79700d0776d6a2000b9ad337edf6bd8b", + "fusion_helper.py": "d53ba9a940d52c42bbcb49c93b96f70bca7ea52080da0e94d1a4a1e5765b979a", + "fusion_ui.py": "0767b1321cf50d53e29fadbbbd21d418a8b886c208cd82f39c6e136abace5dd5", + "handlers/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "handlers/close_fusion.py": "fc962c743bebb33e5b43f8d660b2c84f3c197e6770571052d4080f8e50834d53", + "handlers/dialog_classify.py": "c51895f289589f065b6017d2857a83325051c41e5dd9c46c6e5396a3f3d0b7d5", + "handlers/dismiss_recovery.py": "ab5528e38fa6af44620e2b38ff80c306981ad843fca0d730adbef14f27083f03", + "handlers/fusion_ui.py": "33e209bd784f17986bc8b6b5016ad0c0c519e77093ea5498c8fe49d24e4470d9", + "handlers/open_design.py": "cee0cfdea20c259c7122e0b6c754048b57a54fa13efbd424706568d52bbacbc7", + "handlers/taskbar_overlay.py": "5e02457667c879cad05ca34e934c2034354e489a4d9c1c4701d10ec396456d78", + "install_addin.py": "3c549bed77bca1b844ff3823aaba5da079f9faf6e41cdbff3cd71a058933bea0", + "kicad_lbr.py": "1e0407a64c8bcac8b2a191fbab7b4b0f11455e710035f4e05bb5bc321fde58cc", + "library_bundle.py": "d071b600cefb20243259a8a1e27eb3edfbcefd1c502503ac7698ce0b919646c6", + "package.json": "75ad117c52f36d7dd3c4bbd81bff6841ebb3374c1f9c2c594b64c9ffa2fed45a", + "page.json": "9e96123c652c3c12ca888a61ca402f4ade7247d032af743d218522e2ca4e8478", + "requirements-test.txt": "c144e88f7a259b078519c943f54987885467114d211de382f1e2ab4124753733", + "resources/adom-overlay-32.png": "23014fd52b3a531e4567837cfed0668843353e02ff7682e06a1c4a2f57d394c5", + "rust/Cargo.lock": "f072958eab03c348542baf52d6e082d3cf25346ed75f5b1d65ccb9cc5ceba194", + "rust/Cargo.toml": "be275d4919d09a63c0d5b341fdf8b7e9bf8e9114addedfc9631c69663892bf40", + "rust/PORTING.md": "cdbd1c7795936a73c4fa294964cc89937b32854b7d1474668c55c781e0407d71", + "rust/bridge/Cargo.toml": "a4a29bcb211c9713f78f8c6846b8cd84d3868373d4b5cfcb8ffc82c264153177", + "rust/bridge/src/addin.rs": "1c047f60ff494524886c3042accc6c8466363dde9ccfc7f0cea7f639eba5a38a", + "rust/bridge/src/addin_install.rs": "aa75349181977f7985210c56688621b62744a23f3083d69ec9e4e544fb706092", + "rust/bridge/src/aps_signin.rs": "21d01ee554dd95e61d550860b1d3d090d15e1ceaf99c5a965d16a712ebc67686", + "rust/bridge/src/attach_orient_block.py": "e6fd837dad1b266f999202224665c6d9ea602b8afea13bd759c9cdd735446cbc", + "rust/bridge/src/attach_template.py": "c402f7ec4a928280e38feea2c5a864d8e93496840473832db73908de76f35c38", + "rust/bridge/src/chainexec.rs": "4d02d83422ab70485ef413c87a189acf980254954430781dbafafab074fa01a9", + "rust/bridge/src/chains.rs": "dac4d311cae41e7a086fa08931afdbe2c29dd9f6ff7ecff74da8f92278aedc4f", + "rust/bridge/src/demo.rs": "e2069c22d85e48869b934b17e6b07f91d0c137848cb25a0c6c29d0eea2a6df31", + "rust/bridge/src/electronics.rs": "3a83fbe0f615db400a74ef5a3eec949d615dbe4e4f7d065af42b951630967984", + "rust/bridge/src/epg.rs": "0ccedd7192514b02ceffc082508362d4807e3a27fcf6dd4ab0e54e11959891f4", + "rust/bridge/src/epg_template.py": "b9bfeeb270e8505d04625d41f69d7a4a48646478c1c64e1c9e171c2ed7db40a1", + "rust/bridge/src/epg_types.json": "be5fd128d7becf98002e3ce257f5a2f5c630480a385fe7d5319800c62e19636a", + "rust/bridge/src/etiquette.rs": "2ebc3ae027f1a976c6d1265832507bafb32d14732295d487602093dd9e2c3822", + "rust/bridge/src/fusion_default_designrules.xml": "c087e9bf8fb7d4bfc0eaffc280dcb1437c45823d846545cb46938b93d9abf534", + "rust/bridge/src/fusion_prefs.rs": "2aee1d6d12545aaead793719589484a1b1b628230bc0849cbbc0eb3d485a0634", + "rust/bridge/src/fusionpath.rs": "e9d7b98507c70d9d1fccb35f312143e0f6a05e5462b6926b08a2cb48d17e6a45", + "rust/bridge/src/inspect_bodies_script.py": "5e1cf1a6516b3fc4fc705d1dcf7eb4dacc23bef9124a2e0cd6f13dd977cb7dea", + "rust/bridge/src/janitor.rs": "0c6d7bf3c050af375faab5d9cd89204e5a6aa6577411b4f9042c353ab26eddba", + "rust/bridge/src/launch.rs": "76054e794a63abf15defc89166703f0d3da87531a4ea7c9bf2123e1e279dac14", + "rust/bridge/src/lbr_wrap_parts.json": "f237770833807f095940f8b8acbf544b0ce337f44a9b0593eef336a46e3dfb29", + "rust/bridge/src/lifecycle.rs": "7a909d100de6cd57779ab9bb9dcd786293b6d531ce1aeff2e7555a85908b5057", + "rust/bridge/src/livefeed.rs": "08d1f445b524aa602fac937b28bec3e2254f3e7f9405b09a932d8e39d0a1c3b9", + "rust/bridge/src/main.rs": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a", + "rust/bridge/src/maintenance.rs": "f5e98a22248c217edf399993cf8bbc2462fba781c7de64d1c5f8c8141a77a5ce", + "rust/bridge/src/make3d_orient_block.py": "8bcd3f2b86602ea74229a6fd686db5b306d49085d0bf4920b7e37c1fa4b186e1", + "rust/bridge/src/make3d_placement_block.py": "9aa001d7eae80edb8a8c23da55ea60f5af8917c7e705896099c35b5ac4b9d879", + "rust/bridge/src/make3d_template.py": "ee5506673f832002796f227c71d693e4879867c7edcdd24b80abd22602d89bc5", + "rust/bridge/src/managed.rs": "941398dc076d4c7189a297cba0361cd5823687e7f64953c68575212da8f3ee62", + "rust/bridge/src/mcp.rs": "f71d03df88067d4d5e20b4a7cf4822ace25b114db8d361b5dc987962e41672d5", + "rust/bridge/src/mint.rs": "85d6430a129bc2ffc5ac005656d6f297058413eef2ae2e6532accd85c247b187", + "rust/bridge/src/operation_status.rs": "cdc3b88f214abeac3d0b0dc50ae10a356cd0c061388d2d39d95bb6fff0753dc1", + "rust/bridge/src/orchestrations.rs": "e26e61c2132fe272231af9e4825cd527d20772209e2aa9d6d9ae3ffb2b978b96", + "rust/bridge/src/palette.rs": "a31810a880fbfe5c7301f5f087b9986218b1fdcb4ce8840f85111ca9bec281b8", + "rust/bridge/src/pref_script.py": "d057d8240103313483bb8627a4a980553e8cc5901dd62249e87d97fd70935f19", + "rust/bridge/src/prove.rs": "4fa3bab3277f885c6017ad368af80d161f8fb5f9c8d0481ef42d0892e2ccd37d", + "rust/bridge/src/readiness_exec.rs": "f6653592d7ec05ebbf6eb548b7484fc4e99a14970e87fc486de6810ca810ef14", + "rust/bridge/src/routing.rs": "ebcf1b04442957dbc2c2731758995cb6b4579e51dcfd5b8cd4f69b4326226187", + "rust/bridge/src/routing_planner.py": "d901c4bad9bad8571e07a35af0afc4a3f74845b0e3dccc56f00b8451846abc2a", + "rust/bridge/src/routing_script.py": "9ce0e7ee1ddab0cec7b90a9ee84c918f1914b41c507b575719e6910b5fdf4a69", + "rust/bridge/src/seat.rs": "62029258deddc252ae016ba2afcd8904cbe697e5cd38a03302f6798018317f49", + "rust/bridge/src/services.rs": "6758b69e2e852995bce3acdfebd0cffdc68dac896555eb18e7fe66d7493a5c4f", + "rust/bridge/src/signin.rs": "cb4dcbbabaf83dc1dbd8ce2e80fd1733b6a81c4fbbc4cf20e78b3cba7c37bd61", + "rust/bridge/src/small_verbs.rs": "a05053ce098062498e7f9b912d12e5998b93b8903f7bec4db243cf22c4a0c526", + "rust/bridge/src/testproject.rs": "02b4d1ec6ab2d196b396f57f58b07e0bdcc522f02524ccbedfae4a4af5f90e21", + "rust/bridge/src/timings.rs": "b41fc1604c44f403bc1fe51f01119c19d62e93d5e5d393c2f733539ad2d6daad", + "rust/bridge/src/tour.rs": "bec9eac6fa40075325f66280f3509633b26cd18b3878b3e7cd84696e4d1a2bed", + "rust/bridge/tests/fixtures/board_info_sample.json": "f2c8688bf3f877f7c13efa6510d73af4792553e8325e91bd4f3be14c20df4ba6", + "rust/bridge/tests/golden/attach_script.json": "506b21ab31ebe8a7a948056bed532186decefabe220e739d1d96894f3caf5495", + "rust/bridge/tests/golden/epg_script.json": "748f7b1c161cdf663cdec3e720714fec0d3757819d96b645b38e3ac5dbbe338c", + "rust/bridge/tests/golden/make3d_script.json": "80ff2d73c9a7c88e5170935d292a8475ef963e324957200c6764b8342356d1c2", + "rust/bridge/tests/golden/mtp.json": "1d61ddf58ff5d121f878cb3304101ff328fb1e219d99652894b34ec2e172fe35", + "rust/core/Cargo.toml": "317c07a50b175ae3fd3ac9ee82065568738e3e84fbe647612c109ecd7ba076dd", + "rust/core/src/ab.rs": "f71893214420b66fa75abce0c1ebaeb763fa26b191c6d420abae6201acd0c943", + "rust/core/src/alerts.rs": "e51914d3c4a8122762a45c0ee825f0459ba4197488b319fb755a4170c405b593", + "rust/core/src/aps.rs": "a5bb2860aa8a2b155f41280e8abb1cb8a01fcc50379b1c964f032816d3a2c4fa", + "rust/core/src/contract.rs": "69ca49c4469c323887efecb10333b51ad9f6813fc450422c155f9983238acd26", + "rust/core/src/dialog_rules.json": "05c015e80ee38b68d3a0330d34327cacd294d8f0e235dba1a21d2999c6091784", + "rust/core/src/dialogs.rs": "f956a82345726bc2e50e8b11780a36326f86ae7e930aa79869314fe5b9282d46", + "rust/core/src/host.rs": "7183e1cb5e3fc00d2f1c0b98446612de77a397bc77adcb677822131df36d3943", + "rust/core/src/lib.rs": "4897c959c4bc61a118d4039f2550c7ea365a839e6d537a3f041f26ad6bb41662", + "rust/core/src/readiness.rs": "0e89546a8411645e880e27e22d113bebbe04d2a61e019738b82b3ff215737e2d", + "rust/core/src/readiness_hints.json": "c9825ddc2cace06e73c414e2117748f0b49754b240eee0f69a37705034bff867", + "rust/core/src/windows_facts.rs": "12a76a7a56ff7b28cd229bf93628e836deb6d804177b2d65c3545e8793c28013", + "rust/core/tests/alerts_golden.rs": "286b72406009bf3041954c2e4e0becf6bb1c71b30b7458a6251e47ff067e503c", + "rust/core/tests/dialogs_golden.rs": "15247100daca1c2cb70d0d434998934191e0fa0d317d92ab3ef53593a011c850", + "rust/core/tests/golden/alerts.json": "87a0f799497e63ad1e3ae36c469dcd667cd41bec79d8c733cf391746bae59ffc", + "rust/core/tests/golden/dialog_titles.json": "ca164599b90d6d3b800c232bf9105e10130a5d35c92a93428e3ab63a2f668076", + "rust/core/tests/golden/readiness.json": "2475846c8c047d78dc72d4770f2b1ef4d6b755907576b217c4ad507e8c6df98d", + "rust/core/tests/readiness_golden.rs": "092afc32a81098c2cd8267b827751606a34794be6358fe7c7c3b2a6860a19359", + "rust/lbr/Cargo.toml": "9e943260ba115865f6c734e12a4088a0474963615ad3138b5631513f5336feb0", + "rust/lbr/src/lib.rs": "c23a1c6aa81c95ae24d76e2d1bcb5c3d8ca9321a0d11069987d7758f3135c676", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbr": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbrx": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "rust/lbr/tests/fixtures/CH340G.lbr": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "rust/lbr/tests/fixtures/CH340G.lbrx": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "rust/lbr/tests/fixtures/Demo_Board.bundle.zip": "ad7d754bebdae8e46ee67de4901373b2114c87ad4356da44b6601a38d5c0721f", + "rust/lbr/tests/fixtures/Demo_Board.lbr": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "rust/lbr/tests/fixtures/Demo_Board.lbrx": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "rust/lbr/tests/fixtures/IN-S63BTG.lbr": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "rust/lbr/tests/fixtures/IN-S63BTG.lbrx": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "rust/lbr/tests/fixtures/LAN7800.lbr": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "rust/lbr/tests/fixtures/LAN7800.lbrx": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbr": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbrx": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "rust/lbr/tests/fixtures/syn_deadconnect.lbr": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "rust/lbr/tests/fixtures/syn_deadconnect.lbrx": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "rust/lbr/tests/fixtures/syn_duppad.lbr": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "rust/lbr/tests/fixtures/syn_duppad.lbrx": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "rust/lbr/tests/fixtures/syn_noteagle.lbr": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "rust/lbr/tests/fixtures/syn_noteagle.lbrx": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "rust/lbr/tests/fixtures/syn_truncated.lbr": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "rust/lbr/tests/fixtures/syn_truncated.lbrx": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "rust/lbr/tests/fixtures/zipslip.zip": "62789c0c18ec56ea3a7ae6c6dcceff94581ea5a3f4a7d250229820fc44fb1657", + "rust/lbr/tests/golden/ABM8-16.000MHZ-B2-T.json": "59f0a1eb337db1aecd9bd4438c29fa39ff50fc3829e9fc34f8e8b09f1dd6e75d", + "rust/lbr/tests/golden/CH340G.json": "a6ab7cc05ec4ef537a499dc844857bbd0b4fbcb693d42f60be2755efa47d7412", + "rust/lbr/tests/golden/Demo_Board.bound3.lbr": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "rust/lbr/tests/golden/Demo_Board.bound3.lbrx": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "rust/lbr/tests/golden/Demo_Board.bound5.lbr": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "rust/lbr/tests/golden/Demo_Board.bound5.lbrx": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbr": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbrx": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "rust/lbr/tests/golden/Demo_Board.json": "f5250ac9d4e1761ea2a37f99437dbb431d90011863bbdc3793cddd586334f900", + "rust/lbr/tests/golden/Demo_Board.metadata.json": "f77498a63f5c99f5e228dbc6d5d27d32ffbbdb0fc385f3e6f423812105eefd1a", + "rust/lbr/tests/golden/IN-S63BTG.json": "2c9695c52cb73609c8c11af135609746a25f903b556e45dbb1b2bffcde031cda", + "rust/lbr/tests/golden/LAN7800.json": "400187b6fa0d2c2a55a1fc166f45be48fd1e1716910f97c15bc86ee3ca29ba9f", + "rust/lbr/tests/golden/STM32L431RCT6TR.json": "a4abd1bc6e0d9e22ecb3bb05b188a0df3dcd3acfe645c00c3c0ffdf394526212", + "rust/lbr/tests/golden/bundle_files.json": "e9ce9c1fcc880aebdfd9ca91cd3c489fca0c44a109f594d6d71535e24e98b02d", + "rust/lbr/tests/golden/inject_bindings.json": "70f08781980c5b3932154f4e05bde9527b8519e57cb79fb625e650d91e428680", + "rust/lbr/tests/golden/pair_parts.json": "269217c7b343b934c49668fd3cf31ca26124759198df05971d195c5eff2f7fc5", + "rust/lbr/tests/golden/preflight_and_parts.json": "3fab24b531175c303933c303550bbb36b1a4fac84631e8e136cc5bf5c3d7f4fc", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbr": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbrx": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbr": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbrx": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/CH340G.lbr": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G.lbrx": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbr": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbrx": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/IN-S63BTG.lbr": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG.lbrx": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbr": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbrx": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/LAN7800.lbr": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800.lbrx": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbr": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbrx": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbr": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbrx": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbr": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbrx": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/index.json": "a21429c3d77845998f97a2233394e1756ed99a1ca1b24d19a2fee2a156d0b362", + "rust/lbr/tests/golden.rs": "02df17a9be23b9727e1732f4b5079c23910b2fbfd45dbeaa8b07636c23a306cf", + "rust/os-mac/Cargo.toml": "864f9685ed5bb133c51c7fb979ab03175c6310f7a74db761e024b7635aa10851", + "rust/os-mac/src/lib.rs": "d0840cfd26262792ed9318b73df071eb523f7d19ffb72277ccc3ba1ba47263a4", + "rust/os-win/Cargo.toml": "1dbd93b057c4ac2a895a0b2dc2636c19330248854f3a8bde8922d27011b01f45", + "rust/os-win/src/lib.rs": "4461931dbe8899dfc8ccc1e80e557cdb7eefbc4e584d4dbe743a31b507f1682b", + "server.py": "c077d9c162e5b170365c5735b69e38995724b0443b4aedc6af9f802ee5539870", + "tests/daily_verb_cron.sh": "6c94a5bc0d157a91e1363eda40b62895a05d9e1b75667e66e1d02a8d63adcb4e", + "tests/fusion_harness.py": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2", + "tests/job_acceptance/busy/CONTRACT.md": "9e80e786ef63b88782188c0fde43cec476849204b279ad7a5613155c078eecc9", + "tests/job_acceptance/busy/README.md": "84ab99f27c756e6e609548c246dd0dbcba03670ffdb5bc40a029b0b7f0c68666", + "tests/job_acceptance/busy/adjudicate_saved.py": "d97f1e44e99b14bacecfbb52cc4bc5a1d747d9b9c1f7a306f2f29258f8608221", + "tests/job_acceptance/busy/busy_status.py": "3cdb4ccf2b326bdd940e209f8254fe773d084cc4ba77933a5651701d03b0f236", + "tests/job_acceptance/busy/manifest.json": "fc778a3e3ccbe4494d37155047ccfe4e983977ff1303a612a034b810e67b6b5f", + "tests/job_acceptance/busy/test_busy_status.py": "28241f5ae8733dd4e3d24a6a4edcd80ec6f0ed894348ac387508355bc6a2c514", + "tests/job_acceptance/history/CONTRACT.md": "304babc725f467d5fb11364f0bfa21d3468617e9ddb4f26ab0ff15f920e11e22", + "tests/job_acceptance/history/history_acceptance.py": "3be02c0f7ee3986e1ade0cb4e920822ca3315983afcf0f6019c9098c54221b9d", + "tests/job_acceptance/history/manifest.json": "0f072df1a6b811f43155699d195f5bdb0f566a08b13d2cebc132ad31cd50fc8c", + "tests/job_acceptance/history/test_history_acceptance.py": "108d4f43d5bccea7fbaafdd9364b1ff87489f4c8bbf658495cde3185dcab16db", + "tests/ralph_assemblies.py": "9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903", + "tests/ralph_everyday.py": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "tests/ralph_jobs.py": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f", + "tests/ralph_mechanical.py": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "tests/ralph_support.py": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "tests/run_verb_tests.py": "2523a0f5612672be8d8310c92e58d02e9382adc107271cc7feef5763a7631b43", + "tests/test_addin_lifecycle.py": "25511747a47c2062ed569798adfbb62795b386572058a4f9ea0980d616896b03", + "tests/test_bridge_contracts.py": "152cd0e20016c4a8a02769527161971b507ee814d1427db096efa23a06dd0143", + "tests/test_document_hygiene.py": "650eea3f8a1d577a90c7e57016188b0c812415f48f9ad8948f1f94a17fdbad13", + "tests/test_fusion_harness.py": "42d9f33cb6359296712ed8aeb43f1d290cf4269dc07d6a9668dde1588e534de2", + "tests/test_http_server.py": "2a4da041d350600ff4e0736a03a4cbde816c2d2074e92163203b2fa89c51827c", + "tests/test_live_feed_drain.py": "76a838eaec5314e6498357b02d4df65e67c4508abb7712cb867e398eb90952b2", + "tests/test_mechanical.py": "4abb8cc9d2f0ba2e6e0541ee87b84299a580446476e5fd1a8b63ddb286189246", + "tests/test_mechanical_assemblies.py": "1f9c6bb003eedb01f9012e331f81a5b88504c5468f0b31bba0b489b8ad670fc9", + "tests/test_mechanical_configurations.py": "8dede467568a1b9f284c00acda9c6c8429f7da26f618dae4cea18003c5a58eb5", + "tests/test_mechanical_everyday.py": "f7e3d1eddd953c86b5f85c9a6d1788085df4968f02c89383c1addf0b06208d32", + "tests/test_mechanical_regular_joints.py": "7688bb79489ca7f3be92ff2b811da555dc29fe1f347d9751d4dd3119ae45dbb4", + "tests/test_mechanical_transactions.py": "ccf361720e2917d474a784e2cfd9c735bfb148ebf9d007d70b4463ae11e84622", + "tests/test_operation_dispatch.py": "19bb8c9dcb4856a10a502b2f4c342a3b40d2ca23327729aede523c23f3ff9eb7", + "tests/test_operation_history.py": "1d049c7cb2e4b965b153f80dead344eccf619094b5a5641c5de1731e665ba3f6", + "tests/test_operation_journal.py": "67e39c879041a192295f6b94972a446d1b06bd9502c171cb4361ceb8d8917fb4", + "tests/test_operation_status_route.py": "7fe221d1a802a69a93624a4b8cbf33406e97d4123ec7399d4c8e84f0fa7bfc32", + "tests/test_portable_tree.py": "c0cef12a2355bbae33f056d4bf7d4af96e64652d0e86118d2da4232419e96b7a", + "tests/test_ralph_assemblies.py": "9ceaa35779f51e0c8b81d15e402301439664d867c73f4e8dd790bf9b28556283", + "tests/test_ralph_campaign.py": "132ce2f342305f71a4ae4473ffe8710967528bafd82b002f1fd29d4af940329a", + "tests/test_ralph_everyday.py": "20487252a3ab759e5236c71e22009a84cc7e80e4f9aa0af5d243e36e7ef60fb8", + "tests/test_ralph_jobs.py": "176f0b4e69b6c9766b1085a6922532220f9e5bfe85366daee1db213f8c2c9662", + "tests/test_routing.py": "be671c46a6a1474a39d2b1846fc76fb27796647cc430bcfc828f9c1957c0e52f", + "timings.py": "b17f946f88286358bcebf397d1467c00010cc3626411a40b7ccfb6522dae425a", + "tools/abrun.py": "5e7a7cd09a3c18c88b912bee5fba3afe77a92aaaa70ace0f52f973f7bb6a4801", + "tools/adrun.py": "ed088ab89f82e13c355f1c60316e5d96e4df3971e998bdeee037a87bee9474ef", + "tools/check-bridge.py": "cb15bef8cbc3d4252a3d656a5484e7459ff340edce171f0489c62baa2212b72b", + "tools/check-naming.sh": "38b4c22c8af31127e5d20b6c24f56cb8000ed6c825a2eda0efc8058952140ebd", + "tools/check-portable.sh": "a637d7db4e6dd1948029dd32ac657f3dff48ba31d72af856100b51edf05f033f", + "tools/check_portable_tree.py": "56dba86e9d779d8d94acd0db1967ad393b30455c40382c2bfd65e4029d19803d", + "tools/exe-only-flip.sh": "4b19223eb3b198d6ce672502b949634c061ed9f679ac88fbf1966403361d381e", + "tools/freeze-contract.py": "82f51090a79c57adf2f41c27229a860acdc75598aa4ead16893126cd7c848886", + "tools/gen-readme-verbs.py": "c56804ad5e17daef470849724017151956945acb4859fd0083aabd84dc09c45e", + "tools/install-mechanical-dev.ps1": "d6a6b456e65d2b9adffa7d2aaf53a82905bbd720868234bbc8e3ca848ccb3445", + "tools/install-routing-dev.ps1": "6b7aaf8f4e6bad49f1ea01f76e0684ee533ff93290dc0ce81cbf0174132ea3a4", + "tools/live_feed_drain.py": "5c4c383aa317f30f78ef4ee8059d6a5101b278cb3383a3fee90ccb65e35457dd", + "tools/package-mechanical-dev.py": "d8522a4fa8c9b48a93f6c50ebeb84e90fb840eed5d3c8e706fb5951a9aec6f3d", + "tools/promote.py": "d1eca1f21c0af7f085e8e6965f3417c1052bc25e2bff2624c59a851aa656ac09", + "tools/promote.sh": "b2577eac39267f94ec6d810d6fee62b211a4cedea7d084e52c77d30b7c685bd5", + "tools/promotions.log": "7dd4a843cef7f86030b5995e5d764d338434cbeade87af2b00fa424e99ea5786", + "tools/release-files.txt": "3a00cc7daf773883d68cd2facfd7d03118d835a9aeefdb0f1bb3cbeded5871e4", + "tools/release.sh": "d38172bebf6819c23d542a4f5325e20482c311a3be93231ba1b757d12f60981c", + "tools/rust-commit.sh": "c331c26bde94231b667924bbdabd3e56d1e975729cb7edf9eae8e5537a4151cf", + "tools/rust-ship.sh": "1254e4950f1d76bed5e0a4aa81f0bc45a719acb73193cdab753ecf9e5cb8e093", + "tools/shadow_check.py": "6cebf4f1e42cb3847360df8b83793bef4a5d36a7cec1bbb744d2e875c2b6919b", + "tools/video/compose.py": "bc5cd01a40598e9f4ba475ad0522141b3480172505a79eee62f50905601b9b3b", + "tools/video/spec-3d.json": "67eb00df3547eb94b40cbe638181c09ff40251f7bb2687af4a8273e81094436a", + "tools/video/spec-board.json": "76c085cdb94be385f91c7f0f69721f4660cd262eb35182a729f4bdd4e42d7904", + "tools/video/spec-modal.json": "577d2900c687a4799b544680a51e0879f8af88f27111836b80ceaf64b24b33e7" + }, + "selectedGroups": [ + "python", + "rust", + "dashboard", + "portability", + "shadow", + "windows" + ], + "groups": [ + { + "group": "python", + "command": [ + "/usr/bin/python3", + "-m", + "unittest", + "discover", + "-s", + "tests", + "-p", + "test_*.py" + ], + "cwd": "/home/adom/project/fusion-pr10-current", + "status": "PASS", + "coverageKind": "tests", + "returncode": 0, + "testCount": 455, + "seconds": 12.061 + }, + { + "group": "rust", + "command": [ + "/home/adom/.cargo/bin/cargo", + "test", + "--locked", + "--workspace" + ], + "cwd": "/home/adom/project/fusion-pr10-current/rust", + "status": "PASS", + "coverageKind": "tests", + "returncode": 0, + "testCount": 62, + "seconds": 23.712 + }, + { + "group": "dashboard", + "command": [ + "/home/adom/.cargo/bin/cargo", + "test", + "--locked" + ], + "cwd": "/home/adom/project/fusion-pr10-current/dashboard", + "status": "PASS", + "coverageKind": "build_only", + "returncode": 0, + "testCount": 0, + "testStatus": "NOT_RUN", + "reason": "Dashboard compiled; no dashboard tests were executed", + "seconds": 2.676 + }, + { + "group": "portability", + "command": [ + "bash", + "tools/check-portable.sh" + ], + "cwd": "/home/adom/project/fusion-pr10-current", + "status": "PASS", + "coverageKind": "static", + "returncode": 0, + "seconds": 0.115 + }, + { + "group": "shadow", + "command": [ + "/usr/bin/python3", + "tools/shadow_check.py", + "/home/adom/project/fusion-pr10-current/ab_client.py", + "/home/adom/project/fusion-pr10-current/ad_client.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/AdomBridge.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/__init__.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/activity_palette.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/app_state.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/assembly_bom.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/close_document.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/cloud_documents.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/design_info.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/document_hygiene.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/document_info.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/electron_view.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/electronics.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/export.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/import_file.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/manufacturing.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/__init__.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/assemblies.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/assembly_state.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/bill_of_materials.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/configurations.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/core.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/exporting.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/features.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/geometry.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/joint_state.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/journal.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/motion_links.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/operation_history.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/operations.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/purchased.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/readback.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/regular_joints.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/sketch_edits.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/sketches.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/mechanical/transactions.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/modeling.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/open_electronics_file.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/open_lbr.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/parameters.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/physical_properties.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/screenshot.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/commands/silkscreen_capture.py", + "/home/adom/project/fusion-pr10-current/addin/AdomBridge/http_server.py", + "/home/adom/project/fusion-pr10-current/aps.py", + "/home/adom/project/fusion-pr10-current/describe.py", + "/home/adom/project/fusion-pr10-current/eagle_lbr.py", + "/home/adom/project/fusion-pr10-current/fusion_detect.py", + "/home/adom/project/fusion-pr10-current/fusion_helper.py", + "/home/adom/project/fusion-pr10-current/fusion_ui.py", + "/home/adom/project/fusion-pr10-current/handlers/__init__.py", + "/home/adom/project/fusion-pr10-current/handlers/close_fusion.py", + "/home/adom/project/fusion-pr10-current/handlers/dialog_classify.py", + "/home/adom/project/fusion-pr10-current/handlers/dismiss_recovery.py", + "/home/adom/project/fusion-pr10-current/handlers/fusion_ui.py", + "/home/adom/project/fusion-pr10-current/handlers/open_design.py", + "/home/adom/project/fusion-pr10-current/handlers/taskbar_overlay.py", + "/home/adom/project/fusion-pr10-current/install_addin.py", + "/home/adom/project/fusion-pr10-current/kicad_lbr.py", + "/home/adom/project/fusion-pr10-current/library_bundle.py", + "/home/adom/project/fusion-pr10-current/rust/bridge/src/attach_orient_block.py", + "/home/adom/project/fusion-pr10-current/rust/bridge/src/inspect_bodies_script.py", + "/home/adom/project/fusion-pr10-current/rust/bridge/src/make3d_orient_block.py", + "/home/adom/project/fusion-pr10-current/rust/bridge/src/make3d_placement_block.py", + "/home/adom/project/fusion-pr10-current/rust/bridge/src/pref_script.py", + "/home/adom/project/fusion-pr10-current/rust/bridge/src/routing_planner.py", + "/home/adom/project/fusion-pr10-current/rust/bridge/src/routing_script.py", + "/home/adom/project/fusion-pr10-current/server.py", + "/home/adom/project/fusion-pr10-current/tests/fusion_harness.py", + "/home/adom/project/fusion-pr10-current/tests/job_acceptance/busy/adjudicate_saved.py", + "/home/adom/project/fusion-pr10-current/tests/job_acceptance/busy/busy_status.py", + "/home/adom/project/fusion-pr10-current/tests/job_acceptance/busy/test_busy_status.py", + "/home/adom/project/fusion-pr10-current/tests/job_acceptance/history/history_acceptance.py", + "/home/adom/project/fusion-pr10-current/tests/job_acceptance/history/test_history_acceptance.py", + "/home/adom/project/fusion-pr10-current/tests/ralph_assemblies.py", + "/home/adom/project/fusion-pr10-current/tests/ralph_everyday.py", + "/home/adom/project/fusion-pr10-current/tests/ralph_jobs.py", + "/home/adom/project/fusion-pr10-current/tests/ralph_mechanical.py", + "/home/adom/project/fusion-pr10-current/tests/ralph_support.py", + "/home/adom/project/fusion-pr10-current/tests/run_verb_tests.py", + "/home/adom/project/fusion-pr10-current/tests/test_addin_lifecycle.py", + "/home/adom/project/fusion-pr10-current/tests/test_bridge_contracts.py", + "/home/adom/project/fusion-pr10-current/tests/test_document_hygiene.py", + "/home/adom/project/fusion-pr10-current/tests/test_fusion_harness.py", + "/home/adom/project/fusion-pr10-current/tests/test_http_server.py", + "/home/adom/project/fusion-pr10-current/tests/test_live_feed_drain.py", + "/home/adom/project/fusion-pr10-current/tests/test_mechanical.py", + "/home/adom/project/fusion-pr10-current/tests/test_mechanical_assemblies.py", + "/home/adom/project/fusion-pr10-current/tests/test_mechanical_configurations.py", + "/home/adom/project/fusion-pr10-current/tests/test_mechanical_everyday.py", + "/home/adom/project/fusion-pr10-current/tests/test_mechanical_regular_joints.py", + "/home/adom/project/fusion-pr10-current/tests/test_mechanical_transactions.py", + "/home/adom/project/fusion-pr10-current/tests/test_operation_dispatch.py", + "/home/adom/project/fusion-pr10-current/tests/test_operation_history.py", + "/home/adom/project/fusion-pr10-current/tests/test_operation_journal.py", + "/home/adom/project/fusion-pr10-current/tests/test_operation_status_route.py", + "/home/adom/project/fusion-pr10-current/tests/test_portable_tree.py", + "/home/adom/project/fusion-pr10-current/tests/test_ralph_assemblies.py", + "/home/adom/project/fusion-pr10-current/tests/test_ralph_campaign.py", + "/home/adom/project/fusion-pr10-current/tests/test_ralph_everyday.py", + "/home/adom/project/fusion-pr10-current/tests/test_ralph_jobs.py", + "/home/adom/project/fusion-pr10-current/tests/test_routing.py", + "/home/adom/project/fusion-pr10-current/timings.py", + "/home/adom/project/fusion-pr10-current/tools/abrun.py", + "/home/adom/project/fusion-pr10-current/tools/adrun.py", + "/home/adom/project/fusion-pr10-current/tools/check-bridge.py", + "/home/adom/project/fusion-pr10-current/tools/check_portable_tree.py", + "/home/adom/project/fusion-pr10-current/tools/freeze-contract.py", + "/home/adom/project/fusion-pr10-current/tools/gen-readme-verbs.py", + "/home/adom/project/fusion-pr10-current/tools/live_feed_drain.py", + "/home/adom/project/fusion-pr10-current/tools/package-mechanical-dev.py", + "/home/adom/project/fusion-pr10-current/tools/promote.py", + "/home/adom/project/fusion-pr10-current/tools/shadow_check.py", + "/home/adom/project/fusion-pr10-current/tools/video/compose.py" + ], + "cwd": "/home/adom/project/fusion-pr10-current", + "status": "PASS", + "coverageKind": "static", + "excludedTemplates": [ + "rust/bridge/src/attach_template.py", + "rust/bridge/src/epg_template.py", + "rust/bridge/src/make3d_template.py" + ], + "limitation": "Unexpanded Rust string templates are hashed but cannot be parsed as Python source; rendered variants need separate tests.", + "returncode": 0, + "seconds": 1.018 + }, + { + "group": "windows", + "command": [ + "/home/adom/.cargo/bin/cargo", + "build", + "--locked", + "--release", + "--target", + "x86_64-pc-windows-gnu", + "--package", + "adom-fusion-bridge" + ], + "cwd": "/home/adom/project/fusion-pr10-current/rust", + "status": "PASS", + "coverageKind": "build", + "returncode": 0, + "seconds": 104.743 + } + ], + "status": "PASS", + "sourceChanged": false +} diff --git a/docs/integration-2026-10-06-evidence/root-acceptance.json b/docs/integration-2026-10-06-evidence/root-acceptance.json new file mode 100644 index 0000000..b33117d --- /dev/null +++ b/docs/integration-2026-10-06-evidence/root-acceptance.json @@ -0,0 +1,21 @@ +{ + "status": "PASS", + "candidateManifestSha256": "9041f6a24b4dab24fea34eb28a03647d2eaf11ddb422aeb591b258c5ce389a4d", + "sourceFilesMatched": 1204, + "gateReportSha256": "997c5ddbcd45081306f099d0f63b724c9c6a00578b7f516f08e5d3075030a941", + "pythonTests": 455, + "rustTests": 62, + "historyTests": 38, + "busyTests": 21, + "dashboard": "BUILD_ONLY; zero tests", + "windowsExecutable": { + "path": "/home/adom/project/fusion-pr10-current/rust/target/x86_64-pc-windows-gnu/release/adom-fusion-bridge.exe", + "bytes": 8144896, + "sha256": "b5e052bdf755da0bace918a2de6370a7026d7c66f70c29dce7eff8d62034aa91", + "catalogEmbedded": true + }, + "nativeMergedAcceptance": "NOT_RUN", + "installedRuntimeChanged": false, + "captures": 0, + "shotlogUploads": 0 +} diff --git a/docs/integration-2026-10-06-evidence/test_coexistence.py b/docs/integration-2026-10-06-evidence/test_coexistence.py new file mode 100644 index 0000000..b3e4711 --- /dev/null +++ b/docs/integration-2026-10-06-evidence/test_coexistence.py @@ -0,0 +1,121 @@ +"""Independent merge behavior/contract probes; no desktop or native Fusion calls.""" +import ast, importlib.util, json, os, sys, tempfile, unittest +from pathlib import Path +from unittest.mock import patch +import xml.etree.ElementTree as ET + +ROOT=Path(os.environ['FUSION_CANDIDATE']).resolve() +SOURCES=Path('/home/adom/project/research/fusion-roadmap-build-2026-10-02/pr10-current-integration') + +def read(root,name):return json.loads((root/name).read_text()) +def catalog(root):return {v['name']:v for v in read(root,'contracts/describe.json')['verbs']} +def load(name,path): + spec=importlib.util.spec_from_file_location(name,path);m=importlib.util.module_from_spec(spec);sys.modules[name]=m;spec.loader.exec_module(m);return m + +def handlers(root): + tree=ast.parse((root/'addin/AdomBridge/commands/__init__.py').read_text()) + value=next(n.value for n in tree.body if isinstance(n,ast.Assign) and any(isinstance(t,ast.Name) and t.id=='COMMAND_HANDLERS' for t in n.targets)) + names=[ast.literal_eval(k) for k in value.keys] + assert len(names)==len(set(names)) + return dict(zip(names,[ast.dump(v) for v in value.values])) + +def sample(schema): + if 'oneOf' in schema: + base={k:v for k,v in schema.items() if k!='oneOf'};variant=schema['oneOf'][0] + merged={**base,**variant} + if 'properties' in base or 'properties' in variant: + merged['properties']={**base.get('properties',{}),**variant.get('properties',{})} + merged['required']=list(dict.fromkeys(base.get('required',[])+variant.get('required',[]))) + return sample(merged) + if 'enum' in schema:return schema['enum'][0] + kind=schema.get('type') + if kind=='object': + props=schema.get('properties',{});data={k:sample(props.get(k,{})) for k in schema.get('required',[])} + for key in props: + if len(data)>=schema.get('minProperties',0):break + if key not in data:data[key]=sample(props[key]) + while len(data) + + + + ''') + before=ET.tostring(board);data=r.board_bom(board,{}) + self.assertEqual([(x['mpn'],x['quantity'],x['designators']) for x in data['lines']],[('RES-10K',2,['R2','R10']),('',1,['TP1'])]) + self.assertEqual(data['boardOnly'],['TP1']);self.assertEqual(data['files'],{});self.assertEqual(ET.tostring(board),before) + self.assertIn('R2,R10',data['jlcpcbCsv']);self.assertNotIn('TP1',data['jlcpcbCsv']) + def test_schematic_plan_is_pure_and_preserves_pad_to_pin_net_mapping(self): + r=self.routing() + with tempfile.TemporaryDirectory() as folder: + p=Path(folder)/'owned.lbr';p.write_text('''''') + before=p.read_bytes();data=r.handle(None,{'libraryPath':str(p),'parts':[{'ref':'U1','deviceset':'DEVICE','block':'power'}],'nets':{'VIN':['U1.1']}},'schematic_plan') + self.assertTrue(data['success']);self.assertFalse(data['mutated']);self.assertEqual(data['groups'][0]['parts'],['U1']) + self.assertTrue(any(x.startswith("NET 'VIN'") for x in data['groups'][0]['commands']));self.assertEqual(list(Path(folder).iterdir()),[p]);self.assertEqual(p.read_bytes(),before) + +if __name__=='__main__':unittest.main(verbosity=2) diff --git a/docs/mechanical-verification/CAPTURE-POLICY.md b/docs/mechanical-verification/CAPTURE-POLICY.md new file mode 100644 index 0000000..a94d7b6 --- /dev/null +++ b/docs/mechanical-verification/CAPTURE-POLICY.md @@ -0,0 +1,7 @@ +# Capture policy — user correction October 5, 2026 + +The user reported over20,000 repetitive screenshots uploaded to Shotlog and explicitly requested a different approach. Continuous capture and automatic Shotlog draining are disabled for this task. The root stopped its exact drainer and native feed; no other session's feed was targeted. Existing artifacts are retained, not deleted. + +Use structured model state, API results, geometry/property checks, logs, operation history and artifact hashes as the default evidence. Take screenshots only when a meaningful visual change or a visually diagnosable failure requires inspection. Capture one useful frame per such checkpoint; exact-hash/perceptual-near-duplicate check before any upload. Do not publish empty, obscured, repetitive or otherwise unhelpful frames to Shotlog. Native correctness and visual review remain separate. + +No background capture loops, renewal scripts, periodic screenshots, or automatic Shotlog uploads may be started under the old workflow. Default native harness execution should not specify a Shotlog channel. Use local evidence files for any required visual artifact and upload only selected distinct useful frames. Follow this policy across resumptions and delegated work. diff --git a/docs/mechanical-verification/CP1-VERIFICATION.md b/docs/mechanical-verification/CP1-VERIFICATION.md new file mode 100644 index 0000000..e046b3d --- /dev/null +++ b/docs/mechanical-verification/CP1-VERIFICATION.md @@ -0,0 +1,46 @@ +# Checkpoint 1 independent live verification — 2026-10-02 + +Verdict: **PASS for exercised behavior**, with exact same-name component collision explicitly untested. Fusion's normal Hybrid document API automatically renamed the second component `SameName (1)`, preventing construction of that exact fixture. It is not counted as a pass. + +The public CLI was exercised on Windows target `adom_drew2`, Fusion `2705.1.11`, native bridge and add-in `1.12.0-dev.1`. Initial live failures were corrected in the unpublished development build: injected transport metadata rejected by strict validation, then an unavailable `Occurrence.isSuppressed` property in assembly revision inspection. The final assembly run used r3; its package hash supplied by the orchestrator is `6309c21bf46decc4768f28fe27ec7b1938355ea3226ad26a373c8e52c7391400`. The unchanged part workflow was not redundantly rerun after the narrowly scoped occurrence fix. + +## Verified behavior + +| Flow | Observed result | +| --- | --- | +| Parametric box | Public typed creation yielded one solid, 10 × 20 × 30 mm, 6,000 mm³. Independent raw Fusion readback agreed. | +| Identity and replay | Same operation ID and payload returned the original outcome without another document or edit. Changed payload under the same ID rejected. Old session, wrong document and stale revision rejected without geometry changes. | +| Units and parameters | `2 in` normalized to 50.8 mm. Changing depth from 30 to 40 mm changed measured volume to 8,000 mm³. | +| Failure recovery | Invalid dimension expression rejected before mutation. Zero-depth geometry failure restored the prior parameter and actual body metrics, with recovery reported verified. | +| References | Current body references resolved; wrong types and stale references rejected. Repeated occurrence body references resolved at their actual root-space position and retained occurrence context through face references. | +| Child changes | An independent raw API edit to a nested child changed its geometry. A write using the previous typed target rejected as stale and created no parameter. The controlled fixture was then restored. | +| Health | Explicit recompute reported complete, healthy state and successful computation. | +| Root mass and BOM | The root-owned box appeared in both legacy public verbs with 8 cm³ and mass 0.0216 kg, quantity one. | +| Assembly accounting | Root own volume 0.5 cm³; component A 1 cm³, repeated twice; component B 2 cm³, once; nested child 0.125 cm³, repeated twice. BOM: four part identities, six instances, weighted direct-body volume 4.75 cm³. Definition mass rows remained separate and avoided descendant double counting. | +| Export destination protection | Existing sentinel bytes and SHA256 remained unchanged after overwrite refusal, extension mismatch and unsupported format enum refusal. | +| Export artifacts | Typed F3D, STEP and STL produced nonempty files matching returned SHA256. Independent STL parsing measured 10 × 20 × 40 coordinates in millimetres. | +| Native roundtrip | Reopened F3D preserved box parameters, exact body metrics and topology counts. Assembly F3D preserved four component definitions and five occurrence objects. | +| Document preservation | Every task-owned document was closed only after its native checkpoint was reopened and verified. Original documents remained unchanged. | + +## Counts and limitations + +- Core r2: **37 substantive behavioral assertions passed**, plus **30 successful oracle/inspection availability checks**. +- Assembly r3: **22 substantive behavioral assertions passed**, plus **8 successful oracle/inspection availability checks**. +- One exact same-name collision scenario is **unsupported by the available fixture setup and untested**, not passed. +- Counts are assertions, including runtime/fixture prerequisites; they are not 59 different user workflows. +- The core raw log contains one harness expectation mismatch: an out-of-enum format returned `invalid_input`, while the first harness expected `unsupported_format`. Both represent safe refusal. The preserved sentinel hash proves the intended behavior. The raw log remains unchanged and `cp1-r2-adjudication.json` records this explicit correction. +- A real transport timeout/restart during a running mutation was not induced. Operation status and idempotent retry were exercised after completed writes. +- This verifies CP1 only. Sketch/feature construction, joints, interference and supplier acquisition remain later checkpoint work. + +## Evidence and artifacts + +- Core requests and responses: `cp1-102756-f25ee888-*.json`; full log `checkpoint1-r2-live.log`; raw summary `cp1-102756-f25ee888-summary.json`; adjudication `cp1-r2-adjudication.json`. +- Final assembly requests and responses: `cp1-104137-6c227991-*.json`; log `checkpoint1-r3-assembly.log`; summary `cp1-104137-6c227991-summary.json`. +- Original first live failure: `CP1-FIRST-LIVE-FAILURE.md` and exact request/response JSON. +- Occurrence API evidence: `cp1-occurrence-api-discovery.json`. +- Final assembly native archive: `artifacts/cp1-104137-6c227991/same-name-regression.f3d`, 95,807 bytes, SHA256 `986771501bf3ea3de2af2d3d94ec4aee0ff81482b25b343b63b316e271067d07`. +- Original reusable assembly fixture: `artifacts/legacy-regression-before-r3.f3d`, 95,057 bytes, SHA256 `7297499dec65e60fc034246fe95b46a4daacfd990c912c03fd318f4523206a56`. +- Actual native Fusion viewport of the assembly fixture: `artifacts/legacy-regression-before-r3.png`. This is a rendered CAD capture, not a generated illustration. +- Box exports: `artifacts/cp1-102756-f25ee888/verified-box.f3d`, `.step`, `.stl`. + +Final host state: only the original post-restart pristine `Untitled`, creationId `d6d0d6fd-45bd-43b0-b9a8-0f8076ee3b20`, unsaved and unmodified. Exclusive host control was returned to the orchestrator. diff --git a/docs/mechanical-verification/CP2-VERIFICATION.md b/docs/mechanical-verification/CP2-VERIFICATION.md new file mode 100644 index 0000000..e0ce9a7 --- /dev/null +++ b/docs/mechanical-verification/CP2-VERIFICATION.md @@ -0,0 +1,63 @@ +# Checkpoint 2 independent live verification — 2026-10-02 + +Verdict: **PASS for exercised behavior**. All 16 advertised feature families produced real, independently measured Fusion geometry across 15 fixture groups. A focused second-direction pattern fixture also passed. No unsupported outcome remains in the retained final coverage. + +The public CLI ran against Windows target `adom_drew2`, Fusion `2705.1.11`, bridge and add-in `1.12.0-dev.2`. Final r1 package SHA256 supplied by the orchestrator: `f389e394253198cb2af69fcd155a62043c09b8934920cd1fe98d9f4d7591958e`. + +## Live defects found and verified fixed + +- Construction-plane and construction-axis references used an unavailable ownership property. The corrected ownership path passed offset-plane sketches, loft, split and a direct guarded construction-axis reference for a 30° plane. +- A one-direction rectangular pattern inherited Fusion's second-direction default, producing nine bodies instead of three. The corrected operation produces three bodies at x = 0, 5, 10 mm. The second-direction branch produces six bodies at x = 0, 5, 10 and y = 0, 7 mm. An incomplete second-direction tuple safely refuses and restores the original model. + +The original logs and failed fixtures remain preserved. Ten unaffected green groups from the first sweep were retained; only the five affected groups were rerun after r1. + +## Observed behavior + +| Area | Independent result | +| --- | --- | +| Sketch construction | Line, rectangle, circle, arc, polygon, slot, spline and point produced live geometry. Horizontal/vertical constraints, a fixed corner and two parameter-driven dimensions made the plate fully constrained. Circle radius editing and fixed-state readback passed. Body-edge projection produced real sketch entities. | +| Transactions and identity | Explicit transaction probe restored scratch content. A stale sketch reference refused without geometry changes. A three-step parameter batch changed width, created a parameter, then made thickness invalid; abort restored parameter expressions, body metrics and timeline. A valid width/thickness batch drove the final plate to 8,717.256661 mm³. | +| Extrude and hole | 40 × 20 × 8 mm plate measured 6,400 mm³. A 6 mm diameter through-hole reduced it to 6,173.805329 mm³ and produced a cylindrical face. | +| Fillet lifecycle | 1 mm corner fillet reduced volume; changing its actual model parameter to 1.5 mm reduced it further. Rename, suppression, unsuppression and deletion persisted, with measured geometry matching each state. | +| Chamfer | 20 mm cube changed from 8,000 to 7,990 mm³. | +| Shell | Removing the top face and leaving 2 mm walls produced 3,392 mm³, matching the independent wall-volume calculation. | +| Draft | 3° draft changed the valid cube to 7,790.36888 mm³. | +| Move and mirror | Translation moved the seed minimum to [10,20,30] mm without volume change. Mirror produced two bodies totaling 48 mm³. | +| Patterns | One-direction rectangular pattern: three bodies, 72 mm³. Two-direction pattern: six bodies, 144 mm³. Circular pattern: four bodies, 96 mm³. Positions were independently measured. | +| Revolve | Annular section revolved to 4,712.388980 mm³, matching π(10²−5²)×20. | +| Loft | Circular sections of radii 5 and 10 mm, 20 mm apart, produced 3,665.191429 mm³, matching the frustum formula. | +| Sweep | Radius 2 mm circular section swept 20 mm produced 251.327412 mm³. | +| Combine | Two overlapping boxes joined into one 1,500 mm³ body. | +| Split | 2,000 mm³ box split into two bodies of 1,000 mm³ each. | +| Modeled thread | M6×1 external thread produced actual helical topology: six faces and 220.68729 mm³, below the unthreaded cylinder volume. | +| Status while busy | A completed operation's status returned in 0.239 seconds while an independently launched six-second main-thread script was still running. | +| Native persistence | Each fixture's exported F3D was reopened and checked for parameter expressions, body count, total volume and timeline count before closing its exact owned document. | + +## Counts and limits + +| Retained evidence | Behavioral assertions | Oracle/inspection availability checks | +| --- | ---: | ---: | +| Ten green first-sweep groups | 78 | 117 | +| Five-group r1 rerun | 110 | 167 | +| Focused two-direction pattern | 12 | 14 | +| Total | **200** | **298** | + +Counts are assertions, including runtime and fixture prerequisites, not 200 distinct workflows. `cp2-final-adjudicated-summary.json` contains the exact retained cases and source runs. + +The focused tuple-refusal log contains one harness expectation mismatch: the response has `errorCode: mutation_failed` with `causeCode: invalid_input`, while the initial assertion looked only at the top-level code. The unchanged independent before/after oracle and verified recovery establish correct refusal. `cp2-pattern2d-adjudication.json` records that correction; raw evidence was not rewritten. + +Two initial harness assumptions were also corrected before r1: API rectangle creation does not promise UI-inferred constraints, so the fixture now explicitly applies its constraints; a solver-adjusted line endpoint cannot be selected by its original exact x coordinate. These were fixture issues, not product failures. + +Coverage is representative for each feature family, not every feature option or geometry class. Constraint and dimension coverage is horizontal, vertical and fixed with horizontal/vertical driving dimensions. Projection coverage is a BRep edge. Thread coverage is one external modeled M6×1 thread. The busy test proves completed-status retrieval during a busy main thread; it does not prove cancellation, restart recovery or querying a long-running typed mutation. Assembly behavior is CP3 work. + +## Evidence and artifacts + +- Initial sweep: `checkpoint2-live.log`, `cp2-105522-4aeb7bf4-*.json`; retained green cases in `cp2-retained-green-cases.json`. +- Five-group r1 rerun: `checkpoint2-r1-live.log`, `cp2-110602-73e51818-*.json`. +- Focused pattern: `checkpoint2-pattern2d-live.log`, `cp2-111013-303056d6-*.json`. +- Private harnesses: `checkpoint2.py`, `checkpoint2_pattern2d.py`. +- Actual Fusion viewport: `artifacts/cp2-110602-73e51818/constrained-plate.png`, 32,467 bytes, SHA256 `cc7bc17606141507967c8a8b90dbdaf053ac04c808726f15db7b812d8da49b3e`. +- Editable plate archive: `artifacts/cp2-110602-73e51818/constrained-plate.f3d`, 85,600 bytes, SHA256 `a85c2e06bb361f57a603572f7fb78667372b8fbe8375677709b4b57838f789b7`. +- Other native fixture archives remain in their recorded private Windows run directories under `C:/Users/drew/AppData/Local/Temp/adom-fusion-mechanical-verification-2026-10-02/`. + +Final host state: only original `Untitled`, creationId `cfc2453b-62f1-4243-8fc4-85752a64aefd`, unsaved and unmodified. Exclusive host control returned to the orchestrator. diff --git a/docs/mechanical-verification/CP3-LIVE-FINDINGS.md b/docs/mechanical-verification/CP3-LIVE-FINDINGS.md new file mode 100644 index 0000000..e423461 --- /dev/null +++ b/docs/mechanical-verification/CP3-LIVE-FINDINGS.md @@ -0,0 +1,76 @@ +# CP3 initial live findings + +Runtime: bridge/add-in `1.12.0-dev.3`; deployed r1 archive SHA256 supplied by orchestrator `2336f1e54791368904a3489d40178d9b4cf0637f2e2072628437c4e7af935e14`. +Initial run: `cp3-112943-585e4ec9`; log `checkpoint3-live.log`. + +## Nested component creation — product defect + +Typed root component creation, sketch geometry and extrusion succeed. Typed `component_create` using that component definition as `parent` fails after adding the child: + +`3 : Tokens can only be created for proxies whose top-level parent is the root component.` + +The response reports `mutation_failed`, cause `kernel_error`, and verified `PTransaction.Abort` recovery. The partial fixture exported/reopened successfully and was closed by exact identity. + +Controlled raw API evidence: `cp3-113418-9dfdddd6-005-local-vs-root-context.json`. A local child occurrence has no assembly context and an unusable entity token, but its component token works. Each matching `rootComponent.allOccurrences` proxy has a usable token and its `nativeObject` compares equal to the local child. Two repeated parent instances produce two valid root-context child proxies. + +## Supplier CAD readback — product defects + +Typed import of the genuine previously downloaded McMaster `3597N17` STEP fails with `2 : InternalValidationError : res >= 0`; rollback is verified. An incorrect expected SHA256 is safely rejected before mutation. + +The controlled import-stage probe proved that `importToTarget2`, `computeAll` and `PTransaction.Commit` succeed together. There is no evidence that native STEP import requires abandoning the transaction boundary. The intended outside-transaction comparison was unnecessary after this positive result; it was not run. + +`cp3-import-postreadback-probe.json` identifies two independent readback defects: + +- `current_target → revision → feature_data → timeline.index` throws on the imported `BaseFeature` within a timeline group. Its timeline object is valid and unsuppressed; the parent group exists. Health checks pass. +- `recovery_snapshot → topology_witness → geometry_data` assumes every edge has curve geometry. The genuine screw contains a valid degenerate edge: length zero, coincident endpoints, `geometry=None`, `evaluator=None`, `isDegenerate=True`. + +Exact feature/edge evidence: `cp3-import-feature-and-degenerate-edge-probe.json`. + +The retained diagnostic scratch was checkpointed using raw native export, reopened, and independently compared before exact-ID closure. Archive: `C:/Users/drew/AppData/Local/Temp/adom-fusion-mechanical-verification-2026-10-02/cp3-113609-aefa4128/raw-import-probe.f3d`, 606,653 bytes, SHA256 `5aa1ee5f828dca8089a6dd58723c151dc704401376934cd7bacdf7602ef083ca`. Evidence: `cp3-import-probe-raw-checkpoint-cleanup.json`. This diagnostic import is not counted as a passing public typed import. + +## Private harness correction + +Initial moving-joint fixtures reused `Base`/`Link` setup operation IDs across different documents. The product correctly rejected these as `operation_conflict`. The harness now includes fixture identity in every mutation operation ID. The six moving-joint groups are rerun separately; the refused initial setup groups are excluded from final behavioral coverage. + +## Initial unaffected behaviors and suppression correction + +Rigid joint creation, wrong-motion rollback, unsuppression, F3D persistence, deletion and subsequent free placement passed. Rigid-group membership, rename, unsuppression, persistence, deletion, absolute rotation/translation, explicit grounding and grounded-move refusal passed. **Rigid joint and rigid-group suppression failed** in the initial raw summary. Earlier progress summaries incorrectly described both groups as fully green; exact case aggregation caught and corrected that error before acceptance. Both groups require r3 rerun. Interference measured the expected 500 mm³ overlap, then zero interference at 1 mm clearance without creating model bodies, and is the only fully retained initial modeling group. + +## Moving-joint persistence — product defect + +Corrected harness run `cp3-113959-103e6ab9` created all six moving-joint families with their limits and verified their initial poses and native archives. Every valid drive was refused by the product's postcompute guard with verified rollback. + +Controlled raw proof: `cp3-114417-f5b2a6ea-006-drive-vs-compute-vs-snapshot.json`. Setting the revolute value to 15° immediately changes the occurrence pose and creates a pending snapshot. `computeAll()` without capturing it resets the value and pose to zero. Calling `design.snapshots.add()` first preserves the 15° value and pose after recompute. This result is identical with the rest limit enabled or disabled. All four probe variants were aborted, and the independent full assembly witness matched the baseline. The diagnostic fixture was checkpointed, reopened and closed. + +## r2 acceptance and remaining failures + +Run `cp3-115031-8c1bf048` used the r2 archive `c090ce1f5e4f531a12c6d418855b4d0f19f6472e00f13cbad54b11b88b96b488`. Nested component creation, repeated child contexts and movement now pass. All six moving joint families drive their actual occurrence geometry, preserve the grounded base, reject beyond-limit edits with complete rollback, and preserve their driven state through native archives. The genuine supplier STEP imports through the typed API; provenance/checksum, camera preservation, degenerate-edge readback, repeated purchased quantity, flat/structured CSV, and full native persistence pass. + +Three remaining defects prevent final acceptance: + +- A freshly returned `Frame` component reference fails independent-copy insertion with `ambiguous_reference`. Diagnostic `cp3-115833-2ff21622-006-token-probe-native-diagnostic.json` proves `findEntityByToken` returns two valid Component objects that both compare equal to the selected Frame and to one another. Pin behaves identically. This holds before/inside the transaction, after recomputation, and after abort. The root component token returns zero candidates. The component does not expose nativeObject or assemblyContext. API-object equality deduplication is supported; selecting an arbitrary distinct candidate is not. +- All six moving joint `suppressed:true` edits return success but fresh inspection reports false. Diagnostic `cp3-115833-2ff21622-014-suppression-probe-native-diagnostic.json` proves the joint setter creates a pending snapshot. Without capture, recomputation restores false; capturing first preserves true while retaining the 15° pose. Timeline-object suppression is a separate state and does not change `joint.isSuppressed`. Every diagnostic variant aborts and restores the full witness. +- Supplier BOM physical volume is 661.1019959853226 mm³ versus the independent high-accuracy result 661.1472941491247 mm³ (0.0069%). Collapsed and exploded purchasing totals agree. Installed BOM uses default `body.physicalProperties` and `component.getPhysicalProperties()` accuracy without declaring it, while assembly properties explicitly uses HighCalculationAccuracy. The strict comparison remains a failure pending consistent high-accuracy computation; tolerance was not widened. An early progress message overstated the supplier group as fully green and was corrected. + +The r2 fixtures and diagnostic fixtures were all checkpointed, reopened and closed by exact ID. Original Untitled `b9983223-4570-402c-9537-310610d4c5e9` remains alone, unmodified and unsaved. Host released to orchestrator for r3. + +Additional group proof: `cp3-120519-062c6981-006-group-suppression-native-diagnostic.json` confirms both rigid-group suppression and unsuppression create a pending snapshot. Capture before compute preserves the requested state; without capture, suppression reverts. Both experiment variants aborted and restored the full witness. The owned reopened group fixture was archived, reopened and closed; the same original document remained pristine. + +## r3 complete sweep and copied-placement defect + +Run `cp3-121116-6159c012` completed all eleven groups with 732 recorded checks passing. The separate native picker has 29 passing recorded checks. A visual audit of the actual assembly viewport exposed an omitted placement expectation: the independent copy overlaps the original. Exact request/response `cp3-121116-6159c012-039-assembly-accounting-Frame-independent.json` requests [80,0,0] mm but returns success with [20,0,0] mm. The native archive independently confirms the incorrect position. `cp3-r3-independent-copy-adjudication.json` records this additional **FAIL** without rewriting the original evidence. The accounting helper includes it, so r3 is not accepted. Initial identity/edit-isolation assertions were insufficient; immediate and later-placement assertions are now explicit. + +All other r3 groups, including all seven joint families, rigid groups, interference, and the supplier workflow, passed their complete recorded checks. The supplier BOM now declares high accuracy and matches the independent native computation without widening tolerance. Joint and group suppression survive recomputation; the suppressed revolute and rigid-group states were also archived and reopened before unsuppression. The next focused gate reruns the full assembly and supplier groups plus a new repeated rotated-parent placement fixture. Nine complete unaffected r3 groups can be retained with exact per-case provenance. + +Native copied-placement discrimination: + +- `cp3-122129-faffb9dd-006-copy-placement-native-diagnostic.json`: root independent copy immediately takes 80 mm and has a pending snapshot. Recompute without capture resets it to 20 mm. Capture alone, or explicit transform followed by capture, preserves 80 mm. +- `cp3-122231-1a82d72f-006-copy-placement-native-diagnostic.json`: a local nested copy cannot accept transform2 overrides; Fusion requires a root-component proxy. Local grounded-state inspection is unavailable and was corrected in the private diagnostic only. +- `cp3-122502-940b3a48-006-copy-placement-native-diagnostic.json`: two rotated parent instances require each child root proxy to receive parent-world × requested-local transform. After snapshot capture and compute, both contexts are correct: [80,130,0] mm at 120°, and [20.710678,-22.426407,0] mm at −15°. The local occurrence getter remains at the old 20 mm position. Local initialTransform editing reports that it cannot find the occurrence path. +- `cp3-122743-27ebe17d-006-copy-placement-native-diagnostic.json`: root-proxy initialTransform editing requires timeline rollback and was not pursued. Captured root-proxy overrides **do** propagate correctly when the parent definition is reused later: a third parent at [200,0,0] mm yields child [280,20,0] mm at 30°, while the existing two instances retain their expected poses. + +Every diagnostic transaction was aborted and checked against the full independent witness. The reopened diagnostic documents were checkpointed, reopened and closed. Final original after r3/probes: Untitled `28f84cb4-6784-4700-a225-c8767b04753b`, alone, unmodified and unsaved. + +## Separate native McMaster picker acceptance + +Run `cp3-114558-46db347b` proves public discovery/open, native picker UIA identity, exact Close-button invocation, popup disappearance, and unchanged model witness. No ordering or new download occurred. The window-targeted PrintWindow capture was black and is not treated as visual confirmation. UIA evidence and closure checks are authoritative. See `cp3-picker-verification.json` and `cp3-picker-tree.json`. diff --git a/docs/mechanical-verification/CP3-SOURCE-REVIEW.md b/docs/mechanical-verification/CP3-SOURCE-REVIEW.md new file mode 100644 index 0000000..e97fef3 --- /dev/null +++ b/docs/mechanical-verification/CP3-SOURCE-REVIEW.md @@ -0,0 +1,103 @@ +# Checkpoint 3 adversarial review + +Read-only review of /home/adom/project/fusion-mechanical-build; no production edits or host CAD calls. Source and focused offline evidence only; no expensive suite repetition. + +## Resolved findings + +- MEDIUM, high confidence: core.resolve repaired native-token resolution for a nested Occurrence but not for body/face/edge occurrence contexts. An emitted nested-body reference failed invalid_context while its parent occurrence reference resolved. Shared occurrence_context helper now recovers the exact instance by native identity and full path. Independent cp3-nested-body-ref.py now resolves Assembly:2+Part:1 exactly. +- MEDIUM, high confidence: purchased.material_assign compared only display names. With two document materials sharing a name, an injected refused setter was accepted despite retaining the wrong material ID. Final serializer now requires the requested unique material ID, after recompute. Independent cp3-material-readback.py now refuses it with material_failed. Library-to-document identity semantics remain a live gate; mismatch fails closed. +- MEDIUM, high confidence: interference traversal counted occurrences but not their direct bodies and checked each selected subtree separately. Two instances of a component containing 11,000 bodies were accepted as 22,000 physical instances and reached the kernel despite the intended 20,000 budget. Shared visited count now increments per body; the cumulative selected instance set is capped before kernel analysis. Independent cp3-interference-budget.py verifies refusal before the kernel. Exact frozen snapshot probe now also passes; assemblies.py SHA-256 62db0ad90554984b876df03345262fffa09ff2f46334b42ed040fc70d36e9225 matches the reviewed working source. +- Compatibility concern proactively resolved: Joint/AsBuiltJoint.jointMotion is documented as returning a base JointMotion wrapper. Readback and edits now explicitly cast the seven known subclasses and fail closed on unavailable/unknown/cast-failed motion, avoiding silent omission of limits. Null joint transforms are supported. + +## Independent probes + +- cp3-bom.py: root direct body; repeated two-instance purchased kit; same-name distinct definitions; housing quantity2/screw quantity4 after explode; physical totals count7 body instances and mass15; excludeFromBom removes four purchasing rows without altering physical mass; suppressing one kit removes that physical subtree and decrements purchased quantity. +- cp3-nested-body-ref.py: native/proxy token behavior, exact nested path retained in occurrence and body references. +- cp3-material-readback.py: same-name different-ID material mismatch fails closed under refused-setter fault injection. +- cp3-final-delta.py: deferred post-compute transform and grounding mismatches fail closed; selecting an ancestor occurrence and its contained nested body is refused as overlapping_selection. +- cp3-interference-budget.py: two root occurrences sharing 11,000 body definitions yield 22,000 physical instances; corrected code raises inspection_budget with kernelCalled=false. +- cp3-witness.py: base wrapper cast exposes motion fields; null transform accepted; changes to supplier, component material, body material, limit, drive and suppression all alter component witness; unknown motion refuses. + +## API checks + +Checked official current signatures for ball/planar as-built motion, Occurrence.transform2/isGroundToParent, JointMotion/RevoluteJointMotion, RigidGroup, Component.getPhysicalProperties, Material.id/material assignment. Ball schema correctly omits axis since built-in ball axes are Z pitch / X yaw. + +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_AsBuiltJointInput_setAsBallJointMotion.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_AsBuiltJointInput_setAsPlanarJointMotion.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_transform2.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_isGroundToParent.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_AsBuiltJoint_jointMotion.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_JointMotion.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_RevoluteJointMotion.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_RigidGroup.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_Material_id.htm + +Import source validation, model transaction integration, provenance hash comparison, explicit native McMaster launch-only semantics, combined BOM traversal budget, cycle guard and CSV commit-boundary handling were source-reviewed. Actual kernel import rollback, material-library assignment, saved/archive provenance retention and all motion families require the independent host gate. + +Final bounded convergence reviewed frozen /home/adom/project/research/fusion-mechanical-build-2026-10-02/checkpoint3-source, including post-compute placement/grounding readback, root-context guards, nested-body overlap and prior resolved findings. No additional concrete defect found. The last interference budget correction is independently verified against the exact frozen snapshot: 22,000 instances refused with inspection_budget and kernelCalled=false. No unresolved confirmed critical, high or medium source defect remains after the final anything-left pass. Host/kernel semantics remain the verifier live gate. + +## Nested creation live-failure correction review + +Reviewed builder's post-live delta in working assemblies.py (created_occurrence_result), purchased.py and schema/contract. The local occurrence returned by adding to a nonroot component definition must not be tokenized directly. Helper resolves all root.allOccurrences whose native occurrence compares equal, or creates contexts using only exact parent-definition occurrences. create/insert/import defer this readback until after recompute and before transaction commit. Results explicitly distinguish definition-wide edits and all affected root instance references. + +Independent cp3-created-occurrence-context.py passes nine focused checks: distinct API wrapper native equality; unrelated occurrence sharing the same component excluded; all reused/nested parent paths included; returned reference roundtrip retains exact path; fallback chooses only exact parent definitions; nested fallback paths retained; null contexts refuse; missing parent refuses; direct root insertion retains one occurrence. Definition-local entityToken property was instrumented to raise and never accessed. No additional actionable defect in final bounded anything-left pass for this delta. Actual native equality and proxy behavior remain verifier's controlled live check. + +Official API references: +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_nativeObject.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_createForAssemblyContext.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Component_allOccurrences.htm + +## Imported timeline/degenerate-edge correction review + +Reviewed working readback.py/core.py/operations.py after native importer success exposed readback exceptions. Import transaction logic is unchanged. Timeline index tolerates only the recognized RuntimeError diagnostic on a still-valid timeline object; index=null/indexUnavailable is explicit, while feature name/type/suppression and component collection order remain in revision and recovery witnesses. Other index failures, invalid timeline objects and suppression read failures still propagate. + +Missing curve geometry is special-cased only by edge_geometry_data for an explicitly degenerate edge with at least one readable vertex. Edge length and vertex positions remain in topology data and recovery witness. General face/sketch geometry, nondegenerate missing curves and degenerate edges without positions continue to fail. This is representation of a point-like native edge, not a generic unknown placeholder. + +Independent cp3-import-readback.py passes ten focused checks, including a moved degenerate vertex causing transactions.equivalent(before,after)=false, so that loss cannot silently receive a successful recovery claim. No actionable defect found in final bounded anything-left review of this delta. Native verifier independently owns import rerun and recovery confirmation. + +Official sources checked: +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_BRepEdge_isDegenerate.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_TimelineObject_index.htm + +## Joint-driving snapshot correction review + +Reviewed narrow assemblies.py delta: configure_joint now receives design, assigns all requested motion axes, then captures one pending position snapshot. Limits-only edits do not enter the capture branch. Joint create/edit retain deferred joint_result after transaction recompute and report positionCaptured explicitly. No rest values or flags are rewritten by the capture logic. Snapshot is inside the transaction, before computeAll and commit. + +Independent cp3-joint-capture.py passes six checks: all axes precede exactly one capture; degree/mm conversion precedes capture; rest values/flags stay unchanged; no pending pose reports false; null snapshot fails; a simulated postcompute reset still raises joint_drive_refused. Final bounded anything-left review found no new actionable defect. Native verifier owns the already reported rest-enabled/rest-disabled persistence and abort-restoration evidence. + +## Joint and rigid-group field veracity correction + +Live suppression refusal exposed missing requested-field comparisons in joint_result. Independent fault injection also found an implicit-limit enabling gap: supplying minimum/maximum/rest derives Enabled=true in mutation, but serializer previously checked only the number. New serializer checks requested name/suppression and derived enable flags unless explicitly false. Rigid-group create/edit now use the analogous name/suppression guard. Transaction wrapping preserves causeDetails, retaining resolver matchCount without losing recovery reporting. + +cp3-joint-field-readback.py independently confirms four joint mismatch refusals, three explicit-false acceptance cases, and two rigid-group mismatch refusals. No further actionable issue in this bounded delta review. Actual suppression persistence remains a native investigation; returning an error with measured recovery is truthful even when the native operation is unsupported. Component-token resolver remains unchanged while native candidate counts are investigated; no premature identity relaxation was approved. + +## Final r3 exact-snapshot review + +Reviewed /home/adom/project/research/fusion-mechanical-build-2026-10-02/checkpoint3-source after root copied the final six-file delta (reported archive SHA-256 d8b5d98e102996ca2a32a17937dc717c085ea1133455ba009a1d38640be5331b). No production edits or host calls. + +- cp3-r3-identity.py passes ten focused checks: Component duplicate wrappers collapse only on actual API equality; different names/tokens on equal objects do not matter; distinct objects with identical names/tokens still refuse; invalid/wrong-type/zero-result candidates refuse; face/Occurrence arrays retain strict one-result behavior; explicit root ID only emitted for actual parentDesign.rootComponent and resolves only with matching document/revision/root API identity/type/no occurrence context/allowed operation type. Changing the active root rejects the prior root reference. No token-string or name identity shortcut. +- cp3-r3-suppression.py passes eight checks: joint and rigid-group suppression/unsuppression each capture once after mutation, absent pending state reports false, null snapshot fails, and a simulated postcompute suppression reset fails deferred readback. +- cp3-joint-field-readback.py rerun against frozen snapshot: all nine cases pass (name/suppression/implicit limit enables mismatch rejection plus explicit-false acceptance). +- Source-reviewed BOM HighCalculationAccuracy calls in purchased subtree rows, direct purchasing-body rows and physical instance traversal, with explicit reported calculationAccuracy. Quantity/grouping logic unchanged. Transaction causeDetails retains native resolution diagnostics alongside measured recovery. + +Final bounded anything-left pass for r3 found no unresolved actionable source defect. Approved proceeding to verifier's isolated live acceptance gate; this approval is source/fault-injection review, not a claim that all native scenarios already passed. + +## Independent-copy placement correction review + +Native r3 acceptance found independentCopy retained source pose20mm when80mm was requested. Reviewed working assemblies.py/purchased.py correction: create, insert and local CAD import explicitly set the newly created definition-local occurrence transform, validate immediate readback and capture pending pose; deferred serializer validates after recompute before transaction commit. It also validates every returned root proxy against exact parent root transform multiplied by requested local transform. Parent lookup requires actual component/API equality plus exact path; rotated/reused parent coordinates are not compared directly with the local request. + +An intermediate fault-injection finding was resolved: local pose alone could match while a second affected root proxy drifted. cp3-created-placement.py now accepts correct rotated+translated parent contexts and refuses that isolated proxy drift. It also verifies setter-before-capture order, ignored setter refusal, null capture refusal, local postcompute reset refusal and malformed/nonfinite transform refusal. Shared transform comparator requires all16 finite matrix elements. No further actionable defect found in bounded final anything-left review of candidate. Root informed source clearance is conditional on verifier's native copy/rotated-context proof and final frozen-copy check. + +## Final r4 supported root-proxy placement review — supersedes interim local-setter candidate + +Native verification rejected the earlier definition-local transform2 setter and local initialTransform setter. The earlier source-only conditional candidate clearance does not apply to that unsupported approach. Final r4 uses only placed root proxies, explicitly composes each exact parent root transform with the requested local pose, applies all placements, captures once, and validates every root proxy again after recompute. A stale definition-local base pose is deliberately not treated as the computed assembly pose. Result declares placementScope=all_current_parent_instances; later/future-instance persistence is not inferred merely from this source review. Builder/verifier separately reported native evidence that a later third parent instance inherited the requested pose. + +Exact frozen source reviewed at /home/adom/project/research/fusion-mechanical-build-2026-10-02/checkpoint3-source. Hashes independently matched cp3-r4-reviewed-delta-hashes.json: + +- addin/AdomBridge/commands/mechanical/assemblies.py: 7c9b2fdc266db0d5815483d1d7e962e653c70990b03b99448d69d193804bf477 +- addin/AdomBridge/commands/mechanical/purchased.py: c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1 +- tests/test_mechanical_assemblies.py: b4ace10bf3636c54ad0c9fed49d00319eb89e808ddb62e9e4b65e925466deca2 + +Independent cp3-r4-proxy-placement.py passes nine focused checks: unsupported local setter/token never accessed; translated and rotated/deeply nested reused parents compose correctly; both proxies set before one capture; stale native base pose tolerated; explicit current-instance scope and all affected references returned; single-proxy postcompute drift refuses; missing and duplicate parent coverage refuse; same-path wrong-API-identity parent refuses; null capture fails. Creation, shared/independent insertion and import use the same helper and final serializer inside the PTransaction before commit, so a partially applied proxy placement cannot be returned as successful; abort restoration remains measured by the existing occurrence-transform witness. + +Final bounded anything-left pass: no unresolved actionable source defect in r4 delta. Root cleared for isolated deployment and live acceptance. No host calls or production edits performed by adversarial reviewer; native all-operation acceptance remains verifier-owned. diff --git a/docs/mechanical-verification/CP3-VERIFICATION.md b/docs/mechanical-verification/CP3-VERIFICATION.md new file mode 100644 index 0000000..ece1487 --- /dev/null +++ b/docs/mechanical-verification/CP3-VERIFICATION.md @@ -0,0 +1,74 @@ +# Checkpoint 3 independent live verification — 2026-10-02 + +Verdict: **PASS for exercised behavior**. Final evidence contains **408 behavioral assertions and 407 oracle/inspection availability checks, all passing**. There are no unsupported or failed outcomes in the retained acceptance set. These are 815 recorded assertions/checks, including prerequisites, not 815 distinct workflows. + +The public CLI ran against Windows target `adom_drew2`, Fusion `2705.1.11`, bridge/add-in `1.12.0-dev.3`. Final r4 package SHA256: `5662cea028729195f23395f58343a4a7a28ff224722a473ff5aa8806be11cc6f`. Native executable SHA256 supplied and checked by the orchestrator: `72c94ce3d1f0ed1a7fc463a399c693570bc3c46316898ababd2d432a4b453be8`. + +The verifier independently checked the archive SHA and the loaded assembly, reference-resolution and BOM module hashes against the r4 manifest. Both installed add-in locations had matching module bytes; six loaded copies represented three modules. See `cp3-r4-deployment-verification.json`. Readiness confirmed the expected versions and `addinStale:false`. + +## Exact acceptance provenance + +| Retained source | Coverage | Behavioral assertions | Availability checks | +| --- | --- | ---: | ---: | +| `cp3-123613-f8a50491` — r4 | Full assembly accounting, new repeated/rotated placement fixture, full supplier workflow | 123 | 121 | +| `cp3-121116-6159c012` — r3 | Nine complete groups: seven joint families, rigid groups, interference | 270 | 272 | +| `cp3-114558-46db347b` | Separate native McMaster picker open/close | 15 | 14 | +| Total | Twelve modeling groups plus picker | **408** | **407** | + +The nine retained groups contain 542 checks: rigid 66, revolute 65, slider 59, cylindrical 60, pin-slot 60, planar 61, ball 61, rigid groups 67 and interference 43. Each is an entire passing block from fixture creation through verified archive/reopen and exact-ID closure. No partial red group was retained. + +`cp3-final-adjudicated-summary.json` contains every accepted case, its exact source run, retained-group boundaries, and the resolved historical placement finding. `cp3-final-accounting.json` is the compact accounting output. `cp3_finalize_evidence.py` rejects missing/incomplete fixture groups and any nonpassing accepted case. + +## Observed behavior + +| Area | Independent result | +| --- | --- | +| Root and definition references | Explicit root-component references support guarded physical-property reads and metadata writes. Repeated definitions resolve even when Fusion returns duplicate API-equal token candidates. Stale targets and cyclic containment refuse without changes. | +| Assembly identity and edit isolation | Repeated Frame instances share the source definition. Paste New returns a distinct definition. A source depth edit doubles source volume from 1,000 to 2,000 mm³ while the independent copy stays 1,000 mm³. The independent copy retains its requested [80,0,0] mm placement immediately and after later parameter edits. | +| Nested placement | The focused fixture verifies independent copies, shared insertions and new components under two differently rotated parent instances. Third and fourth parents added later inherit the intended placements. Every root-context matrix matches independently calculated parent-world × requested-local transforms. Later source parameter edits preserve those poses and copy independence. Native volume is 660 mm³. | +| Material and assembly properties | Assigning Steel changes assembly mass from 0.013932 to 0.034738 kg. Seven body instances total 5,160 mm³. Root high-accuracy mass, volume and center of mass match independently summed/weighted instance properties. Final center of mass is [43.2531521677,5.1804364097,9.4619724797] mm. | +| BOM policies and CSV | Repeated quantities and root bodies are counted. Purchased assemblies collapse child purchasing rows; exclusions remove purchasing subtrees while preserving physical totals. Flat/structured CSV quantities, hierarchy, metadata, supplier provenance and physical values match the typed BOM. Formula-leading metadata is escaped, and refusal to overwrite an existing CSV preserves its exact bytes. | +| Seven as-built joint families | Rigid, revolute, slider, cylindrical, pin-slot, planar and ball types create and read back correctly. Moving joints preserve initial poses, use degree/mm limits, drive the actual Link pose and retain the grounded Base. Tested angles are 15°; tested linear values are 3 mm. Beyond-limit edits with a simultaneous rename roll back the captured assembly witness. | +| Joint lifecycle and persistence | Suppression/unsuppression persists after recompute for all seven families. The suppressed revolute state is exported and reopened before unsuppression. Driven values, limits and poses survive final native archives. Rigid joint deletion permits subsequent independent placement. | +| Rigid groups | Exact membership, rename, suppression, unsuppression and deletion pass. The suppressed group is exported/reopened before unsuppression. Subsequent absolute translation/rotation works; moving a grounded occurrence without explicit ungrounding refuses. | +| Interference | Two 10 mm cubes with 5 mm overlap produce one 500 mm³ interference result without adding model bodies. After moving to a 1 mm clearance, the query returns no interference. Native child-body selection without required occurrence context refuses. | +| Genuine supplier import | Previously downloaded McMaster `3597N17` STEP imports real screw geometry through the typed API. Incorrect SHA refuses before mutation. Camera, source bytes and provenance are preserved. Two purchased instances total 661.147294149 mm³ at explicit high calculation accuracy. Degenerate-edge and grouped imported-feature readback are honest. | +| Supplier persistence | Supplier, part number, source URL, source SHA, purchased policy, repeated quantity and modeled geometry survive F3D export/reopen. Flat and structured supplier CSV fields are checked against typed metadata. | +| Native McMaster picker | Public discovery/open succeeds. UIA identifies `QTApplication.QTToolFrame:DialogOfMcMasterCarrWebViewer`, its catalog document, title and Close button. Invoking that exact button removes the observed popup and leaves the model witness unchanged. No ordering or new download occurs. | + +The native archive comparison covers the captured assembly witness: parameter expressions, body metrics, component materials/metadata, occurrence poses/grounding, joint motion/limits, rigid groups and timeline count. Reopened document identities are deliberately excluded from content equality. + +## Defects found and verified fixed + +The live loop found nested local occurrences with unusable tokens, duplicate API-equal component token results, an unresolvable root token, imported timeline-index getters that throw, and valid degenerate edges with no curve geometry. Corrected readback/reference behavior passes the final fixtures. + +Moving joint values and joint/group suppression were transient until Fusion captured the pending position snapshot. The final gate verifies actual poses, requested suppression and native persistence. BOM default-accuracy calculations differed from the high-accuracy oracle by 0.0069% on the screw; the implementation now uses and declares high accuracy. No numeric tolerance was widened. + +The full r3 sweep had 732 passing recorded checks, but a subsequent viewport/native-witness audit found that the independent copy requested at 80 mm was actually placed at 20 mm. The original harness checked definition identity and edit isolation but omitted that placement assertion. The raw request/response and additional **FAIL** remain in `cp3-r3-independent-copy-adjudication.json`; r3 was not accepted. The r4 replacement includes explicit immediate/later placement assertions and the new repeated rotated-parent fixture. The final summary links the original failed assertion to its passing replacement. + +Earlier progress summaries also incorrectly called the initial rigid and rigid-group groups fully green. Exact raw-case accounting exposed their suppression failures before acceptance; both complete groups were rerun and passed in r3. Original evidence was not rewritten. The complete defect and diagnostic history is in `CP3-LIVE-FINDINGS.md`. + +## Artifacts and hashes + +All eleven downloaded accepted artifacts, with complete SHA256 values and byte sizes, are listed in `cp3-artifact-hashes.json`. Downloaded F3D hashes and sizes were independently compared with their native export evidence. + +| Editable artifact | Bytes | SHA256 | +| --- | ---: | --- | +| `artifacts/cp3-123613-f8a50491/assembly-accounting-final.f3d` | 108,176 | `c312369e6c17cbc0bb8cf359cce89d45e3fb7627fe341d54127be81a8e22bddf` | +| `artifacts/cp3-123613-f8a50491/placement-contexts-final.f3d` | 71,706 | `f9af3207f4fbedf03d8148e603541af24ee546d745777c13eb51ce37bff7d72a` | +| `artifacts/cp3-123613-f8a50491/supplier-mcmaster-final.f3d` | 588,440 | `7c477a5bf0f11e462c2a1db4bcb9fd480e6fa8d6c99b66925f5f110b0e0ccce1` | +| `artifacts/cp3-121116-6159c012/joint-revolute-final.f3d` | 78,163 | `9b7ae4e9bce7dc63294dde863e06cc283e2f9b6b32631424639dee4ec4658e05` | + +Actual Fusion viewport PNGs accompany the assembly, supplier and revolute archives. Four CSV files contain flat/structured assembly and supplier BOMs. Other fixture archives remain under the recorded Windows run directories: + +`C:/Users/drew/AppData/Local/Temp/adom-fusion-mechanical-verification-2026-10-02//` + +Supplier source: `C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP`, 717,570 bytes, SHA256 `763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a`; provenance URL `https://www.mcmaster.com/3597N17/`. + +## Limits and final host state + +Coverage is representative for each exercised family, not every option, topology, constraint interaction, assembly size or supplier format. Joint coverage is the seven advertised as-built families; it does not establish regular placement-solving joints, motion links, contact sets or dynamic simulation. Material mass uses Fusion's assigned/default density; supplier provenance does not certify the modeled material. + +The native picker proof is UIA and exact-window lifecycle evidence. Its background PrintWindow image was black and is **not** claimed as screenshot proof. The supplier workflow reuses a genuine previously downloaded STEP; it does not claim a new website download or ordering flow. + +At verifier handoff, only the original `Untitled` remained: creationId **`61bad1c8-8cf4-47ee-8a66-efea45caa35c`**, unsaved and unmodified. All verifier fixtures were checkpointed, reopened and closed by exact identity. Exclusive host control returned to the orchestrator for restoration of the original runtime/configuration. Restoration and publication are separate orchestrator work, not part of this report's live state claim. diff --git a/docs/mechanical-verification/CP4-ADVERSARY.md b/docs/mechanical-verification/CP4-ADVERSARY.md new file mode 100644 index 0000000..448b4db --- /dev/null +++ b/docs/mechanical-verification/CP4-ADVERSARY.md @@ -0,0 +1,68 @@ +# Checkpoint 4 adversarial review — 2026-10-02 + +Read-only reviewer. Production changes belong to Builder/root/Verifier. All private probes stub native/bridge interactions or use disposable localhost HTTP/Python subprocesses. No host CAD, actual daily cron, external issue, cloud, installer, deployment or full known suite executed by this reviewer. + +## Cleared exact source + +- tests/fusion_harness.py: 561bc50a7ff0bd3efe9b11ac0f62ce2a51c182eb2e604ef3b12e1096ae53004f +- tests/run_verb_tests.py: f2cc6974b8905c3c5e2924c5fc30795c06d0dc257f6f5d15f5da2fad73661b51 +- tests/test_fusion_harness.py: c4a1af121cdea3d5338f36fac163c49cc01b57e290e819ecde18decf49c1ded3 + +Final extra anything-left pass: no new substantive finding on this slice. Twenty-two independent private final checks pass (harness-final-probes.json). Original targeted reconciliation, immutable-input, ownership-error and resumed-preference probes also now refuse the previously unsafe behavior. Parent's broad suite and Verifier's live campaign remain independent gates. + +## Resolved build-review findings + +Locations identify the current function or unchanged underlying product evidence; defects were observed in the earlier draft of that function. All findings below are high-confidence source observations or independently reproduced with private adapters. + +1. HIGH, tests/run_verb_tests.py:356/375. Read-only campaign admitted readiness and lifecycle-gated query/refusal verbs. Rust main.rs:1308-1344 readiness can take a licence seat, dismiss dialogs, apply updates, write prefs and stop/kill/start. addin.rs:238 invokes launch::gate before typed session validation; launch.rs:282-285 autostarts,315-320 kills/restarts a hung host,333 expires dialogs and347 can auto-restart. account invokes that same pass-through; get_preferences raw script creates an implicit document if none open (modeling.py:112-116). Final allowlist excludes those routes; all8 exclusions independently checked. Empty-argument configuration-read forms were source-checked to return before writes. +2. HIGH, tests/run_verb_tests.py:379. Python dictionary equality accepted dryRun1 and1.0 as equal to reviewedTrue, whereas Rust maintenance.rs:110 as_bool().unwrap_or(false) interprets them as real uninstall. Private case_gate probe approved both integers/floats before fix. Final canonical JSON comparison rejects False,1,1.0,string andnull; booleanTrue remains eligible. +3. HIGH, tests/fusion_harness.py:195/228. Recorded args aliased the caller dictionary, so wire operationA could become recordedB after caller reuse, defeating reconciliation ID checks and accepting B's success. harness-mutable-identity-probe.py proved wireA/recordedB/succeeded. Final immutable requestJson and separately decoded args preserveA; wrongB remains ambiguous. +4. HIGH, tests/fusion_harness.py:345. Failed ownership-verification replies still authorized document close/file delete when cached IDs/path/hash matched. harness-ownership-verifier-probe.py returned successfalse/error alongside matching fields; both callbacks ran and cleanup completed. Final result: zero close/delete calls; cleanup_failed. +5. MEDIUM, tests/fusion_harness.py:287/329/345. Resume discarded preference restoration callbacks/applied state and reported complete with theme stillchanged. harness-resume-preference-probe.py now preserves original/requested/restoreRequired and refuses completion without rebound adapters. Cleanup retains historical failures while current per-label status permits valid subsequent recovery. +6. MEDIUM, tests/fusion_harness.py:182. Real bridge uncoded addin_command_timeout (lifecycle.rs:444) was not ambiguous, despite evaluator recognizing it. Shared infrastructure classification now matches actual native shapes. Missing or malformed mutation outcomes are also ambiguous; {}, empty transport output, invalidJSON and array output all fail and require reconciliation. +7. MEDIUM, tests/fusion_harness.py:228. Reconciliation originally matched separately supplied IDs rather than original operation, and accepted succeeded+result.successfalse. Final exact original request binding and terminal/result coherence reject both. Original attempt evidence is retained; no mutation retry occurs. + +The earlier baseline runner findings (nine independent false-pass/unsafe-retry/manual-gate repros, shared cleanup and process-ownership risks) remain preserved in BASELINE-REVIEW.md and baseline-probes.json. Their legacy polled-open/tour/retry and shared cleanup paths are removed from the revised runner. Unknown selectors/predicates and empty catalogs fail; no-execution selections do not become PASS; foreground invariance is explicitly UNVERIFIED. + +## Other cleared slices + +- HTTP-REVIEW.md: both discovered deadline problems fixed and privately retested; exact hashes recorded there. +- GATE-TOOLS-REVIEW.md: embedded/source/fixture hash coverage, honest zero-test reporting, all-target portability failure propagation, scoped POSIX process termination and cron opt-in issue safety reviewed and privately tested. +- Maintained campaign source: review findings sent directly to Verifier and root. Early observational readiness/nonempty-doc guards now precede native baseline/recovery; close adapter reports exact closedDocumentId and proves absence; terminal reconciliation uses the shared identity/coherence helper; imported object is retained provisionally before fragile identity/readback; unresolved import prevents cleanup/restoration; BOM/CSV enforce unique expected definitions; recovery uses cleanupLatest while retaining failure history. Private duplicate-BOM-row injection now fails. Final bounded source pass found no additional substantive campaign defect; native API behavior and visuals remain Verifier-owned. Readiness is a preflight observation, not an atomic host-lifecycle lock against concurrent external changes. + +## New live-feed helper follow-up (review in progress) + +Root requested review after the harness clearance. Reviewed initial tools/live_feed_drain.py SHA256 fe61a72dc55832d926edc67f2d5e9713f86ac9360acea9ff8a23b3b8d8bf765e. No stop command or Fusion lifecycle action occurs; existing feed is observed and visual/CAD verdicts stay explicitly unreviewed/untested. Three MEDIUM, high-confidence source/private-adapter findings were sent root: + +- Lines69-72: status epoch is checked only before fetching frames. A replacement between those calls can supply foreign-epoch frames; a stopped final batch exits before another status check. Private protocol probe records epoch100 but transfers epoch101 frames and exits0. Check epoch after batch retrieval before transferring, or use a native epoch bound to the batch. +- Lines84-88: PNG check accepts a33-byte header-only file with no image pixels, IEND or validCRC. A successful injection adapter causes TRANSFERRED/CAPTURED_REVIEW_REQUIRED. Verify actual decodability, not solely dimensions/header. +- Lines68/75-95: deadline applies only around entire batches. A1-second requested duration with three simulated2-second reads still performs all three injections and exits0 at6seconds. Enforce remaining budget before each call/frame/injection; no new work after deadline. + +Evidence: feed-probes.py and feed-probes-before.jsonl. Protocol/timing cases use a correctly encoded tinyPNG; all bridge, time and shotlog boundaries are private adapters. No real feed, shotlog or host action. Follow-up clearance pending root fixes. + +## Final follow-up clearance + +The root's three live-feed fixes are independently reproduced as effective: header-only PNG now fails with zero injections; replaced feed epoch fails before file transfer; elapsed per-frame work stops before injection/next frame. Valid encoded pixels still transfer with CAPTURED_REVIEW_REQUIRED, visual NOT_REVIEWED and no shared feed start/stop. A partial-success deadline probe preserves transferred=1 after the second read expires; injection return evidence is stored before its deadline check. No further substantive drainer finding on the final extra anything-left pass. + +The catalog traversal early return is limited to nodes already classified as ordinary domain data. Two focused repository regressions pass; the prior22 private final harness checks still pass. Independent25k-entry domain catalog probes retain late actual failures through both MCP content[].text and deeply nested documented result/response/structuredContent/data envelopes. No new fail-open semantic path found. + +The portability exception is limited to two exact existing ureq/rustls[/rustls-webpki]/ring paths and exact windows-sys/targets target leaves; same bindings through a duplicate alternate dependency path still fail. --locked/--target all/--no-dedupe stay enabled. Five repository boundary tests and eight independent parser cases pass, including empty, malformed, repeated-root and depth-jump input. Shadow excludes only the three known raw Rust Python templates, still hashes them, and records the missing rendered-template coverage explicitly. No host/issue/cleanup actions introduced. + +Live version attestation: a MEDIUM high-confidence attribution flaw was found and resolved. tests/ralph_support.py:102 formerly accepted sidecar-provided bridgeVersion as native executable version, while rust/bridge/src/main.rs:350-363 replaces the native /health body with sidecar status when present. Private injected sidecarPort evidence was accepted despite this attribution uncertainty; final validator now rejects any sidecarPort key. Independent repro now refuses it. Seven focused identity/version/host/port/listener/process guards pass; source confirms only CIM/listener observations and GET /health, with exact process/path/PID/host binding and before/after process creation time. Native-only scope is explicit; real execution remains Verifier-owned. + +Final extra anything-left verdict for these CP4 deltas: CLEAR. This is bounded source/private-adapter review, not a claim that native acceptance or visual review was performed by this reviewer. + +Exact source hashes superseding earlier follow-up hashes: + +- tests/fusion_harness.py: 504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8 +- tests/test_fusion_harness.py: 4546c5700b221c5a7533c642e6c082b10de35fffd621e367c29eb4df916cd741 +- tools/live_feed_drain.py: 1154921afdca61a726976eb4eceff165d710d11f2106d0d972b45fe3344374f7 +- tests/test_live_feed_drain.py: 2db5e74d7ae32cbc5172a20a876eb0da7c01554e5fd1ed38a27bb67272b53f10 +- requirements-test.txt: c144e88f7a259b078519c943f54987885467114d211de382f1e2ab4124753733 +- tests/ralph_support.py: a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27 +- tests/ralph_mechanical.py: 224820957b6b270cbee4538bd3692aaa3e08fec7cb77ed52618dc8a044266f68 +- tests/test_ralph_campaign.py: 132ce2f342305f71a4ae4473ffe8710967528bafd82b002f1fd29d4af940329a +- tools/check_portable_tree.py: 56dba86e9d779d8d94acd0db1967ad393b30455c40382c2bfd65e4029d19803d +- tools/check-portable.sh: a637d7db4e6dd1948029dd32ac657f3dff48ba31d72af856100b51edf05f033f +- tools/check-bridge.py: cb15bef8cbc3d4252a3d656a5484e7459ff340edce171f0489c62baa2212b72b +- tests/test_portable_tree.py: c0cef12a2355bbae33f056d4bf7d4af96e64652d0e86118d2da4232419e96b7a diff --git a/docs/mechanical-verification/CP5-ACCEPTANCE.md b/docs/mechanical-verification/CP5-ACCEPTANCE.md new file mode 100644 index 0000000..c2fcd5b --- /dev/null +++ b/docs/mechanical-verification/CP5-ACCEPTANCE.md @@ -0,0 +1,52 @@ +# Everyday modeling acceptance protocol + +This is the acceptance plan for development `1.12.0-dev.5`, not a claim that live checks passed. +Use an owned unnamed design, the maintained campaign's exact runtime document registry, verified +native F3D checkpoints and `finally` cleanup. Do not use production designs or select documents by name. +Each mutation below needs `sessionId`, a unique `operationId`, and fresh `target`/entity references. +Writes use the existing proven PTransaction backend. Failed writes report `mutation_failed` with +`causeCode` and a measured recovery witness. + +Examples below are Python argument dictionaries for public `fusion_mechanical`, with variables taken +unchanged from current readbacks. They are not arbitrary native scripts. Native API scripts are used +only for independent acceptance oracles in the maintained campaign. + +```python +# body_ref may be a root body or an exact occurrence-context body reference. +query = {"op": "geometry_query", "target": target, "body": body_ref, + "kind": "faces", "space": "root", "selection": "one", + "filters": {"type": "Plane", "direction": {"vector": [0, 0, 1]}, + "near": {"point": [5, 5, 10], "tolerance": 0.001}}} +measurement = {"op": "measure", "target": target, "type": "distance", + "space": "root", "entities": [top_face_ref, bottom_face_ref]} +angle = {"op": "measure", "target": target, "type": "angle", "space": "root", + "entities": [first_point_ref, apex_point_ref, third_point_ref]} +split = {"op": "sketch_curve_edit", "sessionId": session_id, "operationId": new_id(), + "target": target, "sketch": sketch_ref, "curve": line_ref, + "action": "split", "pick": [5, 0], "createConstraints": True} +offset = {"op": "sketch_offset", "sessionId": session_id, "operationId": new_id(), + "target": target, "sketch": sketch_ref, "curves": [circle_ref], + "distance": "-2 mm", "topologyMatched": True} +axis = {"op": "construction_axis", "sessionId": session_id, "operationId": new_id(), + "target": target, "type": "two_points", "entities": [point_a_ref, point_b_ref], + "name": "Reference axis"} +diagnostics = {"op": "sketch_diagnostics", "target": target, "sketch": sketch_ref} +``` + +| Case | Independent native acceptance | +| --- | --- | +| Root box query | Select planar top face with oriented normal plus point-distance filter; verify actual face plane/area and query reference roundtrip. Query all six planar faces with default one must return `ambiguous_selection`; absent radius/type match returns `selection_empty`; explicit many may return empty. | +| Repeated rotated component | Query the same body through two different occurrences, one rotated/translated. Verify root directions and pick distances, component-space directions, exact returned occurrence path, and refusal of context-free child geometry in root space. Include a nested occurrence. | +| Engineering distance/angle | Compare opposite-face thickness and separated-instance distance with independent native geometry. Check all witness positions in root mm. Test perpendicular/parallel line and plane angles and a 3-point angle with known apex; confirm unsupported curved angle input fails. | +| Curve replacements | In separate sketches, trim an intersected line, extend to an intersecting boundary, split an interior point, and break between two intersections. Verify exact resulting geometry and valid fresh replacement refs. Verify the old revision reference refuses. | +| Curve boundary refusals | Split an endpoint/off-curve point, extend with equidistant endpoint pick, break with no intersections, and trim an entire curve without allowDelete. Check exact cause and unchanged native witness after abort. Explicit whole-curve trim must delete only the selected curve. | +| Signed offset | Offset a 10 mm radius circle by +2 and -2 mm, checking radii 12 and 8 mm, native signed constraint distance, controlling expression, parent/child links and archive persistence. Offset an ordered corner chain in both signs; reject zero, duplicates, disconnected order and a topology-changing request when topologyMatched=true. | +| Reference axes | Create axes by linear edge, cylindrical face, two nonparallel planes and two distinct points. Verify origin/direction, name, health and parametric flag. Test a cross-component axis into a non-root target with correct/incorrect/missing creationOccurrence. Coincident points or parallel planes must fail without leaving an axis. | +| Constraint diagnostics | Read fully constrained and underconstrained sketches; compare per-entity fixed/linked/reference flags and driving dimensions directly. Read-only calls must not alter sketch revision, geometry or preferences. No DOF/conflict-set capability is claimed. | +| Persistence/recovery | Export/reopen a native F3D containing offset links, split geometry and axes; independently read the geometry and controlling parameters. Inject a failed follow-on edit and verify full recovery, including constraint/dimension links, spline control data and axis geometry. At an intersection, retargeting coincidence or dimension endpoints must change the witness even when current geometry is identical. Unsupported graph relationships must refuse before mutation. | + +Offline regression command: + +```sh +python3 -m unittest discover -s tests -p 'test_mechanical_everyday.py' -v +``` diff --git a/docs/mechanical-verification/CP5-RUNNER-REVIEW.md b/docs/mechanical-verification/CP5-RUNNER-REVIEW.md new file mode 100644 index 0000000..bf9aba2 --- /dev/null +++ b/docs/mechanical-verification/CP5-RUNNER-REVIEW.md @@ -0,0 +1,43 @@ +Historical findings and their correction reviews are retained below. The final native acceptance and exact source identities are recorded in cp5-verification.json. + +# CP5 maintained runner adversarial review + +Bounded read-only review; all probes use private adapters or build script strings without executing them. No host, model, installer or shotlog actions. + +## Findings and independent proofs + +1. MEDIUM — tests/ralph_everyday.py CLI and tests/ralph_mechanical.py:524. CP5 provides only plan/run but inherited ambiguous-operation guidance says recover. Common recovery hardcodes Campaign, so it generates the plain witness while existing CP5 native checkpoint rows include the everyday extension. Exact close/verify witness comparison fails even for unchanged owned models. Private probes.py confirms generated CP5 verification script has everyday_sketch whereas plain recovery script does not and witness shapes differ. Add campaign-aware recovery while retaining target/session/registry/checkpoint safeguards. High confidence. + +2. MEDIUM — tests/ralph_everyday.py EXTRA_WITNESS everyday_sketch/links. Original dimension rows omit orientation/value and modern PerpendicularConstraint.curve is absent from link discovery. Independent restoration/archive comparison can therefore miss changes production recovery now checks. Verifier began fixing these during review; current private probes already distinguish orientation+value and modern perpendicular-curve changes. Follow-up: cast the dimension wrapper before reading subclass orientation; casting only inside links() does not expose orientation on the original base wrapper. High confidence. + +3. MEDIUM — tests/ralph_everyday.py query_root edge assertion. Four duplicate10mm horizontal edges pass the count-only assertion for the requested four30mm vertical edges. Private probes.py runs the whole query_root test with wrong duplicate edges and every assertion passes. Require actual native edge uniqueness/length/orientation and public numeric agreement. Top-face public area likewise should agree with independent200mm2. High confidence. + +Additional bounded oracle cautions sent Verifier: axis cross-products need a finite/nonzero direction norm; diagnostics sorted flag multisets do not prove per-entity identity and can miss swapped entity flags. No native product defect is alleged from these synthetic corrupt-result cases. + +## Other scope reviewed + +CP5 inherits CP4 exact object ownership, single dispatch/reconciliation, verified archive-before-close, source identity/version attestation, provisional import registry and separate visual review. New native oracle actions reuse the owned witness guard and stop on ambiguous mutations. Fixtures always create owned new documents; no ambient-document selection, runtime start/kill, preference mutation or cleanup by name is introduced. Plan and incomplete run cannot construct a host campaign. Main run success remains VISUAL_PENDING. Native frame/measurement/solver behavior remains the exclusive Verifier gate. + +Awaiting corrected source for final extra anything-left pass and exact hashes. + +## Final correction review — CLEAR + +Everyday now exposes recover and delegates through the shared recovery factory with campaign_type=Everyday; CP4 defaults remain Campaign. Existing ownership/session/ledger/checkpoint protections remain in the shared code. The extended native witness casts dimension wrappers before orientation/value reads, records modern curve relationships and preserves nullable relationship state. + +Query edge assertions now prove four unique native entities, each30mm and vertical, with matching public length; face area agrees with native200mm2. Axis direction must be finite/nonzero. Diagnostics verifies exact-ref flags, distinct native entities and membership in the requested sketch, so duplicates/foreign sketches cannot satisfy cardinality. + +Eight independent final probes pass: base-wrapper orientation, numeric dimension value, recovery delegation/type, duplicate wrong-length edges, zero axis, duplicate diagnostics refs and foreign-sketch diagnostics refs. Final extra anything-left pass found no additional substantive issue. This is source/private-adapter clearance; actual fixture/API/archive/visual acceptance remains Verifier-owned. + +Final source hashes: + +- tests/ralph_everyday.py: 7741530403cb9f99ec04e8e6fa59591c66985657a3b7522203d539bcab7e4f3d +- tests/test_ralph_everyday.py: 26f816c905d1f5585ab56430a9e1fa2102d6bb20f9118800414d961ec1a2c3ac +- tests/ralph_mechanical.py: ad829db283072950b514c499cde8788fdf923e8ef30a64724e1adc4a31bb007a + +## Recovery accounting correction — 2026-10-05 + +The verifier's controlled native close-refusal diagnostic exposed stale aggregate counts after recovery: the report held 7 passing assertions while its retained check list contained 11. Recovery itself correctly closed the two owned checkpoint documents and preserved the intentional native failure. The shared recovery command now recomputes counts after its final cleanup/state assertions. An independent orchestrator review confirmed that this changes reporting only; the regression calls the recovery entry point, adds a restoration assertion and preserves a prior failure. The orchestrator then ran all 230 Python tests successfully. The accepted native replay used the earlier immutable harness copies; the corrected recovery run records its own source identity. + +Final support hashes: +- tests/ralph_mechanical.py: ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e +- tests/test_ralph_everyday.py: 20487252a3ab759e5236c71e22009a84cc7e80e4f9aa0af5d243e36e7ef60fb8 diff --git a/docs/mechanical-verification/CP5-SOURCE-REVIEW.md b/docs/mechanical-verification/CP5-SOURCE-REVIEW.md new file mode 100644 index 0000000..d541300 --- /dev/null +++ b/docs/mechanical-verification/CP5-SOURCE-REVIEW.md @@ -0,0 +1,66 @@ +Historical findings and their correction reviews are retained below. The final native acceptance and exact source identities are recorded in cp5-verification.json. + +# CP5 bounded adversarial review + +Read-only source/fault-injection review; no host operations. Initial stable candidate hashes are recorded in initial-hashes.json. + +## Findings pending correction + +1. MEDIUM, high confidence, readback.py:80/92-102 (and dimension links at81-83). Constraint graph attachment is omitted for every non-offset constraint. Private constraint-witness-probe.py switches CoincidentConstraint.entity between two crossing lines, leaving geometry/flags/counts/parameter expressions unchanged. The witness compares equal, so a failed curve edit could claim verified recovery while future constrained edit behavior differs. Generic weakness predates CP5 but is newly relevant to rewriting existing curve graphs. Capture supported graph links or refuse unsupported graph witnesses before mutation; do not claim native Abort itself was observed defective. Autodesk CoincidentConstraint explicitly exposes point/entity: https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_CoincidentConstraint.htm + +2. MEDIUM, high confidence, sketch_edits.py:56. Whole-sketch geometry changes are insufficient to establish selected curve edit. curve-noop-probe.py returns the same valid selected curve, changes only unrelated curve geometry in deferred readback, and is accepted. Compare selected curve geometry before/after, or establish its deletion/replacement; retain any overall sketch check as supplemental. This is a fault-injection postcondition blind spot, not observed native API misbehavior. + +## Reviewed boundaries + +Root-space reads require exact root-context occurrences; component-space topology filters deliberately retain the caller instance in returned refs. Direction transforms use rotation terms, points use mm conversions; distance witnesses must agree with scalar values. Queries refuse ambiguous/empty single selection and truncated results. Cross-component axis creation binds target component to exact creationOccurrence and refuses missing/wrong context. Native axis ownership/readback uses public component-space geometry. + +Autodesk sources confirm createOffsetInput/addOffset2 ordered curve arrays, positive-right/negative-left signed input, circle/ellipse positive outward; offset distance is centimeters. Constraint children/parents and signed value are deferred until recompute. Curve-edit API supports deleted-original returns and empty full trim; full deletion guard is explicit. NURBS getData return tuple/order matches complete control-point/degree/knots/weights/periodic witness. API evidence: +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_GeometricConstraints_createOffsetInput.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_OffsetConstraint_distance.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_SketchCurve_trim.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/SketchCurve_extend.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/SketchCurve_split.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_NurbsCurve3D_getData.htm +- https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/ConstructionAxisInput_creationOccurrence.htm + +Verifier was advised to test component/root near-point frame semantics on repeated rotated instances and native angle witness apex ordering. Those remain native acceptance questions, not source defects. + +## Final correction review — CLEAR + +Both original reproducers now fail closed as intended: changed CoincidentConstraint endpoint changes the witness; unchanged selected geometry cannot borrow unrelated sketch motion as evidence. Selected shape is captured before dispatch and checked after recompute unless the original was deleted, in addition to whole-sketch change and original-deletion-state checks. + +Constraint and dimension relationships now reference local curve/point/constraint inventories via actual native API equality. Curve endpoints and fit-point links are recorded, dimension endpoints/orientation/measured values are included, and supported subclasses are explicitly cast. Null, foreign, ambiguous and unknown graph types refuse. The comparison path has a one-million-equality budget; direct object hits avoid unnecessary scans without comparing tokens or names. These witnesses are obtained before PTransaction.Start, so unsupported existing graphs refuse before mutation. + +Ten independent final private checks pass (final-graph-probes.json), including both original reproducers, distinct wrappers representing equal API entities, null/foreign references, budget exhaustion, dimension endpoint/orientation/value drift and restoration. Four focused repository regressions pass. No full green suite was repeated. Official Autodesk angular/offset/linear-diameter/tangent-distance dimension object pages confirm the property maps used by the new reader. + +Extra anything-left pass: no further substantive source finding on the six-operation slice. Unsupported/unreadable sketch graphs intentionally block transactional mutations; native inventory reorder may conservatively leave recovery unverified. These limitations are disclosed in product documentation. Actual API wrapper availability, origin-point inventories, repeated-instance coordinate semantics, angle witness order and kernel rollback remain the separately owned native acceptance gate. No host actions occurred in this review. + +Final reviewed hashes: + +- addin/AdomBridge/commands/mechanical/geometry.py: 49aa133aede503a98f2415de9fd7713e0020cd0639749a79ea77d7852b806599 +- addin/AdomBridge/commands/mechanical/sketch_edits.py: 836f39d0feb983589457e4efc26d9bccc032d7ea335f7f2054f8630c849406df +- addin/AdomBridge/commands/mechanical/readback.py: 56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e +- addin/AdomBridge/commands/mechanical/core.py: 2c5dae22dd7547c077087471507e66b243db2e7138299dcad0e2c1ad06443786 +- addin/AdomBridge/commands/mechanical/transactions.py: 431655eb211533a1bf2bbc0b2111acf6700f4216e72fb8b735edd02e7223ebc3 +- addin/AdomBridge/commands/mechanical/schema.json: ff1a3b7b86d07870db3b5fa26dfd5f2d3469adcd3c393f020838d5cdf3894a9e +- tests/test_mechanical_everyday.py: f3b50ddd1fa9fb17fd3aaa7e751ee875ba29fd5008f64943e8e3fe359fc9224b +- docs/MECHANICAL.md: 542390d942e31d6a9801deefd2202f5e9f36d70eedd322b87263bb70229522e9 +- docs/mechanical-verification/CP5-ACCEPTANCE.md: 82f8d50c8e0747693383746ca366bb1da93de14e19fdd135637713a3a946f798 + +## Native-driven component-near, parallel-angle and extend patch review — CLEAR + +Root patch reviewed against raw cp5-native-probe-1 and cp5-extend-probe-1 evidence. Native context-free child face/edge measurements are replaced by TemporaryBRepManager copies retaining the trimmed entity; vertices use their native Point3D. Root-context queries keep the exact proxy. Temporary candidate stays strongly referenced throughout measurement, is never added to the model, and no temporary token is returned. Original refs/frame identity remain intact. Pick coordinates determine which native distance witness belongs to the query, allowing the observed reversed temporary-edge order. + +Parallel two-entity angle fallback keeps original zero witness points, labels them degenerate, and proves compatible geometry directions. It uses worldGeometry for sketch lines; three-point degenerate inputs remain refused. Public output discloses the validation method. + +Empty collection from extend may identify its still-valid original as replacement only after deferred whole-sketch and selected-own geometry changes are proved; deletion state and same-parent validity remain guarded. None results or deleted originals receive no such exception. Raw extend probe uses falsey collection testing, so returnedCount:null alone does not distinguish None from an empty ObjectCollection; the prior typed curve_edit_empty failure independently established passage of the non-None guard. + +Seven independent private product probes and seven focused repository checks pass across this review. No full suite repeated. Final extra anything-left verdict: CLEAR for these exact source changes, subject to separately owned live reruns. Autodesk copy documentation confirms copying a face preserves that single face and an edge becomes a one-edge wire: https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-26E53439-9DE5-4A11-93AD-7E0570BAA657 . SketchLine.worldGeometry includes sketch and assembly transforms: https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_SketchLine_worldGeometry.htm . + +Reviewed delta hashes: + +- addin/AdomBridge/commands/mechanical/geometry.py: 6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939 +- addin/AdomBridge/commands/mechanical/sketch_edits.py: 5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981 +- addin/AdomBridge/commands/mechanical/schema.json: 918d87173721df2b67408f1724624eba16993940ec496937dc314e789fb28cea +- tests/test_mechanical_everyday.py: f7e3d1eddd953c86b5f85c9a6d1788085df4968f02c89383c1addf0b06208d32 +- docs/MECHANICAL.md: edc39b517c40f9c61182644ad1bd125d30dacdc3301a3bab913ae2e00800f0dc diff --git a/docs/mechanical-verification/CP6-ACCEPTANCE.md b/docs/mechanical-verification/CP6-ACCEPTANCE.md new file mode 100644 index 0000000..4126aa8 --- /dev/null +++ b/docs/mechanical-verification/CP6-ACCEPTANCE.md @@ -0,0 +1,128 @@ +# CP6 regular joints, joint origins and motion links + +Version `1.12.0-dev.6` adds eight typed operations (53 total). Offline tests prove +guard and postcondition behavior; they do not establish native solver support. +The native gate below must pass before this checkpoint is released. + +Use the maintained exact-document-owned Ralph campaign conventions. Every fixture +is a new unnamed Hybrid design. Read back native geometry, archive to the unique +run directory, reopen and compare, and verify checkpoint bytes before closing the +owned document. Never use name-only document cleanup or retry an ambiguous write. + +## Common call envelope + +Every mutation uses `fusion_mechanical` with `op`, `sessionId`, a new `operationId` +and the current `target`. All references must be from that exact revision. Refresh +references after every mutation. A timeout requires operation-status reconciliation +using the original session and operation ID, never a new blind retry. + +The examples below show operation-specific arguments. Symbols such as `shaftFace` +stand for full guarded references returned by `geometry_query`; they are not names +or numerical topology indices. + +## Separated shaft and bearing + +Create and model two component definitions, place their occurrences apart, and +ground only the bearing. Use `inspect_entity(occurrence).bodyRefs` and +`geometry_query` to select an unambiguous circular edge or planar/cylindrical face +in each exact occurrence context. Test the public operation: + +```json +{"op":"regular_joint_create","name":"Shaft bearing","type":"revolute", + "geometryOne":{"entity":"shaftFace","keyPoint":"center"}, + "geometryTwo":{"entity":"bearingFace","keyPoint":"center"}, + "axis":"z","angle":0,"offset":0,"flipped":false, + "rotationLimits":{"minimum":-30,"maximum":45,"rest":0}} +``` + +Replace the quoted reference placeholders with actual reference objects. Read the +two native source-geometry origins and axes in root coordinates independently of +the add-in. Prove actual alignment and a moved shaft with the grounded bearing +unchanged. Drive with `joint_edit` to 15 deg, verify the shaft geometry/pose, then +reject an out-of-limit drive with full semantic restoration. Verify native joint +type, parameter values, limit flags, active attachment identities and health. + +Repeat all seven native motion families: rigid, revolute, slider, cylindrical, +pin-slot, planar and ball. Axis names use the joint coordinate system. Rigid and +ball do not accept axis choices; pin-slot has distinct `axis` and `slideAxis`. +Verify nonzero offset, angle and both flip states against independently known +source geometry and physical occurrence poses. Inspect reported root-space changed +occurrences and their mm transforms. `attachmentFrames` carries the native +`Joint.geometryOneTransform`/`geometryTwoTransform` matrices with root-space anchor +origins and explicit native axis provenance. Their axes are not interchangeable +with transient `JointGeometry` axes; neither substitutes for the physical angle +oracle. Reacquire sources after compute using saved tokens followed by exact API +equality, because retained faces and input geometry may become unreadable. + +Repeat with two instances of the same component and with rotated/nested parents. +Selecting a component definition without an occurrence context must refuse; +joining an occurrence to itself or its own descendant must refuse. Both grounded +sides must refuse without motion. Include an unrelated repeated instance and +prove its resulting pose explicitly rather than assuming definition-wide edits. + +## Origins and timeline redefinition + +Create a reusable origin on native component geometry: + +```json +{"op":"joint_origin_create","component":"shaftComponent","name":"Shaft end", + "geometry":{"entity":"nativeShaftFace","keyPoint":"center"}, + "offsetX":0,"offsetY":0,"offsetZ":"2 mm","angle":"15 deg","flipped":false} +``` + +Inspect the owning occurrence: `jointOriginRefs` carries the occurrence context. +Use `geometryOne: {"origin": originRef}` in a regular joint. Edit the native +origin through `joint_origin_edit`, and prove attachment, offsets, angle and joint +placement update. Native straight edge/line/construction-axis references can set +`xAxisEntity`/`zAxisEntity`; reject references from another component or instance. + +Use `regular_joint_edit` to change geometry, motion family, angle, offset, +offsetX/offsetY, flip and lock. It edits root-owned regular joints. A successful +placement edit must finish at the current timeline end with no pending snapshot, +preserve every original timeline entity in order, and append at most one verified +native position snapshot. Refused edits, native setter failures, invalid downstream +references and grounded conflicts must restore the exact original graph and marker. +Existing `joint_edit` +continues name/suppression/limits/drive; `joint_delete` accepts both regular and +as-built joints. Verify existing as-built tests remain unchanged. + +Delete an unused origin successfully. Deleting a used origin must either preserve +a fully healthy native attachment state or abort with verified restoration; it +must never return success with missing references or unhealthy downstream joints. + +## Motion links + +For two root-owned revolute joints: + +```json +{"op":"motion_link_create","name":"Gear ratio","jointOne":"hingeOne", + "jointTwo":"hingeTwo","motionOne":"rotation","motionTwo":"rotation", + "valueOne":"90 deg","valueTwo":"180 deg","reversed":true} +``` + +Drive the first joint by 10 deg and independently prove a -20 deg change in the +second. Edit ratio and reverse state with `motion_link_edit`, then drive again. +Suppress/unsuppress, verify flags and actual coupling behavior, and delete. Link a +single cylindrical joint by omitting `jointTwo` and selecting distinct rotation +and slide motions (for example 360 deg per 2 mm). Reject rigid-joint coupling, +unsupported degrees of freedom, self-coupling of the same DOF, zero/negative ratio +magnitudes, mismatched units and stale references. + +Motion-link support requires the November 2025+ native API. Missing collections or +enum members return an explicit unsupported-capability error; there is no generic +script substitute. Native `setMotionData` availability and exact enum wrappers +must be exercised by this gate, not inferred from offline fakes. + +## Persistence and recovery evidence + +After F3D reopen, compare attachment source identities using native entity +resolution (session IDs are intentionally different), origin parameters/frames, +joint motion limits, offset/angle/flip/lock, link ratio/direction/suppression and +actual occurrence poses. Preserve a healthy archived constrained assembly. + +Inject invalid edits after prior successful changes. Recovery must include the +attachment graph, origin orientation references, joint parameters, link members +and ratio, transforms/grounding, timeline marker and previous mechanical witness. +An equal body count or matching display names is not restoration evidence. + +Offline check: `python3 -m unittest discover -s tests -p 'test_mechanical_regular_joints.py' -v`. diff --git a/docs/mechanical-verification/CP6-EVIDENCE-REVIEW.md b/docs/mechanical-verification/CP6-EVIDENCE-REVIEW.md new file mode 100644 index 0000000..c551e00 --- /dev/null +++ b/docs/mechanical-verification/CP6-EVIDENCE-REVIEW.md @@ -0,0 +1,33 @@ +# CP6 evidence accounting — final clear, 2026-10-05 + +Read-only local audit. No host calls, source edits, native execution or test-suite repetition. Scripts/results: audit.py/json and composite.py/json in this directory. + +## Completed campaign accounting + +Original r4-final: 14 entire native+cleanup+visual PASS groups, 382 passing checks. Original redefinition failure preserved as native/overall FAIL, 17 passing checks, cleanup PASS; raw call0075 has mutation_failed/unhealthy_model, computeSucceeded:true, one Position1 fault and PTransaction.Abort verified:true. A failure in a dispatched operation need not increment the assertion FAIL counter; native/overall status and failure field remain decisive. + +First qualified redefinition: 26 PASS/1 FAIL, native/overall FAIL and cleanup PASS. Failed prerequisite is FreshJoint having no downstream Snapshot despite creation with locked:true. This is preserved as a harness prerequisite failure, not represented as successful conversion. + +Second qualified redefinition is now terminal native+cleanup+visual PASS, 33 checks. Its own frozen runner is9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903. The initial14 successful groups retain their distinct original runner63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607; the unsuccessful first qualified attempt used20f1d3e5fed860fb5386bf5ace9b15265677a0b3b20fd46da34151951511ce69. + +Accepted composite cp6-full-r4-accepted-summary.json SHA e8ac66c7d8bb6a89beff61cf5b50e15736f5e6899644cf4a7876612af3ea5c66: 15 whole groups,415 PASS/0 FAIL checks,32 exact owned document closures,34 artifact records. Verified each group equals its entire original summary entry, except the entire redefinition group equals the qualified2 summary entry. Both referenced source summary hashes match. No individual passing check was cherry-picked from failed attempts. + +All accepted groups share add-in session9c500a2c-5fff-4dc9-927b-caf44796837d, native bridge PID72380, process creation timestamp/path/port, dev.6 bridge/add-in versions, and original pristine document creation identity2da536b0-f828-4586-ba8c-2b9600e78152. Baseline/final inventories and active original identity match. Unique native closedDocumentId acknowledgements for all32 owned documents were independently found in raw native-adapter calls, in addition to cleanupLatest equality. + +## Source and artifacts + +Across all18 completed original/qualified/diagnostic campaign records: verified1051 public mechanical call routing/run/session/owned-target relationships,38 unique owned document identities,38 artifact byte hashes/sizes/owned host paths, every frozen harness-source hash, exact checkpoint archive links, and SHA-bound visual annotations. Verified56 runtime-manifest files against immutable source/package, package hash, and203 installed expected/actual hash rows. No mismatch found. + +F3D ZIP inventories contain compression method93 unsupported by Python3.12 zipfile. This audit verifies exact bytes and recorded independent native export/reopen witness relationships, not independent container decompression. Initial testzip attempt correctly failed with NotImplementedError and was not treated as archive corruption or success. + +Six ownership metadata.closed values remain pre-cleanup snapshots in the original/first-qualified failures and recovery diagnostic. They are not authoritative final state; exact cleanupLatest/native closure acknowledgements and restored pristine final inventory establish closure. Do not count retained documents from that stale metadata field. + +## Controlled cleanup recovery + +Diagnostic acceptance PASS is separate from intentional native/overall FAIL, which remain preserved. Before recovery25 PASS checks/cleanup FAIL; after recovery29 PASS checks/cleanup PASS/visual PASS. Exactly2 native objects were verified as owned, actually closed through native calls, and absent from restored original inventory;2 artifact records retained. Last export dispatch/session/operation/target/path/hash were reconciled exactly before recovery. Original failure and historical refusal entries remain intact. This proves same-session exact-owned cleanup recovery, not process restart survival. + +## Publication boundary / final anything-left pass + +Use explicit composite acceptance, not a claim the original campaign passed uninterrupted.415 checks include cleanup checks and expected refusals, not415 independent modeling features. Preserve the captured-position moving-to-rigid limitation and distinguish the separately tested unlocked/snapshot-free positive. Recovery acceptance does not turn the intentional native report into PASS. Original failed campaign images remain visual PENDING; they are not part of accepted15 groups. The updated foreground acceptance properly limits its observation window/desktop/correlation; no campaign-wide foreground proof is established. + +No actionable evidence-integrity or accounting defect found after the final pass. Legacy bracket/assembly run was active/outside this audit and is not included. diff --git a/docs/mechanical-verification/CP6-RECOVERY-REVIEW.md b/docs/mechanical-verification/CP6-RECOVERY-REVIEW.md new file mode 100644 index 0000000..6ac3796 --- /dev/null +++ b/docs/mechanical-verification/CP6-RECOVERY-REVIEW.md @@ -0,0 +1,12 @@ +# CP6 explicit close-refusal recovery diagnostic — final source clear + +2026-10-05. Read-only source review plus private offline fault probe; no host calls. + +Source: research/fusion-mechanical-verification-2026-10-02/cp6_recovery_diagnostic.py +SHA256: ce600413116765c254e5b990d393f6998aad8d2e054f59b8465fd41cedab12d9 + +HeldClose raises before native close dispatch. Initial checkpoint compares independent source/reopened witnesses and binds both exact object IDs and archive checkpoints before injected refusal. Original native FAIL and cleanup FAIL are required before recovery; there must be exactly two verified records. Recovery uses maintained same target/host/session, status-only reconciliation, native owner/run/checkpoint verification and exact closer evidence. Acceptance retains the original native failure, historical refusal entries, latest two successful exact closures and original pristine inventory. + +Private probe.py/probe.json: seven cases pass. Valid recovery passes. Missing verified checkpoints and ambiguous original failure refuse before any recovery dispatch. Foreign closed ID, changed original failure, wrong final inventory and failed close all fail acceptance. All calls faked; real host never contacted. No source changes and no whole-suite repetition. + +Extra final pass found no actionable residual. This proves diagnostic guard behavior, not successful native recovery; root owns actual native execution. diff --git a/docs/mechanical-verification/CP6-SOURCE-REVIEW.md b/docs/mechanical-verification/CP6-SOURCE-REVIEW.md new file mode 100644 index 0000000..2655971 --- /dev/null +++ b/docs/mechanical-verification/CP6-SOURCE-REVIEW.md @@ -0,0 +1,55 @@ +# CP6 r4 narrow adversarial review + +Reviewed 2026-10-05 in /home/adom/project/fusion-assemblies-next against frozen cp6-runtime-source-r3. Read-only product/source review; no host/deploy/publication actions. Parent/root handles native execution; Builder owns product changes. Handoff and final session-state entries read, including interrupted-probe cleanup and red feature history. + +## Findings during review + +- MEDIUM, high confidence, tests/ralph_assemblies.py:659-668 (initial lines): revised coupled_step verifies signed world-Z rotations and exact native target/ratio but does not constrain either body's joint center. Private physical-oracle-probe.py adds a 500 mm axial translation to the follower while preserving valid rigid rotation matrices and matching values; all four checks pass. Root accepted fixture-specific anchor checks for both selected top-face centers, before and after, against their grounded counterparts. +- LOW, high confidence, regular_joints.py:380-385 (draft lines): lock_arguments synthesizes locked:false before the changed-field guard, allowing {joint:ref} on an existing rigid joint to bypass the no-change refusal. Builder notified to preserve validation on original requested fields. Private lock-probes.py reproduces this regression while two other fault checks already pass. + +## Checks completed + +- Five new handler-level product tests independently pass: rigid create false, true refusal before native changes, locked moving-to-rigid implicit/explicit false, existing rigid false, rigid-to-moving setter at restored marker followed by capture. +- Private fault injection: moving native setter accepts but ignores false -> final joint_edit_refused; native redefine throws -> marker restored, original lock retained, no unlock setter invoked. +- Reviewed native-locked.json read-only: direct locked moving-to-rigid and unlock-at-end alternatives both compute and abort-restore; attempted unlock while rolled fails InternalValidationError parentJointOccs. This supports avoiding pre-unlock rather than guessing setter order. +- Timeline registry delta stores opaque API objects in a separate exact-document run map, leaving public rows serializable; request document ownership/active-document guard precedes use. No weakened cleanup ownership or checkpoint requirement found. +- Signed coupling oracle uses immediate solver baseline, absolute 1:1 ratio, nonzero signed delta, exact target and signed physical rotations; known upright fixture guard and finite values remain. Anchor gap above is independent of these valid corrections. + +Final hashes, private rerun and extra anything-left review pending source freeze. + +## Final source convergence — clear for native replay + +Both findings fixed and independently rechecked. Empty rigid edits now fail on original request fields before implicit flag augmentation. Rigid true refuses before model setters; false skips only the unsupported setter and is verified from the actual native getter after compute, including implicit conversion. Moving-family setter remains at the restored timeline end and capture follows it. No pre-unlock was introduced. The transaction/recovery implementation is byte-identical to r3; postcondition failures remain before commit and feed measured Abort recovery. + +The new physical oracle checks both attached top-face centers before and after the drive against their respective grounded anchors. This accepts valid translation of an occurrence origin during rotation around an off-origin joint and refuses axial/lateral separation. Timeline private registry remains isolated by exact owned document ID; no cleanup safety checks were weakened. + +Independent validation: five focused product tests plus six focused anchor/registry tests pass. Four private lock fault checks and four private physical-anchor cases pass; exact reports are lock-probes-final.json and anchor-probes-final.json. Native rigid diagnostic evidence was read only: rigid false setter throws/restores; rigid-to-moving locking computes healthy with captured position and restores. Native public affected-group/full campaign acceptance remains root-owned and separate. Full suites were not repeated. + +Final extra anything-left pass covered original-argument validation, current versus requested family, setter ordering, implicit and explicit false getter refusal, moving setter failure, unchanged transaction boundary, timeline registry lifetime/ownership, positive/reversed solver baselines, anchor drift, and documentation wording. No remaining substantive issue found within this bounded delta. All six exact hashes were rechecked after probes and are in reviewed-hashes.json. + +Product regular_joints.py: 22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434 +Harness ralph_assemblies.py: 6477c1d6127d863f1990604eebd238a28b47c227f8cef14d300b2284d56b88fe + +## Final native-acceptance-only addition + +Reviewed exact 11-line harness delta after clearance. Reversing only the specified additions reproduces the previously reviewed 6477c1d6 hash. Rigid creation now explicitly sends locked:false; native bool readback is strict, false edit uses a fresh guarded ref, and both true-refusal cases use the existing exact cause + verified Abort + full independent pre/post graph helper. Geometry selectors are fresh read-only references inside the already owned fixture. Cleanup/ownership and other families remain unchanged. Source compile passes; no test suite repeated. Extra anything-left pass: no residual issue in this addition. Native execution remains a separate acceptance gate. + +Updated tests/ralph_assemblies.py SHA256: 63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607 + +## Native acceptance refinement: snapshot-bearing redefinition (2026-10-05) + +Independently inspected `research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-redefinition/calls/0075-fusion_mechanical.json`: failure is `mutation_failed`/`unhealthy_model`, complete health inspection, successful compute, exactly one existing `Position1` state1 fault stating Capture Position has no positions for current Components and Joints, followed by verified PTransaction.Abort. The request simultaneously changes locked revolute to rigid, reattaches bottom/top geometry and resets offsets/angle/flip. Evidence proves this combination unsupported on the current build; it does not prove all moving-to-rigid transitions unsupported. + +Accept the proposed test-only refinement: assert the exact preexisting snapshot fault with full independent graph and timeline identity restoration; separately prove same-family reattachment and snapshot-free moving-to-rigid on finite owned fixtures. Preserve the original failed report and document the unsupported combination. Do not accept a generic unhealthy_model error as the negative oracle. No health relaxation, implicit snapshot deletion or product-source change is justified by this evidence. + +Official API inspected: https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/Snapshot.htm exposes snapshot deletion/name/timelineObject and generic validity/type, with no contents or retarget API. This supports avoiding speculative snapshot repair; it does not claim a universal API impossibility outside this bounded scope. + +## Staged acceptance correction final pass + +Reviewed only `research/fusion-roadmap-build-2026-10-02/cp6-harness-redefinition-r1/{ralph_assemblies.py,test_ralph_assemblies.py}` against active unchanged runner. Initial staged positive checks tested face-center coincidence only: an arbitrary tilt about that point could pass with intersecting faces. Root added transformed fixture bottom/top normal opposition plus finite/unit checks and preserved full grounded pose. Independently ran the six new SnapshotRefusalTests; all pass. Exact Position1-only refusal, measured full graph and timeline identity restoration, same-family reattachment, and separate later joint without downstream snapshot conversion remain distinct assertions. + +Final staged runner SHA256 `20f1d3e5fed860fb5386bf5ace9b15265677a0b3b20fd46da34151951511ce69`; staged test SHA256 `9ceaa35779f51e0c8b81d15e402301439664d867c73f4e8dd790bf9b28556283`. Extra anything-left pass CLEAR for the staged acceptance delta. Native execution remains root-owned and pending; active campaign and product source unchanged. + +## 2026-10-05 qualified unlocked-positive fixture correction + +Reviewed exact tiny delta in maintained tests/ralph_assemblies.py SHA9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903, manifest cp6-qualified-unlocked-harness-delta.json, against cleared staged20f1d3e5fed860fb5386bf5ace9b15265677a0b3b20fd46da34151951511ce69. Native evidence had shown initial FreshJoint locked:true legitimately appends a Snapshot, contradicting the positive fixture prerequisite. Delta omits only that initial lock request, adds strict independent native RevoluteJointMotion and locked is False checks, preserves no-downstream-Snapshot assertion and every physical face center/normal/ground/timeline/health oracle. Original locked-history negative and locked same-family reattachment remain unchanged. No product edits. Final narrow anything-left pass clear; no duplicate suite or host calls. diff --git a/docs/mechanical-verification/CP7-ACCEPTANCE.md b/docs/mechanical-verification/CP7-ACCEPTANCE.md new file mode 100644 index 0000000..fffe370 --- /dev/null +++ b/docs/mechanical-verification/CP7-ACCEPTANCE.md @@ -0,0 +1,45 @@ +# CP7 configuration inspection acceptance + +Source implementation only until the native gate runs. Do not describe offline tests as native +configuration support. No configuration writes are exposed by the product in this checkpoint. + +Use the maintained exact-owned scratch/checkpoint harness. Keep original user documents, preferences +and foreground unchanged. A private fixture can create a native configured design only under the +separately authorized conversion/Abort probe; preserve its complete evidence and cleanup rules. + +1. On an ordinary unconfigured design, inspect and run an existing typed modeling workflow. Confirm + `configuration.configured:false`, `complete:true` and unchanged native geometry behavior. +2. Independently prepare a configured bracket with ordinary rows, numeric and text parameters, + suppression, visibility and component property columns. Observe native conversion defaults rather + than assuming a fixed default column count. Compare public `configuration_inspect` with direct API + table/row/column IDs, exact controlled source objects, ordered values and active row. No public call + should activate a row or recompute while inspecting. +3. Record a public target, change one inactive cell with the owned native fixture adapter, then call + an export with the old target. Expect `stale_revision`. Refresh and repeat readback. This is evidence + about stale targets, not authorization of public configuration writes. +4. Verify parameter/text getters and mm/degree conversions independently. Explicit suppression can + differ from effective suppression. Visibility changes must preserve engineering BOM quantities. + Compare JSON and flat/structured CSV row provenance, part numbers and quantities for the active row. + Include legitimate negative numeric values and a child-component model parameter; verify its + component owner and distinguish design-scoped user parameters. An unsupported unit family or + missing preview getter must retain useful read diagnostics without claiming complete scope. +5. On a complete configured design, attempt an ordinary typed parameter or feature mutation. Expect + `configuration_mutation_unverified` before any transaction or native setter. No configuration + lifecycle verb should appear in capabilities. On a theme/unknown/preview/inserted-configuration + fixture, expect incomplete inspection and `configuration_scope_unsupported` for model writes/BOM. +6. Export and reopen an exact-owned native artifact. Inspect full table content and IDs independently; + a nonempty F3D file or current geometry match does not prove full table persistence. Keep the + product's configuration mutation gate closed regardless of a single readback success; conversion, + complete semantic Abort restoration, all supported cell families and archive persistence require a + later explicit gate before write operations can be implemented. + +Offline regressions: + +```sh +python3 -m unittest discover -s tests -p 'test_mechanical_configurations.py' -v +python3 -m unittest discover -s tests -p 'test_*.py' -q +python3 tools/freeze-contract.py +``` + +The existing `fusion_mechanical` verb remains a fixture-gated entry in the general verb runner. +Adding one typed read schema does not turn the general inventory into native configuration coverage. diff --git a/docs/mechanical-verification/cp3-artifact-hashes.json b/docs/mechanical-verification/cp3-artifact-hashes.json new file mode 100644 index 0000000..45dbc96 --- /dev/null +++ b/docs/mechanical-verification/cp3-artifact-hashes.json @@ -0,0 +1,115 @@ +{ + "artifacts": [ + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-final.f3d", + "bytes": 108176, + "sha256": "c312369e6c17cbc0bb8cf359cce89d45e3fb7627fe341d54127be81a8e22bddf" + }, + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-final.png", + "bytes": 14496, + "sha256": "db6594eb92e32be282a5865c8266a1ff7b2d151fda2b8f454eac4e23fef99e1e" + }, + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-flat-bom.csv", + "bytes": 379, + "sha256": "903ae5b28ab814c38dee90c2755f08255677853c493a4fd0c3af80db7e2af9d0" + }, + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-structured-bom.csv", + "bytes": 488, + "sha256": "2de588ab4219446263bc78725748887c0f4e7c6f05708aab1cd33aa0e752c331" + }, + { + "path": "artifacts/cp3-123613-f8a50491/placement-contexts-final.f3d", + "bytes": 71706, + "sha256": "f9af3207f4fbedf03d8148e603541af24ee546d745777c13eb51ce37bff7d72a" + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-final.f3d", + "bytes": 588440, + "sha256": "7c477a5bf0f11e462c2a1db4bcb9fd480e6fa8d6c99b66925f5f110b0e0ccce1" + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-final.png", + "bytes": 176521, + "sha256": "ad6f9d190018194913bc45b026eac999f1247bf5bbde22c1b2338ddbd6445193" + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-supplier-flat.csv", + "bytes": 417, + "sha256": "457bb65ff0c12a5c46c7a06ac74ca254b2529b806756d0c53f4e7fa37f531e2d" + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-supplier-structured.csv", + "bytes": 797, + "sha256": "dfcd9e50f1c6abe5897bcc0804dbb51031f2d54f231e3c452bffa1e2f4119d20" + }, + { + "path": "artifacts/cp3-121116-6159c012/joint-revolute-final.f3d", + "bytes": 78163, + "sha256": "9b7ae4e9bce7dc63294dde863e06cc283e2f9b6b32631424639dee4ec4658e05" + }, + { + "path": "artifacts/cp3-121116-6159c012/joint-revolute-final.png", + "bytes": 28815, + "sha256": "61dffbb2d3bb9349ed41c4afd40eef2502fa48bfc201819be4c410dd4da23dae" + } + ], + "nativeExportCrossChecks": [ + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-final.f3d", + "sha256": "c312369e6c17cbc0bb8cf359cce89d45e3fb7627fe341d54127be81a8e22bddf", + "bytes": 108176, + "nativeEvidence": "cp3-123613-f8a50491-105-assembly-accounting-native-roundtrip-final.json", + "matches": true + }, + { + "path": "artifacts/cp3-123613-f8a50491/placement-contexts-final.f3d", + "sha256": "f9af3207f4fbedf03d8148e603541af24ee546d745777c13eb51ce37bff7d72a", + "bytes": 71706, + "nativeEvidence": "cp3-123613-f8a50491-140-placement-contexts-native-roundtrip-final.json", + "matches": true + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-final.f3d", + "sha256": "7c477a5bf0f11e462c2a1db4bcb9fd480e6fa8d6c99b66925f5f110b0e0ccce1", + "bytes": 588440, + "nativeEvidence": "cp3-123613-f8a50491-174-supplier-mcmaster-native-roundtrip-final.json", + "matches": true + }, + { + "path": "artifacts/cp3-121116-6159c012/joint-revolute-final.f3d", + "sha256": "9b7ae4e9bce7dc63294dde863e06cc283e2f9b6b32631424639dee4ec4658e05", + "bytes": 78163, + "nativeEvidence": "cp3-121116-6159c012-209-joint-revolute-native-roundtrip-final.json", + "matches": true + } + ], + "nativeCsvCrossChecks": [ + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-flat-bom.csv", + "sha256": "903ae5b28ab814c38dee90c2755f08255677853c493a4fd0c3af80db7e2af9d0", + "nativeEvidence": "cp3-123613-f8a50491-092-flat-bom-csv-oracle.json", + "matches": true + }, + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-structured-bom.csv", + "sha256": "2de588ab4219446263bc78725748887c0f4e7c6f05708aab1cd33aa0e752c331", + "nativeEvidence": "cp3-123613-f8a50491-096-structured-bom-csv-oracle.json", + "matches": true + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-supplier-flat.csv", + "sha256": "457bb65ff0c12a5c46c7a06ac74ca254b2529b806756d0c53f4e7fa37f531e2d", + "nativeEvidence": "cp3-123613-f8a50491-162-supplier-flat-csv-oracle.json", + "matches": true + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-supplier-structured.csv", + "sha256": "dfcd9e50f1c6abe5897bcc0804dbb51031f2d54f231e3c452bffa1e2f4119d20", + "nativeEvidence": "cp3-123613-f8a50491-166-supplier-structured-csv-oracle.json", + "matches": true + } + ] +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp3-final-accounting.json b/docs/mechanical-verification/cp3-final-accounting.json new file mode 100644 index 0000000..99d1079 --- /dev/null +++ b/docs/mechanical-verification/cp3-final-accounting.json @@ -0,0 +1,164 @@ +{ + "verdict": "PASS", + "modelingRun": "cp3-123613-f8a50491", + "pickerRun": "cp3-114558-46db347b", + "requiredFixtures": [ + "assembly-accounting", + "placement-contexts", + "joint-rigid", + "joint-revolute", + "joint-slider", + "joint-cylindrical", + "joint-pin_slot", + "joint-planar", + "joint-ball", + "rigid-groups", + "interference", + "supplier-mcmaster" + ], + "observedFixtures": [ + "assembly-accounting", + "placement-contexts", + "joint-rigid", + "joint-revolute", + "joint-slider", + "joint-cylindrical", + "joint-pin_slot", + "joint-planar", + "joint-ball", + "rigid-groups", + "interference", + "supplier-mcmaster" + ], + "completedFixtures": [ + "assembly-accounting", + "placement-contexts", + "joint-rigid", + "joint-revolute", + "joint-slider", + "joint-cylindrical", + "joint-pin_slot", + "joint-planar", + "joint-ball", + "rigid-groups", + "interference", + "supplier-mcmaster" + ], + "supplementalFiles": [ + "cp3-r3-independent-copy-adjudication.json" + ], + "retainedGroups": [ + { + "fixture": "joint-rigid", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 66 + }, + { + "fixture": "joint-revolute", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 65 + }, + { + "fixture": "joint-slider", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 59 + }, + { + "fixture": "joint-cylindrical", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 60 + }, + { + "fixture": "joint-pin_slot", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 60 + }, + { + "fixture": "joint-planar", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 61 + }, + { + "fixture": "joint-ball", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 61 + }, + { + "fixture": "rigid-groups", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 67 + }, + { + "fixture": "interference", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 43 + } + ], + "resolvedFindings": [ + { + "original": { + "sourceRun": "cp3-121116-6159c012", + "rawEvidence": "cp3-121116-6159c012-039-assembly-accounting-Frame-independent.json", + "case": "independent copy retains requested initial placement", + "status": "FAIL", + "requestedPosition": [ + 80, + 0, + 0 + ], + "returnedPosition": [ + 20.0, + 0.0, + 0.0 + ], + "reason": "Supplemental visual/native witness audit found placement expectation absent from original harness. API returned success with requested80mm but actual20mm; regression added without altering original evidence." + }, + "sourceFile": "cp3-r3-independent-copy-adjudication.json", + "resolutionRun": "cp3-123613-f8a50491", + "resolutionCase": { + "case": "independent copy retains requested initial placement", + "status": "PASS", + "details": [ + 1.0, + 0.0, + 0.0, + 80.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + } + ], + "counts": { + "behavior": 408, + "availability": 407 + }, + "statusCounts": { + "PASS": 815 + }, + "byRun": { + "cp3-114558-46db347b": { + "behavior": 15, + "availability": 14 + }, + "cp3-121116-6159c012": { + "behavior": 270, + "availability": 272 + }, + "cp3-123613-f8a50491": { + "behavior": 123, + "availability": 121 + } + }, + "nonpassingCases": [] +} diff --git a/docs/mechanical-verification/cp3-final-adjudicated-summary.json b/docs/mechanical-verification/cp3-final-adjudicated-summary.json new file mode 100644 index 0000000..c7bf905 --- /dev/null +++ b/docs/mechanical-verification/cp3-final-adjudicated-summary.json @@ -0,0 +1,22392 @@ +{ + "verdict": "PASS", + "modelingRun": "cp3-123613-f8a50491", + "pickerRun": "cp3-114558-46db347b", + "requiredFixtures": [ + "assembly-accounting", + "placement-contexts", + "joint-rigid", + "joint-revolute", + "joint-slider", + "joint-cylindrical", + "joint-pin_slot", + "joint-planar", + "joint-ball", + "rigid-groups", + "interference", + "supplier-mcmaster" + ], + "observedFixtures": [ + "assembly-accounting", + "placement-contexts", + "joint-rigid", + "joint-revolute", + "joint-slider", + "joint-cylindrical", + "joint-pin_slot", + "joint-planar", + "joint-ball", + "rigid-groups", + "interference", + "supplier-mcmaster" + ], + "completedFixtures": [ + "assembly-accounting", + "placement-contexts", + "joint-rigid", + "joint-revolute", + "joint-slider", + "joint-cylindrical", + "joint-pin_slot", + "joint-planar", + "joint-ball", + "rigid-groups", + "interference", + "supplier-mcmaster" + ], + "supplementalFiles": [ + "cp3-r3-independent-copy-adjudication.json" + ], + "retainedGroups": [ + { + "fixture": "joint-rigid", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 66 + }, + { + "fixture": "joint-revolute", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 65 + }, + { + "fixture": "joint-slider", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 59 + }, + { + "fixture": "joint-cylindrical", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 60 + }, + { + "fixture": "joint-pin_slot", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 60 + }, + { + "fixture": "joint-planar", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 61 + }, + { + "fixture": "joint-ball", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 61 + }, + { + "fixture": "rigid-groups", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 67 + }, + { + "fixture": "interference", + "sourceRun": "cp3-121116-6159c012", + "caseCount": 43 + } + ], + "resolvedFindings": [ + { + "original": { + "sourceRun": "cp3-121116-6159c012", + "rawEvidence": "cp3-121116-6159c012-039-assembly-accounting-Frame-independent.json", + "case": "independent copy retains requested initial placement", + "status": "FAIL", + "requestedPosition": [ + 80, + 0, + 0 + ], + "returnedPosition": [ + 20.0, + 0.0, + 0.0 + ], + "reason": "Supplemental visual/native witness audit found placement expectation absent from original harness. API returned success with requested80mm but actual20mm; regression added without altering original evidence." + }, + "sourceFile": "cp3-r3-independent-copy-adjudication.json", + "resolutionRun": "cp3-123613-f8a50491", + "resolutionCase": { + "case": "independent copy retains requested initial placement", + "status": "PASS", + "details": [ + 1.0, + 0.0, + 0.0, + 80.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + } + ], + "counts": { + "behavior": 408, + "availability": 407 + }, + "statusCounts": { + "PASS": 815 + }, + "byRun": { + "cp3-114558-46db347b": { + "behavior": 15, + "availability": 14 + }, + "cp3-121116-6159c012": { + "behavior": 270, + "availability": 272 + }, + "cp3-123613-f8a50491": { + "behavior": 123, + "availability": 121 + } + }, + "nonpassingCases": [], + "artifacts": [ + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-final.f3d", + "bytes": 108176, + "sha256": "c312369e6c17cbc0bb8cf359cce89d45e3fb7627fe341d54127be81a8e22bddf" + }, + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-final.png", + "bytes": 14496, + "sha256": "db6594eb92e32be282a5865c8266a1ff7b2d151fda2b8f454eac4e23fef99e1e" + }, + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-flat-bom.csv", + "bytes": 379, + "sha256": "903ae5b28ab814c38dee90c2755f08255677853c493a4fd0c3af80db7e2af9d0" + }, + { + "path": "artifacts/cp3-123613-f8a50491/assembly-accounting-structured-bom.csv", + "bytes": 488, + "sha256": "2de588ab4219446263bc78725748887c0f4e7c6f05708aab1cd33aa0e752c331" + }, + { + "path": "artifacts/cp3-123613-f8a50491/placement-contexts-final.f3d", + "bytes": 71706, + "sha256": "f9af3207f4fbedf03d8148e603541af24ee546d745777c13eb51ce37bff7d72a" + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-final.f3d", + "bytes": 588440, + "sha256": "7c477a5bf0f11e462c2a1db4bcb9fd480e6fa8d6c99b66925f5f110b0e0ccce1" + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-final.png", + "bytes": 176521, + "sha256": "ad6f9d190018194913bc45b026eac999f1247bf5bbde22c1b2338ddbd6445193" + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-supplier-flat.csv", + "bytes": 417, + "sha256": "457bb65ff0c12a5c46c7a06ac74ca254b2529b806756d0c53f4e7fa37f531e2d" + }, + { + "path": "artifacts/cp3-123613-f8a50491/supplier-mcmaster-supplier-structured.csv", + "bytes": 797, + "sha256": "dfcd9e50f1c6abe5897bcc0804dbb51031f2d54f231e3c452bffa1e2f4119d20" + }, + { + "path": "artifacts/cp3-121116-6159c012/joint-revolute-final.f3d", + "bytes": 78163, + "sha256": "9b7ae4e9bce7dc63294dde863e06cc283e2f9b6b32631424639dee4ec4658e05" + }, + { + "path": "artifacts/cp3-121116-6159c012/joint-revolute-final.png", + "bytes": 28815, + "sha256": "61dffbb2d3bb9349ed41c4afd40eef2502fa48bfc201819be4c410dd4da23dae" + } + ], + "cases": [ + { + "case": "deployed runtime matches requested version", + "status": "PASS", + "details": { + "ready": true, + "bridgeVersion": "1.12.0-dev.3", + "addinVersion": "1.12.0-dev.3", + "addinStale": false + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "capabilities publish current session", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "capabilities enumerate required operations", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "baseline-documents oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-assembly-accounting-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-explicit-root-selection available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting explicit-root-properties readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "explicit root reference resolves high-accuracy physical properties", + "status": "PASS", + "details": { + "area": 160.0, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 5.0, + 2.5, + 1.0000000000000002 + ], + "entity": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "a0eb3e94c91b8d916f3574a74249ffb0b4406bf57a8bc5e677553452047749aa", + "rootComponentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.00027, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "revision": "a0eb3e94c91b8d916f3574a74249ffb0b4406bf57a8bc5e677553452047749aa" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 100.0 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-explicit-root-metadata", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-explicit-root-metadata-readback available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "explicit root reference permits guarded metadata edit", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-Frame-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Frame-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-Frame-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-before-Frame-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Frame-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-after-Frame-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "Frame has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "10.0 mm", + "name": "d9", + "unit": "mm", + "value": 10.0 + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Pin-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Pin available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Pin-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-Pin-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-before-Pin-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Pin-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-after-Pin-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "Pin has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "5.0 mm", + "name": "d11", + "unit": "mm", + "value": 5.0 + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Frame-repeat", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-repeated-instances available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "repeated parent duplicates child instances", + "status": "PASS", + "details": [ + { + "componentId": "9733a016-cf25-448e-ba5c-baa5332caa26", + "grounded": false, + "path": "Frame:1+Pin:1", + "ref": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:1+Pin:1", + "occurrenceToken": null, + "revision": "b54147022aa1be1d40317807c5dc57e2bd8a03899d9f91d5c43bf94463bf53a0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/33PrRECMAwG0FW6QO6anzatZwZ82rSHhS2YBI9DIhkEh2AABAU8F5PLvUvyxSCBAoa4CqmsDn+THPaH8/b+2LxOz83teN1dlqDAOVBRNDEG5BZBBk4wlwZOmruZR0n6k10VGzcGqTEv2QWqqQNpE+q1ksevmy1lMergEXVhm1AaVcg4tHD3QbP//0mRi6ecgAc6CKZ1aSReC+vgbCRT6ifjG5Yg7xfvAAAA" + }, + "space": "root", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "transformLayout": "row-major", + "translationUnit": "mm" + }, + { + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "grounded": false, + "path": "Frame:1", + "ref": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:1", + "occurrenceToken": null, + "revision": "b54147022aa1be1d40317807c5dc57e2bd8a03899d9f91d5c43bf94463bf53a0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW3EDlvy79W1+NZCvd+9ECl1QCTkZISGFkBFQAAFG5GiS0ehpZggMBBgoxTKn419S4HC87B7P5X1+LffTbX9NQkALyOzcrCmyBqGtvGEbFjjES29tkE2eLUl2dw4NRatUkuyGtflA8TDptcog+b/lGsHbFFiyAk1NsYY7Cklfx2p1zPL9/gE9KpumxwAAAA==" + }, + "space": "root", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "transformLayout": "row-major", + "translationUnit": "mm" + }, + { + "componentId": "9733a016-cf25-448e-ba5c-baa5332caa26", + "grounded": false, + "path": "Frame:2+Pin:1", + "ref": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:2+Pin:1", + "occurrenceToken": null, + "revision": "b54147022aa1be1d40317807c5dc57e2bd8a03899d9f91d5c43bf94463bf53a0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Puw2CMQyEV8kCluJHHu6Zgd6JE9HCFkxCT0dJySB0FAxAQdDfo3NhnT6dfTFIoIAhLiHVteHm5HA8XffP1+5zee8e5/vhtggKnAPVgibGgNwiyMAJ5tLAqeRu5lFS2cg6LDYVgaZVQQwdGs8InlTMR2Je0JrZUhajDh6xgKhNqI0UMo5Sufug2f//VJCrp5yAxzoimAR05a9AHZyNZIr+On4Bu70EGu8AAAA=" + }, + "space": "root", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "transformLayout": "row-major", + "translationUnit": "mm" + }, + { + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "grounded": false, + "path": "Frame:2", + "ref": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:2", + "occurrenceToken": null, + "revision": "b54147022aa1be1d40317807c5dc57e2bd8a03899d9f91d5c43bf94463bf53a0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW9kGLK0/+3FODeT2eU+k0AWVkJMRElIIGQEFELAncjTJaPQ0MzlJooQpTyH16fCX1HQ8XffP1+5zee8e5/vhNglKXBP1hibGgOwZZOAKFuIQ1OpiFllKmy2T7MOyqwi4dgUxDHBeM0RRsRiFeav7t9XYHdfiUEXnFguDemtAmZYRQzQ6bd+/5ziZ28cAAAA=" + }, + "space": "root", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "transformLayout": "row-major", + "translationUnit": "mm" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-occurrence-Frame:1+Pin:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-occurrence-Frame:2+Pin:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "nested repeated child proxies resolve root positions", + "status": "PASS", + "details": [ + [ + 20.0, + 20.0, + 0.0 + ], + [ + 50.0, + 20.0, + 0.0 + ] + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-occurrence-Frame:1+Pin:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-nested-context-placement", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-occurrence-Frame:1+Pin:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "nested occurrence update uses selected root context", + "status": "PASS", + "details": { + "max": [ + 22.0, + 27.0, + 5.0 + ], + "min": [ + 20.0, + 25.0, + 0.0 + ] + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Frame-independent", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "independent copy retains requested initial placement", + "status": "PASS", + "details": [ + 1.0, + 0.0, + 0.0, + 80.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "Paste New returns independent definition identity", + "status": "PASS", + "details": { + "source": "ef472b3e-b200-498b-9161-f881ab9baff9", + "copy": "d3690584-5870-48f8-af33-968a55f72c60" + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-independent-copy-name", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-before-source-depth-edit available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-source-depth-edit", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-after-source-depth-edit available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "definition edit changes shared source but not independent copy", + "status": "PASS", + "details": { + "sourceVolume": 2000.0, + "copyVolume": 1000.0 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "independent copy placement survives later parameter edits", + "status": "PASS", + "details": [ + 1.0, + 0.0, + 0.0, + 80.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Frame-metadata", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-stale-assembly-target-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-stale-assembly-target-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "stale-assembly-target safely refused without model changes", + "status": "PASS", + "details": { + "error": "The model changed; inspect it before a new operation.", + "errorCode": "stale_revision", + "causeCode": null, + "recovery": null, + "unchanged": true + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-cycle-selection available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-cyclic-insertion-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-cyclic-insertion-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "cyclic-insertion safely refused without model changes", + "status": "PASS", + "details": { + "error": "A component cannot contain itself or its ancestor.", + "errorCode": "mutation_failed", + "causeCode": "cyclic_assembly", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-temporary-instance", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-delete-temporary-instance", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-occurrences-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "occurrence delete restores repeated quantity", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-material-list available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting material-libraries readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting material-steel-0 readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting material-steel-1 readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting material-steel-3 readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting material-steel-3 readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting material-steel-102 readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting material-steel-107 readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "loaded material catalog offers steel", + "status": "PASS", + "details": [ + { + "count": 8, + "id": "9F59B1F0-C8D2-43C3-AE57-C78BBA2F90AB", + "name": "Favorites Library" + }, + { + "count": 20, + "id": "37F4D96F-FA9A-42A9-B954-B4E6A53A2515", + "name": "Fusion Additive Material Library" + }, + { + "count": 0, + "id": "BA5EE55E-9982-449B-9D66-9F036540E140", + "name": "Fusion Appearance Library" + }, + { + "count": 324, + "id": "C1EEA57C-3F56-45FC-B8CB-A9EC46A9994C", + "name": "Fusion Material Library" + }, + { + "count": 12, + "id": "3C7662D2-1441-4D2C-8CF9-1EC6E8BBF2FB", + "name": "Fusion Nonlinear Material Library" + }, + { + "count": 0, + "id": "user/SL82YQM5RE429PR6/content/private/", + "name": "Private Visual Library" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-before-material oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-assign-Frame-material", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-after-material oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assigned material changes actual assembly mass", + "status": "PASS", + "details": { + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "before": { + "centerOfMass": [ + 48.170542635658926, + 5.176356589147286, + 8.76937984496124 + ], + "mass": 0.013931999999999998, + "volume": 5159.999999999999 + }, + "after": { + "centerOfMass": [ + 43.253152167655024, + 5.180436409695435, + 9.461972479705222 + ], + "mass": 0.03473799999999999, + "volume": 5159.999999999999 + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-mass-properties available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting assembly-properties readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "public assembly mass and volume match independently summed instances", + "status": "PASS", + "details": { + "public": { + "area": 2904.0, + "averageDensity": 6.732170542635658e-06, + "centerOfMass": [ + 43.253152167655024, + 5.180436409695435, + 9.461972479705222 + ], + "entity": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "eeeafe62c6047df50a9c99a721a86d2ef96c00361af97cf650ac1d7868a09481", + "rootComponentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.03473799999999999, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "revision": "eeeafe62c6047df50a9c99a721a86d2ef96c00361af97cf650ac1d7868a09481" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 5159.999999999999 + }, + "independent": { + "bodyInstances": 7, + "centerOfMass": [ + 43.25315216765502, + 5.180436409695434, + 9.46197247970522 + ], + "mass": 0.034738, + "volume": 5160.0 + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly center of mass matches independently weighted instances", + "status": "PASS", + "details": { + "public": [ + 43.253152167655024, + 5.180436409695435, + 9.461972479705222 + ], + "independent": [ + 43.25315216765502, + 5.180436409695434, + 9.46197247970522 + ] + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-unknown-material-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-unknown-material-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "unknown-material safely refused without model changes", + "status": "PASS", + "details": { + "error": "Material ID was not found in the selected source.", + "errorCode": "mutation_failed", + "causeCode": "material_missing", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-bom-expanded available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting bom-expanded readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-component-Pin available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-occurrences-Pin available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "flat BOM counts repeated definitions and root body", + "status": "PASS", + "details": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 3, + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "rootComponentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "description": "Verifier root body assembly", + "material": null, + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-36-16-054" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 1, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAEAiQEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": { + "supplier": "\"Verifier fixture\"" + }, + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "partNumber": "FRAME-1", + "supplier": "Verifier fixture" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:1", + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW3EDlvy79W1+NZCvd+9ECl1QCTkZISGFkBFQAAFG5GiS0ehpZggMBBgoxTKn419S4HC87B7P5X1+LffTbX9NQkALyOzcrCmyBqGtvGEbFjjES29tkE2eLUl2dw4NRatUkuyGtflA8TDptcog+b/lGsHbFFiyAk1NsYY7Cklfx2p1zPL9/gE9KpumxwAAAA==" + }, + "parentPath": "", + "path": "Frame:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "9733a016-cf25-448e-ba5c-baa5332caa26", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAEAlQQAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Pin", + "partNumber": "2026-10-02-12-36-26-787" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:1+Pin:1", + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/33PrRECMAwG0FW6QO6anzatZwZ82rSHhS2YBI9DIhkEh2AABAU8F5PLvUvyxSCBAoa4CqmsDn+THPaH8/b+2LxOz83teN1dlqDAOVBRNDEG5BZBBk4wlwZOmruZR0n6k10VGzcGqTEv2QWqqQNpE+q1ksevmy1lMergEXVhm1AaVcg4tHD3QbP//0mRi6ecgAc6CKZ1aSReC+vgbCRT6ifjG5Yg7xfvAAAA" + }, + "parentPath": "Frame:1", + "path": "Frame:1+Pin:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 1, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAEAiQEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": { + "supplier": "\"Verifier fixture\"" + }, + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "partNumber": "FRAME-1", + "supplier": "Verifier fixture" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:2", + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW9kGLK0/+3FODeT2eU+k0AWVkJMRElIIGQEFELAncjTJaPQ0MzlJooQpTyH16fCX1HQ8XffP1+5zee8e5/vhNglKXBP1hibGgOwZZOAKFuIQ1OpiFllKmy2T7MOyqwi4dgUxDHBeM0RRsRiFeav7t9XYHdfiUEXnFguDemtAmZYRQzQ6bd+/5ziZ28cAAAA=" + }, + "parentPath": "", + "path": "Frame:2" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "9733a016-cf25-448e-ba5c-baa5332caa26", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAEAlQQAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Pin", + "partNumber": "2026-10-02-12-36-26-787" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:2+Pin:1", + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Puw2CMQyEV8kCluJHHu6Zgd6JE9HCFkxCT0dJySB0FAxAQdDfo3NhnT6dfTFIoIAhLiHVteHm5HA8XffP1+5zee8e5/vhtggKnAPVgibGgNwiyMAJ5tLAqeRu5lFS2cg6LDYVgaZVQQwdGs8InlTMR2Je0JrZUhajDh6xgKhNqI0UMo5Sufug2f//VJCrp5yAxzoimAR05a9AHZyNZIr+On4Bu70EGu8AAAA=" + }, + "parentPath": "Frame:2", + "path": "Frame:2+Pin:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 1, + "componentId": "d3690584-5870-48f8-af33-968a55f72c60", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAEA5xEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "partNumber": "IND-1" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Independent:1", + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw2CMQyEV8kCluLYiZP+n4HezkO0sAWT0NNRUjIIHQUDUGBEj66xfJ/PFwOHFDBEF6bqE/42JRyOl93jub3Pr+1+uu2vTqRAJaQqqKwESBaBJy7QwQYjSemqI3IWT3FypZaVsUPu1oFTUVChDibYFKN0M/n/q4y6ppHfNZrAlQRq9ARabUVxY/b27f4B5ONnr8cAAAA=" + }, + "parentPath": "", + "path": "Independent:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "07501fcd-0e85-436f-88a3-de19d031ce31", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAEAWRIAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Pin (1)", + "partNumber": "2026-10-02-12-36-26-787" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Independent:1+Pin (1):1", + "occurrenceToken": null, + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PvY1CMRCEW3EDK3nX67+cGsjHu88ihS6o5PLLCAkp5LILKIAAP5GjSUajT6OZGDRI4BCXWNpy/ElKOF9+j3//h9fP8/C43k+3RUhIJUirDEUiTiOSbjwJroNcajHAo+b6Iaf0DGWjbMNIpYBQk9Go3MGx2hh157QJuqrTKmik2BqNNhsJZ/Q0MW3I900LKcnh5LnJaqhG3bRT9yzABp88949vv+gbj+8AAAA=" + }, + "parentPath": "Independent:1", + "path": "Independent:1+Pin (1):1" + } + ], + "partCount": 5, + "parts": [ + { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "description": "Verifier root body assembly", + "material": null, + "name": "(Unsaved)", + "occurrencePaths": [ + "" + ], + "partNumber": "2026-10-02-12-36-16-054", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.00027, + "unitVolume": 100.0 + }, + { + "attributes": { + "supplier": "\"Verifier fixture\"" + }, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "occurrencePaths": [ + "Frame:1", + "Frame:2" + ], + "partNumber": "FRAME-1", + "quantity": 2, + "scope": "direct_component_bodies", + "supplier": "Verifier fixture", + "unitMass": 0.0157, + "unitVolume": 2000.0 + }, + { + "attributes": {}, + "componentId": "9733a016-cf25-448e-ba5c-baa5332caa26", + "description": "", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Pin", + "occurrencePaths": [ + "Frame:1+Pin:1", + "Frame:2+Pin:1" + ], + "partNumber": "2026-10-02-12-36-26-787", + "quantity": 2, + "scope": "direct_component_bodies", + "unitMass": 0.00015700000000000002, + "unitVolume": 20.000000000000004 + }, + { + "attributes": {}, + "componentId": "d3690584-5870-48f8-af33-968a55f72c60", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "occurrencePaths": [ + "Independent:1" + ], + "partNumber": "IND-1", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + }, + { + "attributes": {}, + "componentId": "07501fcd-0e85-436f-88a3-de19d031ce31", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Pin (1)", + "occurrencePaths": [ + "Independent:1+Pin (1):1" + ], + "partNumber": "2026-10-02-12-36-26-787", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 5.4000000000000005e-05, + "unitVolume": 20.000000000000004 + } + ], + "physical": { + "bodyInstances": 7, + "mass": 0.03473799999999999, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5160.0 + }, + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "revision": "0acd2cc30066af8345da8bce781e9fcf18fe1a2689539650daa300ce9593b574" + }, + "totalPurchasingInstances": 7, + "units": { + "mass": "kg", + "volume": "mm3" + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "physical assembly volume is 5160 cubic millimetres", + "status": "PASS", + "details": { + "bodyInstances": 7, + "mass": 0.03473799999999999, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5160.0 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Frame available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-Frame-purchased", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-bom-collapsed available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting bom-collapsed readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-bom-exploded available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting bom-exploded readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "purchased assembly collapses child purchasing rows", + "status": "PASS", + "details": { + "collapsed": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 3, + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "rootComponentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "description": "Verifier root body assembly", + "material": null, + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-36-16-054" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": true, + "bodyCount": 1, + "childCount": 1, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEAiQEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "partNumber": "FRAME-1", + "supplier": "Verifier fixture" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:1", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW3EDlvy79W1+NZCvd+9ECl1QCTkZISGFkBFQAAFG5GiS0ehpZggMBBgoxTKn419S4HC87B7P5X1+LffTbX9NQkALyOzcrCmyBqGtvGEbFjjES29tkE2eLUl2dw4NRatUkuyGtflA8TDptcog+b/lGsHbFFiyAk1NsYY7Cklfx2p1zPL9/gE9KpumxwAAAA==" + }, + "parentPath": "", + "path": "Frame:1" + }, + { + "asPurchased": true, + "bodyCount": 1, + "childCount": 1, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEAiQEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "partNumber": "FRAME-1", + "supplier": "Verifier fixture" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:2", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW9kGLK0/+3FODeT2eU+k0AWVkJMRElIIGQEFELAncjTJaPQ0MzlJooQpTyH16fCX1HQ8XffP1+5zee8e5/vhNglKXBP1hibGgOwZZOAKFuIQ1OpiFllKmy2T7MOyqwi4dgUxDHBeM0RRsRiFeav7t9XYHdfiUEXnFguDemtAmZYRQzQ6bd+/5ziZ28cAAAA=" + }, + "parentPath": "", + "path": "Frame:2" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 1, + "componentId": "d3690584-5870-48f8-af33-968a55f72c60", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEA5xEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "partNumber": "IND-1" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Independent:1", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw2CMQyEV8kCluLYiZP+n4HezkO0sAWT0NNRUjIIHQUDUGBEj66xfJ/PFwOHFDBEF6bqE/42JRyOl93jub3Pr+1+uu2vTqRAJaQqqKwESBaBJy7QwQYjSemqI3IWT3FypZaVsUPu1oFTUVChDibYFKN0M/n/q4y6ppHfNZrAlQRq9ARabUVxY/b27f4B5ONnr8cAAAA=" + }, + "parentPath": "", + "path": "Independent:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "07501fcd-0e85-436f-88a3-de19d031ce31", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEAWRIAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Pin (1)", + "partNumber": "2026-10-02-12-36-26-787" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Independent:1+Pin (1):1", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PvY1CMRCEW3EDK3nX67+cGsjHu88ihS6o5PLLCAkp5LILKIAAP5GjSUajT6OZGDRI4BCXWNpy/ElKOF9+j3//h9fP8/C43k+3RUhIJUirDEUiTiOSbjwJroNcajHAo+b6Iaf0DGWjbMNIpYBQk9Go3MGx2hh157QJuqrTKmik2BqNNhsJZ/Q0MW3I900LKcnh5LnJaqhG3bRT9yzABp88949vv+gbj+8AAAA=" + }, + "parentPath": "Independent:1", + "path": "Independent:1+Pin (1):1" + } + ], + "partCount": 4, + "parts": [ + { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "description": "Verifier root body assembly", + "material": null, + "name": "(Unsaved)", + "occurrencePaths": [ + "" + ], + "partNumber": "2026-10-02-12-36-16-054", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.00027, + "unitVolume": 100.0 + }, + { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "occurrencePaths": [ + "Frame:1", + "Frame:2" + ], + "partNumber": "FRAME-1", + "quantity": 2, + "scope": "component_subtree", + "supplier": "Verifier fixture", + "unitMass": 0.015857, + "unitVolume": 2020.0 + }, + { + "attributes": {}, + "componentId": "d3690584-5870-48f8-af33-968a55f72c60", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "occurrencePaths": [ + "Independent:1" + ], + "partNumber": "IND-1", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + }, + { + "attributes": {}, + "componentId": "07501fcd-0e85-436f-88a3-de19d031ce31", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Pin (1)", + "occurrencePaths": [ + "Independent:1+Pin (1):1" + ], + "partNumber": "2026-10-02-12-36-26-787", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 5.4000000000000005e-05, + "unitVolume": 20.000000000000004 + } + ], + "physical": { + "bodyInstances": 7, + "mass": 0.03473799999999999, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5160.0 + }, + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36" + }, + "totalPurchasingInstances": 5, + "units": { + "mass": "kg", + "volume": "mm3" + } + }, + "expanded": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 3, + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "rootComponentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "description": "Verifier root body assembly", + "material": null, + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-36-16-054" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 1, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEAiQEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "partNumber": "FRAME-1", + "supplier": "Verifier fixture" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:1", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW3EDlvy79W1+NZCvd+9ECl1QCTkZISGFkBFQAAFG5GiS0ehpZggMBBgoxTKn419S4HC87B7P5X1+LffTbX9NQkALyOzcrCmyBqGtvGEbFjjES29tkE2eLUl2dw4NRatUkuyGtflA8TDptcog+b/lGsHbFFiyAk1NsYY7Cklfx2p1zPL9/gE9KpumxwAAAA==" + }, + "parentPath": "", + "path": "Frame:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "9733a016-cf25-448e-ba5c-baa5332caa26", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEAlQQAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Pin", + "partNumber": "2026-10-02-12-36-26-787" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:1+Pin:1", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/33PrRECMAwG0FW6QO6anzatZwZ82rSHhS2YBI9DIhkEh2AABAU8F5PLvUvyxSCBAoa4CqmsDn+THPaH8/b+2LxOz83teN1dlqDAOVBRNDEG5BZBBk4wlwZOmruZR0n6k10VGzcGqTEv2QWqqQNpE+q1ksevmy1lMergEXVhm1AaVcg4tHD3QbP//0mRi6ecgAc6CKZ1aSReC+vgbCRT6ifjG5Yg7xfvAAAA" + }, + "parentPath": "Frame:1", + "path": "Frame:1+Pin:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 1, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEAiQEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "partNumber": "FRAME-1", + "supplier": "Verifier fixture" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:2", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW9kGLK0/+3FODeT2eU+k0AWVkJMRElIIGQEFELAncjTJaPQ0MzlJooQpTyH16fCX1HQ8XffP1+5zee8e5/vhNglKXBP1hibGgOwZZOAKFuIQ1OpiFllKmy2T7MOyqwi4dgUxDHBeM0RRsRiFeav7t9XYHdfiUEXnFguDemtAmZYRQzQ6bd+/5ziZ28cAAAA=" + }, + "parentPath": "", + "path": "Frame:2" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "9733a016-cf25-448e-ba5c-baa5332caa26", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEAlQQAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Pin", + "partNumber": "2026-10-02-12-36-26-787" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:2+Pin:1", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Puw2CMQyEV8kCluJHHu6Zgd6JE9HCFkxCT0dJySB0FAxAQdDfo3NhnT6dfTFIoIAhLiHVteHm5HA8XffP1+5zee8e5/vhtggKnAPVgibGgNwiyMAJ5tLAqeRu5lFS2cg6LDYVgaZVQQwdGs8InlTMR2Je0JrZUhajDh6xgKhNqI0UMo5Sufug2f//VJCrp5yAxzoimAR05a9AHZyNZIr+On4Bu70EGu8AAAA=" + }, + "parentPath": "Frame:2", + "path": "Frame:2+Pin:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 1, + "componentId": "d3690584-5870-48f8-af33-968a55f72c60", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEA5xEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "partNumber": "IND-1" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Independent:1", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw2CMQyEV8kCluLYiZP+n4HezkO0sAWT0NNRUjIIHQUDUGBEj66xfJ/PFwOHFDBEF6bqE/42JRyOl93jub3Pr+1+uu2vTqRAJaQqqKwESBaBJy7QwQYjSemqI3IWT3FypZaVsUPu1oFTUVChDibYFKN0M/n/q4y6ppHfNZrAlQRq9ARabUVxY/b27f4B5ONnr8cAAAA=" + }, + "parentPath": "", + "path": "Independent:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "07501fcd-0e85-436f-88a3-de19d031ce31", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAEAWRIAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Pin (1)", + "partNumber": "2026-10-02-12-36-26-787" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Independent:1+Pin (1):1", + "occurrenceToken": null, + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PvY1CMRCEW3EDK3nX67+cGsjHu88ihS6o5PLLCAkp5LILKIAAP5GjSUajT6OZGDRI4BCXWNpy/ElKOF9+j3//h9fP8/C43k+3RUhIJUirDEUiTiOSbjwJroNcajHAo+b6Iaf0DGWjbMNIpYBQk9Go3MGx2hh157QJuqrTKmik2BqNNhsJZ/Q0MW3I900LKcnh5LnJaqhG3bRT9yzABp88949vv+gbj+8AAAA=" + }, + "parentPath": "Independent:1", + "path": "Independent:1+Pin (1):1" + } + ], + "partCount": 5, + "parts": [ + { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "description": "Verifier root body assembly", + "material": null, + "name": "(Unsaved)", + "occurrencePaths": [ + "" + ], + "partNumber": "2026-10-02-12-36-16-054", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.00027, + "unitVolume": 100.0 + }, + { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "occurrencePaths": [ + "Frame:1", + "Frame:2" + ], + "partNumber": "FRAME-1", + "quantity": 2, + "scope": "direct_component_bodies", + "supplier": "Verifier fixture", + "unitMass": 0.0157, + "unitVolume": 2000.0 + }, + { + "attributes": {}, + "componentId": "9733a016-cf25-448e-ba5c-baa5332caa26", + "description": "", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Pin", + "occurrencePaths": [ + "Frame:1+Pin:1", + "Frame:2+Pin:1" + ], + "partNumber": "2026-10-02-12-36-26-787", + "quantity": 2, + "scope": "direct_component_bodies", + "unitMass": 0.00015700000000000002, + "unitVolume": 20.000000000000004 + }, + { + "attributes": {}, + "componentId": "d3690584-5870-48f8-af33-968a55f72c60", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "occurrencePaths": [ + "Independent:1" + ], + "partNumber": "IND-1", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + }, + { + "attributes": {}, + "componentId": "07501fcd-0e85-436f-88a3-de19d031ce31", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Pin (1)", + "occurrencePaths": [ + "Independent:1+Pin (1):1" + ], + "partNumber": "2026-10-02-12-36-26-787", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 5.4000000000000005e-05, + "unitVolume": 20.000000000000004 + } + ], + "physical": { + "bodyInstances": 7, + "mass": 0.03473799999999999, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5160.0 + }, + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "revision": "8bf8498adf1ed8ef39a9548f1f47ab8bea53838952b0e7e9ea0e52575bb5aa36" + }, + "totalPurchasingInstances": 7, + "units": { + "mass": "kg", + "volume": "mm3" + } + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "purchasing collapse keeps physical totals", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-component-Independent available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-independent-excluded", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-bom-excluded available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting bom-excluded readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "BOM exclusion removes purchasing subtree but keeps physical mass", + "status": "PASS", + "details": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [ + { + "path": "Independent:1", + "reason": "excludeFromBom" + } + ], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 3, + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "239ad886cc874aed5a6eb8a65a0d5dec11899ef3dbb8d0770c9b9510b347d31d", + "rootComponentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "description": "Verifier root body assembly", + "material": null, + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-36-16-054" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": true, + "bodyCount": 1, + "childCount": 1, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "239ad886cc874aed5a6eb8a65a0d5dec11899ef3dbb8d0770c9b9510b347d31d", + "token": "/v4BAAEAiQEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "partNumber": "FRAME-1", + "supplier": "Verifier fixture" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:1", + "occurrenceToken": null, + "revision": "239ad886cc874aed5a6eb8a65a0d5dec11899ef3dbb8d0770c9b9510b347d31d", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW3EDlvy79W1+NZCvd+9ECl1QCTkZISGFkBFQAAFG5GiS0ehpZggMBBgoxTKn419S4HC87B7P5X1+LffTbX9NQkALyOzcrCmyBqGtvGEbFjjES29tkE2eLUl2dw4NRatUkuyGtflA8TDptcog+b/lGsHbFFiyAk1NsYY7Cklfx2p1zPL9/gE9KpumxwAAAA==" + }, + "parentPath": "", + "path": "Frame:1" + }, + { + "asPurchased": true, + "bodyCount": 1, + "childCount": 1, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "239ad886cc874aed5a6eb8a65a0d5dec11899ef3dbb8d0770c9b9510b347d31d", + "token": "/v4BAAEAiQEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "partNumber": "FRAME-1", + "supplier": "Verifier fixture" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Frame:2", + "occurrenceToken": null, + "revision": "239ad886cc874aed5a6eb8a65a0d5dec11899ef3dbb8d0770c9b9510b347d31d", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Ouw0CQQxEW9kGLK0/+3FODeT2eU+k0AWVkJMRElIIGQEFELAncjTJaPQ0MzlJooQpTyH16fCX1HQ8XffP1+5zee8e5/vhNglKXBP1hibGgOwZZOAKFuIQ1OpiFllKmy2T7MOyqwi4dgUxDHBeM0RRsRiFeav7t9XYHdfiUEXnFguDemtAmZYRQzQ6bd+/5ziZ28cAAAA=" + }, + "parentPath": "", + "path": "Frame:2" + } + ], + "partCount": 2, + "parts": [ + { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "description": "Verifier root body assembly", + "material": null, + "name": "(Unsaved)", + "occurrencePaths": [ + "" + ], + "partNumber": "2026-10-02-12-36-16-054", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.00027, + "unitVolume": 100.0 + }, + { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "description": "=2+2", + "material": { + "id": "PrismMaterial-018", + "name": "Steel" + }, + "name": "Frame", + "occurrencePaths": [ + "Frame:1", + "Frame:2" + ], + "partNumber": "FRAME-1", + "quantity": 2, + "scope": "component_subtree", + "supplier": "Verifier fixture", + "unitMass": 0.015857, + "unitVolume": 2020.0 + } + ], + "physical": { + "bodyInstances": 7, + "mass": 0.03473799999999999, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5160.0 + }, + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:de85fa0e-2985-49ae-8e7e-ab5b9d1d7d48", + "revision": "239ad886cc874aed5a6eb8a65a0d5dec11899ef3dbb8d0770c9b9510b347d31d" + }, + "totalPurchasingInstances": 3, + "units": { + "mass": "kg", + "volume": "mm3" + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-before-flat-bom available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-assembly-accounting-flat-bom", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "flat-bom-csv-oracle oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "flat-bom CSV rows match typed BOM", + "status": "PASS", + "details": { + "rows": [ + { + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "description": "Verifier root body assembly", + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-36-16-054", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.00027", + "unitVolume": "100.0" + }, + { + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "description": "'=2+2", + "name": "Frame", + "partNumber": "FRAME-1", + "quantity": "2", + "scope": "component_subtree", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "", + "unitMass": "0.015857", + "unitVolume": "2020.0" + } + ], + "expectedCount": 2 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "flat-bom CSV grouped quantities match", + "status": "PASS", + "details": { + "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886": 1, + "ef472b3e-b200-498b-9161-f881ab9baff9": 2 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "flat-bom CSV physical numbers match typed parts", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "flat-bom CSV preserves metadata and supplier provenance", + "status": "PASS", + "details": [ + { + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "description": "Verifier root body assembly", + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-36-16-054", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.00027", + "unitVolume": "100.0" + }, + { + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "description": "'=2+2", + "name": "Frame", + "partNumber": "FRAME-1", + "quantity": "2", + "scope": "component_subtree", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "", + "unitMass": "0.015857", + "unitVolume": "2020.0" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "CSV sanitizes spreadsheet formula metadata", + "status": "PASS", + "details": [ + { + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "description": "Verifier root body assembly", + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-36-16-054", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.00027", + "unitVolume": "100.0" + }, + { + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "description": "'=2+2", + "name": "Frame", + "partNumber": "FRAME-1", + "quantity": "2", + "scope": "component_subtree", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "", + "unitMass": "0.015857", + "unitVolume": "2020.0" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-before-structured-bom available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-assembly-accounting-structured-bom", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "structured-bom-csv-oracle oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "structured-bom CSV rows match typed BOM", + "status": "PASS", + "details": { + "rows": [ + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "3", + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "depth": "0", + "description": "Verifier root body assembly", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-12-36-16-054", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "1", + "childCount": "1", + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "depth": "1", + "description": "'=2+2", + "name": "Frame", + "parentPath": "", + "partNumber": "FRAME-1", + "path": "Frame:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "1", + "childCount": "1", + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "depth": "1", + "description": "'=2+2", + "name": "Frame", + "parentPath": "", + "partNumber": "FRAME-1", + "path": "Frame:2", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "" + } + ], + "expectedCount": 3 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "structured-bom CSV hierarchy matches", + "status": "PASS", + "details": [ + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "3", + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "depth": "0", + "description": "Verifier root body assembly", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-12-36-16-054", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "1", + "childCount": "1", + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "depth": "1", + "description": "'=2+2", + "name": "Frame", + "parentPath": "", + "partNumber": "FRAME-1", + "path": "Frame:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "1", + "childCount": "1", + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "depth": "1", + "description": "'=2+2", + "name": "Frame", + "parentPath": "", + "partNumber": "FRAME-1", + "path": "Frame:2", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "structured-bom CSV preserves metadata and supplier provenance", + "status": "PASS", + "details": [ + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "3", + "componentId": "38dbed7b-3b04-4a7c-a8c4-5bf86d65e886", + "depth": "0", + "description": "Verifier root body assembly", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-12-36-16-054", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "1", + "childCount": "1", + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "depth": "1", + "description": "'=2+2", + "name": "Frame", + "parentPath": "", + "partNumber": "FRAME-1", + "path": "Frame:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "1", + "childCount": "1", + "componentId": "ef472b3e-b200-498b-9161-f881ab9baff9", + "depth": "1", + "description": "'=2+2", + "name": "Frame", + "parentPath": "", + "partNumber": "FRAME-1", + "path": "Frame:2", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "Verifier fixture", + "supplierPartNumber": "" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "csv-sentinel-create oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting-protected-csv available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "csv-sentinel-read oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "BOM export preserves existing destination bytes", + "status": "PASS", + "details": { + "_contribute": "If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.", + "_hint": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_hintDocumentHygiene": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + }, + { + "isModified": true, + "isSaved": false, + "name": "Untitled", + "needsSave": true, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 1, + "openDocumentCount": 2, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "error": "Pass overwrite:true to replace an existing CSV.", + "errorCode": "destination_exists", + "operationId": "cp3-123613-f8a50491-refuse-existing-bom-csv", + "sessionId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3", + "shell": "rust", + "statusVerb": "fusion_get_app_state", + "success": false, + "timeoutSeconds": 60 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "bd904d2c-98c7-4934-80e6-7adb958bb27f", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 5.0, + 2.0 + ] + ], + "centerOfMass": [ + 5.0, + 2.5, + 1.0000000000000002 + ], + "faces": 6, + "mass": 0.00027, + "material": "Aluminum", + "name": "Block", + "volume": 100.0 + } + ], + "description": "Verifier root body assembly", + "material": null, + "name": "", + "partNumber": "2026-10-02-12-36-16-054", + "sketches": [ + "Base rectangle" + ] + }, + { + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.0157, + "material": "Steel", + "name": "Body1", + "volume": 2000.0 + } + ], + "description": "=2+2", + "material": "Steel", + "name": "Frame", + "partNumber": "FRAME-1", + "sketches": [ + "Frame section" + ] + }, + { + "attributes": { + "excludeFromBom": "true" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Independent", + "partNumber": "IND-1", + "sketches": [ + "Frame section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 5.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 2.5 + ], + "faces": 6, + "mass": 0.00015700000000000002, + "material": "Steel", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "description": "", + "material": "Steel", + "name": "Pin", + "partNumber": "2026-10-02-12-36-26-787", + "sketches": [ + "Pin section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 5.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 2.5 + ], + "faces": 6, + "mass": 5.4000000000000005e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "description": "", + "material": "Aluminum", + "name": "Pin (1)", + "partNumber": "2026-10-02-12-36-26-787", + "sketches": [ + "Pin section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 7, + "centerOfMass": [ + 43.25315216765502, + 5.180436409695434, + 9.46197247970522 + ], + "mass": 0.034738, + "volume": 5160.0 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 0.0, + 0.0 + ], + [ + 30.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 25.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.0157, + "material": "Steel", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Frame", + "grounded": false, + "groundedToParent": false, + "path": "Frame:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 25.0, + 0.0 + ], + [ + 22.0, + 27.0, + 5.0 + ] + ], + "centerOfMass": [ + 21.0, + 26.0, + 2.5 + ], + "faces": 6, + "mass": 0.00015700000000000002, + "material": "Steel", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "component": "Pin", + "grounded": false, + "groundedToParent": false, + "path": "Frame:1+Pin:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 25.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 50.0, + 0.0, + 0.0 + ], + [ + 60.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 55.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.0157, + "material": "Steel", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Frame", + "grounded": false, + "groundedToParent": false, + "path": "Frame:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 50.0, + 20.0, + 0.0 + ], + [ + 52.0, + 22.0, + 5.0 + ] + ], + "centerOfMass": [ + 51.0, + 21.0, + 2.5 + ], + "faces": 6, + "mass": 0.00015700000000000002, + "material": "Steel", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "component": "Pin", + "grounded": false, + "groundedToParent": false, + "path": "Frame:2+Pin:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 80.0, + 0.0, + 0.0 + ], + [ + 90.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 85.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Independent", + "grounded": false, + "groundedToParent": false, + "path": "Independent:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 80.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 80.0, + 25.0, + 0.0 + ], + [ + 82.0, + 27.0, + 5.0 + ] + ], + "centerOfMass": [ + 81.0, + 26.0, + 2.5 + ], + "faces": 6, + "mass": 5.4000000000000005e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "component": "Pin (1)", + "grounded": false, + "groundedToParent": false, + "path": "Independent:1+Pin (1):1", + "transform": [ + 1.0, + 0.0, + 0.0, + 80.0, + 0.0, + 1.0, + 0.0, + 25.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d10": "0.0 deg", + "d10_1": "0.0 deg", + "d11": "5.0 mm", + "d11_1": "5.0 mm", + "d12": "0.0 deg", + "d12_1": "0.0 deg", + "d5": "width", + "d6": "height", + "d7": "depth", + "d8": "0.0 deg", + "d9": "20 mm", + "d9_1": "10.0 mm", + "depth": "2.0 mm", + "height": "5.0 mm", + "width": "10.0 mm" + }, + "physical": { + "centerOfMass": [ + 43.253152167655024, + 5.180436409695435, + 9.461972479705222 + ], + "mass": 0.03473799999999999, + "volume": 5159.999999999999 + }, + "rigidGroups": [], + "timelineCount": 18 + } + }, + "after": { + "id": "26854f30-2d8f-420c-8449-d81a0411a183", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier assembly-accounting" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 5.0, + 2.0 + ] + ], + "centerOfMass": [ + 5.0, + 2.5, + 1.0000000000000002 + ], + "faces": 6, + "mass": 0.00027, + "material": "Aluminum", + "name": "Block", + "volume": 100.0 + } + ], + "description": "Verifier root body assembly", + "material": null, + "name": "", + "partNumber": "2026-10-02-12-36-16-054", + "sketches": [ + "Base rectangle" + ] + }, + { + "attributes": { + "asPurchased": "true", + "supplier": "\"Verifier fixture\"" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.0157, + "material": "Steel", + "name": "Body1", + "volume": 2000.0 + } + ], + "description": "=2+2", + "material": "Steel", + "name": "Frame", + "partNumber": "FRAME-1", + "sketches": [ + "Frame section" + ] + }, + { + "attributes": { + "excludeFromBom": "true" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Independent", + "partNumber": "IND-1", + "sketches": [ + "Frame section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 5.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 2.5 + ], + "faces": 6, + "mass": 0.00015700000000000002, + "material": "Steel", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "description": "", + "material": "Steel", + "name": "Pin", + "partNumber": "2026-10-02-12-36-26-787", + "sketches": [ + "Pin section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 5.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 2.5 + ], + "faces": 6, + "mass": 5.4000000000000005e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "description": "", + "material": "Aluminum", + "name": "Pin (1)", + "partNumber": "2026-10-02-12-36-26-787", + "sketches": [ + "Pin section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 7, + "centerOfMass": [ + 43.25315216765502, + 5.180436409695434, + 9.46197247970522 + ], + "mass": 0.034738, + "volume": 5160.0 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 0.0, + 0.0 + ], + [ + 30.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 25.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.0157, + "material": "Steel", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Frame", + "grounded": false, + "groundedToParent": false, + "path": "Frame:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 25.0, + 0.0 + ], + [ + 22.0, + 27.0, + 5.0 + ] + ], + "centerOfMass": [ + 21.0, + 26.0, + 2.5 + ], + "faces": 6, + "mass": 0.00015700000000000002, + "material": "Steel", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "component": "Pin", + "grounded": false, + "groundedToParent": false, + "path": "Frame:1+Pin:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 25.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 50.0, + 0.0, + 0.0 + ], + [ + 60.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 55.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.0157, + "material": "Steel", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Frame", + "grounded": false, + "groundedToParent": false, + "path": "Frame:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 50.0, + 20.0, + 0.0 + ], + [ + 52.0, + 22.0, + 5.0 + ] + ], + "centerOfMass": [ + 51.0, + 21.0, + 2.5 + ], + "faces": 6, + "mass": 0.00015700000000000002, + "material": "Steel", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "component": "Pin", + "grounded": false, + "groundedToParent": false, + "path": "Frame:2+Pin:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 80.0, + 0.0, + 0.0 + ], + [ + 90.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 85.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Independent", + "grounded": false, + "groundedToParent": false, + "path": "Independent:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 80.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 80.0, + 25.0, + 0.0 + ], + [ + 82.0, + 27.0, + 5.0 + ] + ], + "centerOfMass": [ + 81.0, + 26.0, + 2.5 + ], + "faces": 6, + "mass": 5.4000000000000005e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 20.000000000000004 + } + ], + "component": "Pin (1)", + "grounded": false, + "groundedToParent": false, + "path": "Independent:1+Pin (1):1", + "transform": [ + 1.0, + 0.0, + 0.0, + 80.0, + 0.0, + 1.0, + 0.0, + 25.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d10": "0.0 deg", + "d10_1": "0.0 deg", + "d11": "5.0 mm", + "d11_1": "5.0 mm", + "d12": "0.0 deg", + "d12_1": "0.0 deg", + "d5": "width", + "d6": "height", + "d7": "depth", + "d8": "0.0 deg", + "d9": "20 mm", + "d9_1": "10.0 mm", + "depth": "2.0 mm", + "height": "5.0 mm", + "width": "10.0 mm" + }, + "physical": { + "centerOfMass": [ + 43.253152167655024, + 5.180436409695435, + 9.461972479705222 + ], + "mass": 0.03473799999999999, + "volume": 5159.999999999999 + }, + "rigidGroups": [], + "timelineCount": 18 + } + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "assembly-accounting-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "assembly-accounting original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "61bad1c8-8cf4-47ee-8a66-efea45caa35c", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-placement-contexts-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-PlacementSeed-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-component-PlacementSeed available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-PlacementSeed-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-PlacementSeed-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-before-PlacementSeed-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-PlacementSeed-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-after-PlacementSeed-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "PlacementSeed has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "5.0 mm", + "name": "d1", + "unit": "mm", + "value": 5.0 + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-rotated-parent", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "rotated parent creation retains requested world transform", + "status": "PASS", + "details": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 100.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-component-RotatedParent available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-repeat-rotated-parent", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "repeated parent retains distinct rotated placement", + "status": "PASS", + "details": [ + 0.7071067811865475, + 0.7071067811865476, + 0.0, + -50.0, + -0.7071067811865476, + 0.7071067811865475, + 0.0, + 20.000000000000004, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-placement-selection available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-nested-independent-copy", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "nested copy creates an independent definition", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "nested copy composes every existing rotated parent context", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + -0.4999999999999999, + -0.8660254037844387, + 0.0, + 80.0, + 0.8660254037844387, + -0.4999999999999999, + 0.0, + 130.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 0.9659258262890682, + 0.25881904510252074, + 0.0, + 20.710678118654755, + -0.25881904510252074, + 0.9659258262890682, + 0.0, + -22.426406871192846, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + -0.5000000000000002, + -0.8660254037844388, + 0.0, + 79.99999999999999, + 0.8660254037844388, + -0.5000000000000002, + 0.0, + 130.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 0.9659258262890682, + 0.2588190451025209, + 0.0, + 20.71067811865474, + -0.2588190451025209, + 0.9659258262890682, + 0.0, + -22.426406871192857, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-rename-nested-independent", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-component-RotatedParent available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-future-parent-reuse", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-occurrences-PlacedIndependent available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "future parent reuse inherits nested independent-copy placement", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + -0.4999999999999999, + -0.8660254037844387, + 0.0, + 80.0, + 0.8660254037844387, + -0.4999999999999999, + 0.0, + 130.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 0.9659258262890682, + 0.25881904510252074, + 0.0, + 20.710678118654755, + -0.25881904510252074, + 0.9659258262890682, + 0.0, + -22.426406871192846, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.8660254037844387, + -0.49999999999999994, + 0.0, + 280.0, + 0.49999999999999994, + 0.8660254037844387, + 0.0, + 20.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + -0.5000000000000002, + -0.8660254037844388, + 0.0, + 79.99999999999999, + 0.8660254037844388, + -0.5000000000000002, + 0.0, + 130.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 0.9659258262890682, + 0.2588190451025209, + 0.0, + 20.71067811865474, + -0.2588190451025209, + 0.9659258262890682, + 0.0, + -22.426406871192857, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.8660254037844387, + -0.49999999999999994, + 0.0, + 280.0, + 0.49999999999999994, + 0.8660254037844387, + 0.0, + 19.999999999999993, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-placement-selection available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-nested-shared-instance", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "shared insertion composes all existing parent contexts", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + 0.34202014332566877, + -0.9396926207859084, + 0.0, + 95.0, + 0.9396926207859084, + 0.34202014332566877, + 0.0, + 40.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 0.42261826174069955, + 0.9063077870366499, + 0.0, + -53.53553390593274, + -0.9063077870366499, + 0.42261826174069955, + 0.0, + 30.606601717798213, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.9396926207859084, + 0.3420201433256687, + 0.0, + 190.0, + -0.3420201433256687, + 0.9396926207859084, + 0.0, + 5.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + 0.3420201433256685, + -0.9396926207859088, + 0.0, + 95.0, + 0.9396926207859088, + 0.3420201433256685, + 0.0, + 39.99999999999999, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 0.42261826174069944, + 0.90630778703665, + 0.0, + -53.53553390593274, + -0.90630778703665, + 0.42261826174069944, + 0.0, + 30.606601717798213, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.9396926207859084, + 0.34202014332566866, + 0.0, + 190.0, + -0.34202014332566866, + 0.9396926207859084, + 0.0, + 5.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-component-RotatedParent available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-nested-new-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "new component composes all existing parent contexts", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + -0.7071067811865475, + -0.7071067811865476, + 0.0, + 90.0, + 0.7071067811865476, + -0.7071067811865475, + 0.0, + 55.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 1.0, + 0.0, + 0.0, + -39.39339828220179, + 0.0, + 1.0, + 0.0, + 23.535533905932738, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.7071067811865476, + -0.7071067811865475, + 0.0, + 205.0, + 0.7071067811865475, + 0.7071067811865476, + 0.0, + 10.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + -0.7071067811865478, + -0.7071067811865475, + 0.0, + 90.0, + 0.7071067811865475, + -0.7071067811865478, + 0.0, + 55.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 1.0, + 0.0, + 0.0, + -39.39339828220179, + 0.0, + 1.0, + 0.0, + 23.535533905932738, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.7071067811865475, + -0.7071067811865476, + 0.0, + 205.0, + 0.7071067811865476, + 0.7071067811865475, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-component-RotatedParent available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-later-rotated-parent-reuse", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-before-placement-source-edit available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts-placement-source-depth-edit", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-occurrences-PlacedIndependent available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "copied placement persists across later rotated reuse and parameter edit", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + -0.4999999999999999, + -0.8660254037844387, + 0.0, + 80.0, + 0.8660254037844387, + -0.4999999999999999, + 0.0, + 130.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 0.9659258262890682, + 0.25881904510252074, + 0.0, + 20.710678118654755, + -0.25881904510252074, + 0.9659258262890682, + 0.0, + -22.426406871192846, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.8660254037844387, + -0.49999999999999994, + 0.0, + 280.0, + 0.49999999999999994, + 0.8660254037844387, + 0.0, + 20.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:4": [ + 0.7660444431189781, + -0.6427876096865393, + 0.0, + 375.31165668763805, + 0.6427876096865393, + 0.7660444431189781, + 0.0, + -6.411990726401415, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + -0.5000000000000002, + -0.8660254037844388, + 0.0, + 79.99999999999999, + 0.8660254037844388, + -0.5000000000000002, + 0.0, + 130.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 0.9659258262890682, + 0.2588190451025209, + 0.0, + 20.71067811865474, + -0.2588190451025209, + 0.9659258262890682, + 0.0, + -22.426406871192857, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.8660254037844387, + -0.49999999999999994, + 0.0, + 280.0, + 0.49999999999999994, + 0.8660254037844387, + 0.0, + 19.999999999999993, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:4": [ + 0.7660444431189781, + -0.6427876096865393, + 0.0, + 375.3116566876381, + 0.6427876096865393, + 0.7660444431189781, + 0.0, + -6.411990726401422, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-occurrences-PlacementSeed available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "shared placement persists across later rotated reuse and parameter edit", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + 0.34202014332566877, + -0.9396926207859084, + 0.0, + 95.0, + 0.9396926207859084, + 0.34202014332566877, + 0.0, + 40.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 0.42261826174069955, + 0.9063077870366499, + 0.0, + -53.53553390593274, + -0.9063077870366499, + 0.42261826174069955, + 0.0, + 30.606601717798213, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.9396926207859084, + 0.3420201433256687, + 0.0, + 190.0, + -0.3420201433256687, + 0.9396926207859084, + 0.0, + 5.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:4": [ + 0.984807753012208, + 0.17364817766693033, + 0.0, + 289.28368158154325, + -0.17364817766693033, + 0.984807753012208, + 0.0, + -36.812443011608266, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + 0.3420201433256685, + -0.9396926207859088, + 0.0, + 95.0, + 0.9396926207859088, + 0.3420201433256685, + 0.0, + 39.99999999999999, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 0.42261826174069944, + 0.90630778703665, + 0.0, + -53.53553390593274, + -0.90630778703665, + 0.42261826174069944, + 0.0, + 30.606601717798213, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.9396926207859084, + 0.34202014332566866, + 0.0, + 190.0, + -0.34202014332566866, + 0.9396926207859084, + 0.0, + 5.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:4": [ + 0.984807753012208, + 0.17364817766693028, + 0.0, + 289.2836815815433, + -0.17364817766693028, + 0.984807753012208, + 0.0, + -36.81244301160828, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-occurrences-PlacedEmpty available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "new component placement persists across later rotated parent reuse", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + -0.7071067811865475, + -0.7071067811865476, + 0.0, + 90.0, + 0.7071067811865476, + -0.7071067811865475, + 0.0, + 55.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 1.0, + 0.0, + 0.0, + -39.39339828220179, + 0.0, + 1.0, + 0.0, + 23.535533905932738, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.7071067811865476, + -0.7071067811865475, + 0.0, + 205.0, + 0.7071067811865475, + 0.7071067811865476, + 0.0, + 10.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:4": [ + 0.5735764363510462, + -0.8191520442889917, + 0.0, + 303.18755698839175, + 0.8191520442889917, + 0.5735764363510462, + 0.0, + -29.28368158154327, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + -0.7071067811865478, + -0.7071067811865475, + 0.0, + 90.0, + 0.7071067811865475, + -0.7071067811865478, + 0.0, + 55.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 1.0, + 0.0, + 0.0, + -39.39339828220179, + 0.0, + 1.0, + 0.0, + 23.535533905932738, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.7071067811865475, + -0.7071067811865476, + 0.0, + 205.0, + 0.7071067811865476, + 0.7071067811865475, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:4": [ + 0.573576436351046, + -0.8191520442889918, + 0.0, + 303.18755698839175, + 0.8191520442889918, + 0.573576436351046, + 0.0, + -29.28368158154327, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-placement-native-oracle oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "native API independently confirms PlacedIndependent root poses", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + -0.4999999999999999, + -0.8660254037844387, + 0.0, + 80.0, + 0.8660254037844387, + -0.4999999999999999, + 0.0, + 130.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 0.9659258262890682, + 0.25881904510252074, + 0.0, + 20.710678118654755, + -0.25881904510252074, + 0.9659258262890682, + 0.0, + -22.426406871192846, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.8660254037844387, + -0.49999999999999994, + 0.0, + 280.0, + 0.49999999999999994, + 0.8660254037844387, + 0.0, + 20.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:4": [ + 0.7660444431189781, + -0.6427876096865393, + 0.0, + 375.31165668763805, + 0.6427876096865393, + 0.7660444431189781, + 0.0, + -6.411990726401415, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + -0.5000000000000002, + -0.8660254037844388, + 0.0, + 79.99999999999999, + 0.8660254037844388, + -0.5000000000000002, + 0.0, + 130.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 0.9659258262890682, + 0.2588190451025209, + 0.0, + 20.71067811865474, + -0.2588190451025209, + 0.9659258262890682, + 0.0, + -22.426406871192857, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.8660254037844387, + -0.49999999999999994, + 0.0, + 280.0, + 0.49999999999999994, + 0.8660254037844387, + 0.0, + 19.999999999999993, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:4": [ + 0.7660444431189781, + -0.6427876096865393, + 0.0, + 375.3116566876381, + 0.6427876096865393, + 0.7660444431189781, + 0.0, + -6.411990726401422, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "native API independently confirms PlacedEmpty root poses", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + -0.7071067811865475, + -0.7071067811865476, + 0.0, + 90.0, + 0.7071067811865476, + -0.7071067811865475, + 0.0, + 55.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 1.0, + 0.0, + 0.0, + -39.39339828220179, + 0.0, + 1.0, + 0.0, + 23.535533905932738, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.7071067811865476, + -0.7071067811865475, + 0.0, + 205.0, + 0.7071067811865475, + 0.7071067811865476, + 0.0, + 10.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:4": [ + 0.5735764363510462, + -0.8191520442889917, + 0.0, + 303.18755698839175, + 0.8191520442889917, + 0.5735764363510462, + 0.0, + -29.28368158154327, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + -0.7071067811865478, + -0.7071067811865475, + 0.0, + 90.0, + 0.7071067811865475, + -0.7071067811865478, + 0.0, + 55.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 1.0, + 0.0, + 0.0, + -39.39339828220179, + 0.0, + 1.0, + 0.0, + 23.535533905932738, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.7071067811865475, + -0.7071067811865476, + 0.0, + 205.0, + 0.7071067811865476, + 0.7071067811865475, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:4": [ + 0.573576436351046, + -0.8191520442889918, + 0.0, + 303.18755698839175, + 0.8191520442889918, + 0.573576436351046, + 0.0, + -29.28368158154327, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "native API independently confirms PlacementSeed root poses", + "status": "PASS", + "details": { + "expected": { + "RotatedParent:1": [ + 0.34202014332566877, + -0.9396926207859084, + 0.0, + 95.0, + 0.9396926207859084, + 0.34202014332566877, + 0.0, + 40.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:2": [ + 0.42261826174069955, + 0.9063077870366499, + 0.0, + -53.53553390593274, + -0.9063077870366499, + 0.42261826174069955, + 0.0, + 30.606601717798213, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:3": [ + 0.9396926207859084, + 0.3420201433256687, + 0.0, + 190.0, + -0.3420201433256687, + 0.9396926207859084, + 0.0, + 5.0, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ], + "RotatedParent:4": [ + 0.984807753012208, + 0.17364817766693033, + 0.0, + 289.28368158154325, + -0.17364817766693033, + 0.984807753012208, + 0.0, + -36.812443011608266, + 0.0, + 0.0, + 1, + 0, + 0.0, + 0.0, + 0, + 1 + ] + }, + "actual": { + "RotatedParent:1": [ + 0.3420201433256685, + -0.9396926207859088, + 0.0, + 95.0, + 0.9396926207859088, + 0.3420201433256685, + 0.0, + 39.99999999999999, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:2": [ + 0.42261826174069944, + 0.90630778703665, + 0.0, + -53.53553390593274, + -0.90630778703665, + 0.42261826174069944, + 0.0, + 30.606601717798213, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:3": [ + 0.9396926207859084, + 0.34202014332566866, + 0.0, + 190.0, + -0.34202014332566866, + 0.9396926207859084, + 0.0, + 5.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "RotatedParent:4": [ + 0.984807753012208, + 0.17364817766693028, + 0.0, + 289.2836815815433, + -0.17364817766693028, + 0.984807753012208, + 0.0, + -36.81244301160828, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "nested copies retain geometry independence through future reuse", + "status": "PASS", + "details": { + "volumes": { + "": 0, + "PlacedEmpty": 0, + "PlacedIndependent": 60.0, + "PlacementSeed": 84.0, + "RotatedParent": 0 + }, + "physical": { + "centerOfMass": [ + 138.34675748409967, + 17.419200013419893, + 3.1363636363636367 + ], + "mass": 0.0017819999999999995, + "volume": 660.0 + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "ee3a8a2f-cd84-41e7-ba21-28d801a88276", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier placement-contexts" + }, + "bodies": [], + "description": "", + "material": null, + "name": "", + "partNumber": "2026-10-02-12-38-00-234", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": null, + "name": "PlacedEmpty", + "partNumber": "2026-10-02-12-38-17-109", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 3.0, + 4.0, + 5.0 + ] + ], + "centerOfMass": [ + 1.5, + 2.0, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "PlacedIndependent", + "partNumber": "2026-10-02-12-38-10-280", + "sketches": [ + "PlacementSeed section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 3.0, + 4.0, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 1.5, + 2.0, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "PlacementSeed", + "partNumber": "2026-10-02-12-38-01-321", + "sketches": [ + "PlacementSeed section" + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": null, + "name": "RotatedParent", + "partNumber": "2026-10-02-12-38-06-993", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 9, + "centerOfMass": [ + 138.34675748409967, + 17.419200013419893, + 3.136363636363637 + ], + "mass": 0.0017819999999999995, + "volume": 660.0 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 0.0, + 0.0 + ], + [ + 23.0, + 4.0, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 21.5, + 2.0, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "PlacementSeed:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "RotatedParent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 100.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "PlacedEmpty", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:1+PlacedEmpty:1", + "transform": [ + -0.7071067811865478, + -0.7071067811865475, + 0.0, + 90.0, + 0.7071067811865475, + -0.7071067811865478, + 0.0, + 55.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 75.03589838486222, + 128.0, + 0.0 + ], + [ + 79.99999999999999, + 132.59807621135332, + 5.0 + ] + ], + "centerOfMass": [ + 77.51794919243109, + 130.29903810567666, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "component": "PlacedIndependent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:1+PlacedIndependent:1", + "transform": [ + -0.5000000000000002, + -0.8660254037844388, + 0.0, + 79.99999999999999, + 0.8660254037844388, + -0.5000000000000002, + 0.0, + 130.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 91.24122951685638, + 39.99999999999999, + 0.0 + ], + [ + 96.02606042997704, + 44.1871584356604, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 93.63364497341672, + 42.0935792178302, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:1+PlacementSeed:2", + "transform": [ + 0.3420201433256685, + -0.9396926207859088, + 0.0, + 95.0, + 0.9396926207859088, + 0.3420201433256685, + 0.0, + 39.99999999999999, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "RotatedParent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:2", + "transform": [ + 0.7071067811865475, + 0.7071067811865476, + 0.0, + -50.0, + -0.7071067811865476, + 0.7071067811865475, + 0.0, + 20.000000000000004, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "PlacedEmpty", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:2+PlacedEmpty:1", + "transform": [ + 1.0, + 0.0, + 0.0, + -39.39339828220179, + 0.0, + 1.0, + 0.0, + 23.535533905932738, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 20.71067811865474, + -23.20286400650042, + 0.0 + ], + [ + 24.64373177793203, + -18.562703566036586, + 5.0 + ] + ], + "centerOfMass": [ + 22.677204948293387, + -20.8827837862685, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "component": "PlacedIndependent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:2+PlacedIndependent:1", + "transform": [ + 0.9659258262890682, + 0.2588190451025209, + 0.0, + 20.71067811865474, + -0.2588190451025209, + 0.9659258262890682, + 0.0, + -22.426406871192857, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -53.53553390593274, + 27.887678356688262, + 0.0 + ], + [ + -48.64244797256404, + 32.297074764761014, + 7.000000000000001 + ] + ], + "centerOfMass": [ + -51.08899093924839, + 30.09237656072464, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:2+PlacementSeed:2", + "transform": [ + 0.42261826174069944, + 0.90630778703665, + 0.0, + -53.53553390593274, + -0.90630778703665, + 0.42261826174069944, + 0.0, + 30.606601717798213, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "RotatedParent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:3", + "transform": [ + 1.0, + 0.0, + 0.0, + 200.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "PlacedEmpty", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:3+PlacedEmpty:1", + "transform": [ + 0.7071067811865475, + -0.7071067811865476, + 0.0, + 205.0, + 0.7071067811865476, + 0.7071067811865475, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 278.0, + 19.999999999999993, + 0.0 + ], + [ + 282.5980762113533, + 24.96410161513775, + 5.0 + ] + ], + "centerOfMass": [ + 280.2990381056767, + 22.482050807568868, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "component": "PlacedIndependent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:3+PlacedIndependent:1", + "transform": [ + 0.8660254037844387, + -0.49999999999999994, + 0.0, + 280.0, + 0.49999999999999994, + 0.8660254037844387, + 0.0, + 19.999999999999993, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 190.0, + 3.973939570022994, + 0.0 + ], + [ + 194.1871584356604, + 8.758770483143634, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 192.0935792178302, + 6.366355026583315, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:3+PlacementSeed:2", + "transform": [ + 0.9396926207859084, + 0.34202014332566866, + 0.0, + 190.0, + -0.34202014332566866, + 0.9396926207859084, + 0.0, + 5.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "RotatedParent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:4", + "transform": [ + 0.984807753012208, + -0.17364817766693033, + 0.0, + 300.0, + 0.17364817766693033, + 0.984807753012208, + 0.0, + -40.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "PlacedEmpty", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:4+PlacedEmpty:1", + "transform": [ + 0.573576436351046, + -0.8191520442889918, + 0.0, + 303.18755698839175, + 0.8191520442889918, + 0.573576436351046, + 0.0, + -29.28368158154327, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 372.7405062488919, + -6.411990726401422, + 0.0 + ], + [ + 377.60979001699496, + -1.4194501248658913, + 5.0 + ] + ], + "centerOfMass": [ + 375.1751481329434, + -3.915720425633656, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "component": "PlacedIndependent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:4+PlacedIndependent:1", + "transform": [ + 0.7660444431189781, + -0.6427876096865393, + 0.0, + 375.3116566876381, + 0.6427876096865393, + 0.7660444431189781, + 0.0, + -6.411990726401422, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 289.2836815815433, + -37.333387544609074, + 0.0 + ], + [ + 292.9326975512476, + -32.87321199955945, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 291.1081895663954, + -35.10329977208426, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:4+PlacementSeed:2", + "transform": [ + 0.984807753012208, + 0.17364817766693028, + 0.0, + 289.2836815815433, + -0.17364817766693028, + 0.984807753012208, + 0.0, + -36.81244301160828, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "7 mm", + "d1_1": "5.0 mm", + "d2": "0.0 deg", + "d2_1": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 138.34675748409967, + 17.419200013419893, + 3.1363636363636367 + ], + "mass": 0.0017819999999999995, + "volume": 660.0 + }, + "rigidGroups": [], + "timelineCount": 14 + } + }, + "after": { + "id": "0278602c-6a43-4e14-b750-77262457819f", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier placement-contexts" + }, + "bodies": [], + "description": "", + "material": null, + "name": "", + "partNumber": "2026-10-02-12-38-00-234", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": null, + "name": "PlacedEmpty", + "partNumber": "2026-10-02-12-38-17-109", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 3.0, + 4.0, + 5.0 + ] + ], + "centerOfMass": [ + 1.5, + 2.0, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "PlacedIndependent", + "partNumber": "2026-10-02-12-38-10-280", + "sketches": [ + "PlacementSeed section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 3.0, + 4.0, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 1.5, + 2.0, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "PlacementSeed", + "partNumber": "2026-10-02-12-38-01-321", + "sketches": [ + "PlacementSeed section" + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": null, + "name": "RotatedParent", + "partNumber": "2026-10-02-12-38-06-993", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 9, + "centerOfMass": [ + 138.34675748409967, + 17.419200013419893, + 3.136363636363637 + ], + "mass": 0.0017819999999999995, + "volume": 660.0 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 0.0, + 0.0 + ], + [ + 23.0, + 4.0, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 21.5, + 2.0, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "PlacementSeed:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "RotatedParent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 100.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "PlacedEmpty", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:1+PlacedEmpty:1", + "transform": [ + -0.7071067811865478, + -0.7071067811865475, + 0.0, + 90.0, + 0.7071067811865475, + -0.7071067811865478, + 0.0, + 55.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 75.03589838486222, + 128.0, + 0.0 + ], + [ + 79.99999999999999, + 132.59807621135332, + 5.0 + ] + ], + "centerOfMass": [ + 77.51794919243109, + 130.29903810567666, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "component": "PlacedIndependent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:1+PlacedIndependent:1", + "transform": [ + -0.5000000000000002, + -0.8660254037844388, + 0.0, + 79.99999999999999, + 0.8660254037844388, + -0.5000000000000002, + 0.0, + 130.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 91.24122951685638, + 39.99999999999999, + 0.0 + ], + [ + 96.02606042997704, + 44.1871584356604, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 93.63364497341672, + 42.0935792178302, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:1+PlacementSeed:2", + "transform": [ + 0.3420201433256685, + -0.9396926207859088, + 0.0, + 95.0, + 0.9396926207859088, + 0.3420201433256685, + 0.0, + 39.99999999999999, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "RotatedParent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:2", + "transform": [ + 0.7071067811865475, + 0.7071067811865476, + 0.0, + -50.0, + -0.7071067811865476, + 0.7071067811865475, + 0.0, + 20.000000000000004, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "PlacedEmpty", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:2+PlacedEmpty:1", + "transform": [ + 1.0, + 0.0, + 0.0, + -39.39339828220179, + 0.0, + 1.0, + 0.0, + 23.535533905932738, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 20.71067811865474, + -23.20286400650042, + 0.0 + ], + [ + 24.64373177793203, + -18.562703566036586, + 5.0 + ] + ], + "centerOfMass": [ + 22.677204948293387, + -20.8827837862685, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "component": "PlacedIndependent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:2+PlacedIndependent:1", + "transform": [ + 0.9659258262890682, + 0.2588190451025209, + 0.0, + 20.71067811865474, + -0.2588190451025209, + 0.9659258262890682, + 0.0, + -22.426406871192857, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -53.53553390593274, + 27.887678356688262, + 0.0 + ], + [ + -48.64244797256404, + 32.297074764761014, + 7.000000000000001 + ] + ], + "centerOfMass": [ + -51.08899093924839, + 30.09237656072464, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:2+PlacementSeed:2", + "transform": [ + 0.42261826174069944, + 0.90630778703665, + 0.0, + -53.53553390593274, + -0.90630778703665, + 0.42261826174069944, + 0.0, + 30.606601717798213, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "RotatedParent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:3", + "transform": [ + 1.0, + 0.0, + 0.0, + 200.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "PlacedEmpty", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:3+PlacedEmpty:1", + "transform": [ + 0.7071067811865475, + -0.7071067811865476, + 0.0, + 205.0, + 0.7071067811865476, + 0.7071067811865475, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 278.0, + 19.999999999999993, + 0.0 + ], + [ + 282.5980762113533, + 24.96410161513775, + 5.0 + ] + ], + "centerOfMass": [ + 280.2990381056767, + 22.482050807568868, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "component": "PlacedIndependent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:3+PlacedIndependent:1", + "transform": [ + 0.8660254037844387, + -0.49999999999999994, + 0.0, + 280.0, + 0.49999999999999994, + 0.8660254037844387, + 0.0, + 19.999999999999993, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 190.0, + 3.973939570022994, + 0.0 + ], + [ + 194.1871584356604, + 8.758770483143634, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 192.0935792178302, + 6.366355026583315, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:3+PlacementSeed:2", + "transform": [ + 0.9396926207859084, + 0.34202014332566866, + 0.0, + 190.0, + -0.34202014332566866, + 0.9396926207859084, + 0.0, + 5.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "RotatedParent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:4", + "transform": [ + 0.984807753012208, + -0.17364817766693033, + 0.0, + 300.0, + 0.17364817766693033, + 0.984807753012208, + 0.0, + -40.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "PlacedEmpty", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:4+PlacedEmpty:1", + "transform": [ + 0.573576436351046, + -0.8191520442889918, + 0.0, + 303.18755698839175, + 0.8191520442889918, + 0.573576436351046, + 0.0, + -29.28368158154327, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 372.7405062488919, + -6.411990726401422, + 0.0 + ], + [ + 377.60979001699496, + -1.4194501248658913, + 5.0 + ] + ], + "centerOfMass": [ + 375.1751481329434, + -3.915720425633656, + 2.5 + ], + "faces": 6, + "mass": 0.00016199999999999998, + "material": "Aluminum", + "name": "Body1", + "volume": 60.0 + } + ], + "component": "PlacedIndependent", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:4+PlacedIndependent:1", + "transform": [ + 0.7660444431189781, + -0.6427876096865393, + 0.0, + 375.3116566876381, + 0.6427876096865393, + 0.7660444431189781, + 0.0, + -6.411990726401422, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 289.2836815815433, + -37.333387544609074, + 0.0 + ], + [ + 292.9326975512476, + -32.87321199955945, + 7.000000000000001 + ] + ], + "centerOfMass": [ + 291.1081895663954, + -35.10329977208426, + 3.5000000000000004 + ], + "faces": 6, + "mass": 0.0002268, + "material": "Aluminum", + "name": "Body1", + "volume": 84.0 + } + ], + "component": "PlacementSeed", + "grounded": false, + "groundedToParent": false, + "path": "RotatedParent:4+PlacementSeed:2", + "transform": [ + 0.984807753012208, + 0.17364817766693028, + 0.0, + 289.2836815815433, + -0.17364817766693028, + 0.984807753012208, + 0.0, + -36.81244301160828, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "7 mm", + "d1_1": "5.0 mm", + "d2": "0.0 deg", + "d2_1": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 138.34675748409967, + 17.419200013419893, + 3.1363636363636367 + ], + "mass": 0.0017819999999999995, + "volume": 660.0 + }, + "rigidGroups": [], + "timelineCount": 14 + } + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "placement-contexts-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "placement-contexts original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "61bad1c8-8cf4-47ee-8a66-efea45caa35c", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-supplier-mcmaster-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-supplier-preflight available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster-supplier-wrong-checksum-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster-supplier-wrong-checksum-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-wrong-checksum safely refused without model changes", + "status": "PASS", + "details": { + "error": "Downloaded CAD does not match the expected SHA-256.", + "errorCode": "source_hash_mismatch", + "causeCode": null, + "recovery": null, + "unchanged": true + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-camera-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster-before-supplier-import available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster-real-mcmaster-step-import", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-camera-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier import preserves camera", + "status": "PASS", + "details": { + "before": { + "extent": 17.744145180927614, + "eye": [ + 25.611467491870897, + -25.611467491870897, + 25.611467491870897 + ], + "target": [ + 0.0, + 0.0, + 0.0 + ], + "up": [ + 0.0, + 0.0, + 1.0 + ] + }, + "after": { + "extent": 17.744145180927614, + "eye": [ + 25.611467491870897, + -25.611467491870897, + 25.611467491870897 + ], + "target": [ + 0.0, + 0.0, + 0.0 + ], + "up": [ + 0.0, + 0.0, + 1.0 + ] + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier import records verified source hash", + "status": "PASS", + "details": { + "filename": "C:\\Users\\Public\\adom-crate\\_dl_archive\\3597N17_Torx Flat Head Screws for Wood.STEP", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a" + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-imported-supplier oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "genuine supplier STEP imports real positive-volume geometry", + "status": "PASS", + "details": { + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "mass": 0.0008925488471013183, + "volume": 330.57364707456236 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-supplier-topology available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster-supplier-body-topology readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier degenerate edge has honest public geometry readback", + "status": "PASS", + "details": [ + { + "curve": { + "isDegenerate": true, + "type": "degenerate", + "vertices": [ + [ + 15.875, + 0.0, + 0.0 + ], + [ + 15.875, + 0.0, + 0.0 + ] + ] + }, + "length": 0.0, + "ref": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::BRepEdge", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8c4025479c8b56c7c4763f5ebf37a58d3f8cdbf1c7c864c3c02f58741d583cd4", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/42NsQ0CMQxFaSnYwQtYchLfJSmoEBQMQItyFwfRnRATsAW7UNOzAg0lI0ASQEJUxJb88/3kT6BBgWnBpxDFNoSObUL2NqCjqNF7zbG3PlndAWW28FSUdlkp4OK0MJwv4TqeTQ/L4+3+OE0yocvdTnF0Vhg7mwyy8RGDkYDRZ1eo0b2kyuYbo59X8whqHIMBxQbKyJW7qWs0xBWQuJH1TvrtIOsY9gHm4ADVuxUs8peK1LB6bb68V1BTT3/qL+oJUQzwhUABAAA=" + } + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "imported grouped feature has explicit unavailable-index readback", + "status": "PASS", + "details": [ + { + "componentFeatureOrder": 0, + "index": null, + "indexUnavailable": "native_timeline_position_unavailable", + "name": "Base Feature1", + "ref": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::BaseFeature", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8c4025479c8b56c7c4763f5ebf37a58d3f8cdbf1c7c864c3c02f58741d583cd4", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQsGxi4mPOJ1tm7xmPn//fw8vUIWRgrGZQpKhSYqFeaqJbpJ5mrGuibFlim6icWqiboolUDTVwNQoOTUNrBZoBgMaANtnoAC2DmS9sYkRAH5AFWyIAAAA" + }, + "suppressed": false, + "type": "adsk::fusion::BaseFeature" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster-component-McMaster 3597N17 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier metadata persists on wrapper component", + "status": "PASS", + "details": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "bodyCount": 0, + "description": "Previously downloaded genuine McMaster CAD fixture", + "id": "117f511d-8495-4b18-827c-314a19a3a843", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "ref": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8c4025479c8b56c7c4763f5ebf37a58d3f8cdbf1c7c864c3c02f58741d583cd4", + "token": "/v4BAAEAzgAAAAAAAAAAAAAA" + }, + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sketchCount": 0, + "sourceFile": "C:\\Users\\Public\\adom-crate\\_dl_archive\\3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-supplier-repeated-fastener", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-supplier-bom available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster supplier-bom readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier BOM counts repeated purchased fastener", + "status": "PASS", + "details": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "description": "Previously downloaded genuine McMaster CAD fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "McMaster 3597N17", + "occurrencePaths": [ + "McMaster 3597N17:1", + "McMaster 3597N17:2" + ], + "partNumber": "3597N17", + "quantity": 2, + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:\\Users\\Public\\adom-crate\\_dl_archive\\3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-supplier-exploded available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster supplier-exploded-bom readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier BOM declares high calculation accuracy", + "status": "PASS", + "details": { + "collapsed": "high", + "exploded": "high" + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier purchasing policy preserves total physical geometry", + "status": "PASS", + "details": { + "collapsed": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "78edfb77-f6a9-427a-a9c7-4321f1cf8f9a", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "rootComponentId": "78edfb77-f6a9-427a-a9c7-4321f1cf8f9a", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Verifier supplier-mcmaster" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-38-33-754" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": true, + "bodyCount": 0, + "childCount": 1, + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAEAzgAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "description": "Previously downloaded genuine McMaster CAD fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:\\Users\\Public\\adom-crate\\_dl_archive\\3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "McMaster 3597N17:1", + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OsQ1CMQxEawp28AKW4tixnYKKji3yk5+aGdiCXajpWYGGkhHAX/TYxZ1Op2cnEMhAkGIpezj6JQrn+6M9d8fD5XR9vT+3fTQysEKtFlM6FqYFxY1xkWFYZHro1Lm2oGzNzqPJmEiSO4pVwboIYynmSQaH9P+3Zhq9DDLM1oLQbcW6smJzTUrq6py3379gaHJzxwAAAA==" + }, + "parentPath": "", + "path": "McMaster 3597N17:1" + }, + { + "asPurchased": true, + "bodyCount": 0, + "childCount": 1, + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAEAzgAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "description": "Previously downloaded genuine McMaster CAD fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:\\Users\\Public\\adom-crate\\_dl_archive\\3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "McMaster 3597N17:2", + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OsRFCMQiGawt3YAHuAiGEV1i9zi3yElI7g1u4i7W9K9hYOoLi2ftT8B/3AX8CAQaCFEVs4eg3UTjd7u2xWw/n4+X5el/3QTBkhWWpodKxZNpQrGbcZFQsMi361OktrgRpLXFSL+ikOUgytOGx2GmKG9uQ8f/XTKOXQRW5to7Sq+PiWbGZJiU1tczf7B9HHe/WxwAAAA==" + }, + "parentPath": "", + "path": "McMaster 3597N17:2" + } + ], + "partCount": 1, + "parts": [ + { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "description": "Previously downloaded genuine McMaster CAD fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "McMaster 3597N17", + "occurrencePaths": [ + "McMaster 3597N17:1", + "McMaster 3597N17:2" + ], + "partNumber": "3597N17", + "quantity": 2, + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:\\Users\\Public\\adom-crate\\_dl_archive\\3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + } + ], + "physical": { + "bodyInstances": 2, + "mass": 0.0017850976942026366, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 661.1472941491247 + }, + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb" + }, + "totalPurchasingInstances": 2, + "units": { + "mass": "kg", + "volume": "mm3" + } + }, + "exploded": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "78edfb77-f6a9-427a-a9c7-4321f1cf8f9a", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "rootComponentId": "78edfb77-f6a9-427a-a9c7-4321f1cf8f9a", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Verifier supplier-mcmaster" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "2026-10-02-12-38-33-754" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 1, + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAEAzgAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "description": "Previously downloaded genuine McMaster CAD fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:\\Users\\Public\\adom-crate\\_dl_archive\\3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "McMaster 3597N17:1", + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OsQ1CMQxEawp28AKW4tixnYKKji3yk5+aGdiCXajpWYGGkhHAX/TYxZ1Op2cnEMhAkGIpezj6JQrn+6M9d8fD5XR9vT+3fTQysEKtFlM6FqYFxY1xkWFYZHro1Lm2oGzNzqPJmEiSO4pVwboIYynmSQaH9P+3Zhq9DDLM1oLQbcW6smJzTUrq6py3379gaHJzxwAAAA==" + }, + "parentPath": "", + "path": "McMaster 3597N17:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "10704ca7-c5fc-4f75-9432-71a458407dee", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAEADQEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "3597N17_Torx Flat Head Screws for Wood", + "partNumber": "3597N17_Torx Flat Head Screws for Wood" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "McMaster 3597N17:1+3597N17_Torx Flat Head Screws for Wood:1", + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Psa0CMAxEawp2yAKWktiO44KKji0SJ6mZ4W/BLtT0rEBDyQjgD9TYxVmnp9M5Bgo5pBB9U65+pY9TwvFybbfNfvd3ON0fz/PWiRywBFXxYQPG1IGqIHQaAkyruq6yZvuShqPRWJAoG5AogXZCYJYaaaCLvTmcVFoXiFwiEHqimk3IPQlWbRId+tmpJxpVJkGXhZ6gAxrOBkPdnZGzzfX/4wsPZNDU7wAAAA==" + }, + "parentPath": "McMaster 3597N17:1", + "path": "McMaster 3597N17:1+3597N17_Torx Flat Head Screws for Wood:1" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 1, + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAEAzgAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "description": "Previously downloaded genuine McMaster CAD fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:\\Users\\Public\\adom-crate\\_dl_archive\\3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "McMaster 3597N17:2", + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OsRFCMQiGawt3YAHuAiGEV1i9zi3yElI7g1u4i7W9K9hYOoLi2ftT8B/3AX8CAQaCFEVs4eg3UTjd7u2xWw/n4+X5el/3QTBkhWWpodKxZNpQrGbcZFQsMi361OktrgRpLXFSL+ikOUgytOGx2GmKG9uQ8f/XTKOXQRW5to7Sq+PiWbGZJiU1tczf7B9HHe/WxwAAAA==" + }, + "parentPath": "", + "path": "McMaster 3597N17:2" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "10704ca7-c5fc-4f75-9432-71a458407dee", + "componentRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAEADQEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "3597N17_Torx Flat Head Screws for Wood", + "partNumber": "3597N17_Torx Flat Head Screws for Wood" + }, + "occurrenceRef": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "McMaster 3597N17:2+3597N17_Torx Flat Head Screws for Wood:1", + "occurrenceToken": null, + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PvRECMAiFawt3yALcQSAJKazs3CI/pHYGt3AXa3tXsLF0BEXthQLu3ccDMEiIgQJ6UlTv6KfkcLze2n2z350O58fzddk6EQPnUGvxSAMSUwfRwtBlFkiy1OvKy9qP1IYRsyUwyuwkKeg0Hxy0xDTqlPl1ZJPcegFMGUHYHesYBrFTYa2toEN/b+okU4sJ9LJ8E9cJja3BrK4apjhsfX58A4Zof93vAAAA" + }, + "parentPath": "McMaster 3597N17:2", + "path": "McMaster 3597N17:2+3597N17_Torx Flat Head Screws for Wood:1" + } + ], + "partCount": 1, + "parts": [ + { + "attributes": {}, + "componentId": "10704ca7-c5fc-4f75-9432-71a458407dee", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "3597N17_Torx Flat Head Screws for Wood", + "occurrencePaths": [ + "McMaster 3597N17:1+3597N17_Torx Flat Head Screws for Wood:1", + "McMaster 3597N17:2+3597N17_Torx Flat Head Screws for Wood:1" + ], + "partNumber": "3597N17_Torx Flat Head Screws for Wood", + "quantity": 2, + "scope": "direct_component_bodies", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + } + ], + "physical": { + "bodyInstances": 2, + "mass": 0.0017850976942026366, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 661.1472941491247 + }, + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb" + }, + "totalPurchasingInstances": 2, + "units": { + "mass": "kg", + "volume": "mm3" + } + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-before-supplier-flat available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster-supplier-mcmaster-supplier-flat", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-flat-csv-oracle oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-flat CSV rows match typed BOM", + "status": "PASS", + "details": { + "rows": [ + { + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "description": "Previously downloaded genuine McMaster CAD fixture", + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "quantity": "2", + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": "0.0008925488471013183", + "unitVolume": "330.57364707456236" + } + ], + "expectedCount": 1 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-flat CSV grouped quantities match", + "status": "PASS", + "details": { + "117f511d-8495-4b18-827c-314a19a3a843": 2 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-flat CSV physical numbers match typed parts", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-flat CSV preserves metadata and supplier provenance", + "status": "PASS", + "details": [ + { + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "description": "Previously downloaded genuine McMaster CAD fixture", + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "quantity": "2", + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": "0.0008925488471013183", + "unitVolume": "330.57364707456236" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-before-supplier-structured available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster-supplier-mcmaster-supplier-structured", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-structured-csv-oracle oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-structured CSV rows match typed BOM", + "status": "PASS", + "details": { + "rows": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "2", + "componentId": "78edfb77-f6a9-427a-a9c7-4321f1cf8f9a", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-12-38-33-754", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "depth": "1", + "description": "Previously downloaded genuine McMaster CAD fixture", + "name": "McMaster 3597N17", + "parentPath": "", + "partNumber": "3597N17", + "path": "McMaster 3597N17:1", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "depth": "1", + "description": "Previously downloaded genuine McMaster CAD fixture", + "name": "McMaster 3597N17", + "parentPath": "", + "partNumber": "3597N17", + "path": "McMaster 3597N17:2", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + } + ], + "expectedCount": 3 + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-structured CSV hierarchy matches", + "status": "PASS", + "details": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "2", + "componentId": "78edfb77-f6a9-427a-a9c7-4321f1cf8f9a", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-12-38-33-754", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "depth": "1", + "description": "Previously downloaded genuine McMaster CAD fixture", + "name": "McMaster 3597N17", + "parentPath": "", + "partNumber": "3597N17", + "path": "McMaster 3597N17:1", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "depth": "1", + "description": "Previously downloaded genuine McMaster CAD fixture", + "name": "McMaster 3597N17", + "parentPath": "", + "partNumber": "3597N17", + "path": "McMaster 3597N17:2", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-structured CSV preserves metadata and supplier provenance", + "status": "PASS", + "details": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "2", + "componentId": "78edfb77-f6a9-427a-a9c7-4321f1cf8f9a", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-12-38-33-754", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "depth": "1", + "description": "Previously downloaded genuine McMaster CAD fixture", + "name": "McMaster 3597N17", + "parentPath": "", + "partNumber": "3597N17", + "path": "McMaster 3597N17:1", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "117f511d-8495-4b18-827c-314a19a3a843", + "depth": "1", + "description": "Previously downloaded genuine McMaster CAD fixture", + "name": "McMaster 3597N17", + "parentPath": "", + "partNumber": "3597N17", + "path": "McMaster 3597N17:2", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-source-unchanged oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier source file remains byte-identical", + "status": "PASS", + "details": { + "bytes": 717570, + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a" + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-mcmaster-discovery available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster mcmaster-discovery readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "native McMaster picker command is discoverable", + "status": "PASS", + "details": { + "available": true, + "commandId": "InsertMcMasterCarrComponentCommand", + "designIntent": "2", + "downloadedCadAlternative": "cad_import with local STEP/SAT and supplier provenance", + "name": "Insert McMaster-Carr Component", + "requirements": [ + "Hybrid design", + "online supplier access", + "interactive selection and download" + ], + "target": { + "documentId": "f5abc298-1c5b-4b77-bd1f-9c0f828745f3:4fa3a957-9893-4bdd-bee1-da92860b2ca3", + "revision": "74fdbd2678dc856a49b07f83211f286b4dc6d141dc4ddd60eb28b7b37bf0a8bb" + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "44ca5397-cf20-4107-b5e8-e163695e809d", + "semantic": { + "components": [ + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + -15.875, + -4.216399999999999, + -4.216399999999999 + ], + [ + 15.875000000000057, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "description": "", + "material": "Aluminum", + "name": "3597N17_Torx Flat Head Screws for Wood", + "partNumber": "3597N17_Torx Flat Head Screws for Wood", + "sketches": [] + }, + { + "attributes": { + "requestedName": "Verifier supplier-mcmaster" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-38-33-754", + "sketches": [] + }, + { + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "bodies": [], + "description": "Previously downloaded genuine McMaster CAD fixture", + "material": "Aluminum", + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 8.759111868513513, + 0.0007026916216773757, + -0.000101096362255465 + ], + "mass": 0.0017850976942026366, + "volume": 661.1472941491247 + }, + "joints": [], + "occurrences": [ + { + "bodies": [], + "component": "McMaster 3597N17", + "grounded": false, + "groundedToParent": false, + "path": "McMaster 3597N17:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -15.875, + -4.216399999999999, + -4.216399999999999 + ], + [ + 15.875000000000057, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "component": "3597N17_Torx Flat Head Screws for Wood", + "grounded": false, + "groundedToParent": false, + "path": "McMaster 3597N17:1+3597N17_Torx Flat Head Screws for Wood:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "McMaster 3597N17", + "grounded": false, + "groundedToParent": false, + "path": "McMaster 3597N17:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 25.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.125, + -4.216399999999999, + -4.216399999999999 + ], + [ + 40.87500000000006, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + 21.25911186851351, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "component": "3597N17_Torx Flat Head Screws for Wood", + "grounded": false, + "groundedToParent": false, + "path": "McMaster 3597N17:2+3597N17_Torx Flat Head Screws for Wood:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 25.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": {}, + "physical": { + "centerOfMass": [ + 8.75911186851351, + 0.0007026916216773757, + -0.000101096362255465 + ], + "mass": 0.0017850976942026366, + "volume": 661.1472941491247 + }, + "rigidGroups": [], + "timelineCount": 3 + } + }, + "after": { + "id": "e0723b97-c99f-4ebf-9986-75706bafe869", + "semantic": { + "components": [ + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + -15.875, + -4.216399999999999, + -4.216399999999999 + ], + [ + 15.875000000000057, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "description": "", + "material": "Aluminum", + "name": "3597N17_Torx Flat Head Screws for Wood", + "partNumber": "3597N17_Torx Flat Head Screws for Wood", + "sketches": [] + }, + { + "attributes": { + "requestedName": "Verifier supplier-mcmaster" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-38-33-754", + "sketches": [] + }, + { + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "bodies": [], + "description": "Previously downloaded genuine McMaster CAD fixture", + "material": "Aluminum", + "name": "McMaster 3597N17", + "partNumber": "3597N17", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 8.759111868513513, + 0.0007026916216773757, + -0.000101096362255465 + ], + "mass": 0.0017850976942026366, + "volume": 661.1472941491247 + }, + "joints": [], + "occurrences": [ + { + "bodies": [], + "component": "McMaster 3597N17", + "grounded": false, + "groundedToParent": false, + "path": "McMaster 3597N17:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -15.875, + -4.216399999999999, + -4.216399999999999 + ], + [ + 15.875000000000057, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "component": "3597N17_Torx Flat Head Screws for Wood", + "grounded": false, + "groundedToParent": false, + "path": "McMaster 3597N17:1+3597N17_Torx Flat Head Screws for Wood:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "McMaster 3597N17", + "grounded": false, + "groundedToParent": false, + "path": "McMaster 3597N17:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 25.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.125, + -4.216399999999999, + -4.216399999999999 + ], + [ + 40.87500000000006, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + 21.25911186851351, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "component": "3597N17_Torx Flat Head Screws for Wood", + "grounded": false, + "groundedToParent": false, + "path": "McMaster 3597N17:2+3597N17_Torx Flat Head Screws for Wood:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 25.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": {}, + "physical": { + "centerOfMass": [ + 8.75911186851351, + 0.0007026916216773757, + -0.000101096362255465 + ], + "mass": 0.0017850976942026366, + "volume": 661.1472941491247 + }, + "rigidGroups": [], + "timelineCount": 3 + } + } + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "supplier-mcmaster-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "supplier-mcmaster original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "61bad1c8-8cf4-47ee-8a66-efea45caa35c", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "final-documents oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-123613-f8a50491", + "category": "availability" + }, + { + "case": "final original documents unchanged", + "status": "PASS", + "details": [ + { + "id": "61bad1c8-8cf4-47ee-8a66-efea45caa35c", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "sourceRun": "cp3-123613-f8a50491", + "category": "behavior" + }, + { + "case": "deployed runtime matches requested version", + "status": "PASS", + "details": { + "ready": true, + "bridgeVersion": "1.12.0-dev.3", + "addinVersion": "1.12.0-dev.3", + "addinStale": false + }, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "capabilities publish current session", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "capabilities enumerate required operations", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "baseline-documents oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker-native-mcmaster-picker-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-discovery available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker discovery readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker-checkpoint-before-picker-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-checkpoint-before-picker available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker native before-picker export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-native-roundtrip-before-picker oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker before-picker archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "f92d2bc4-6097-409a-abe6-409ef791aaa4", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier native-mcmaster-picker" + }, + "bodies": [], + "description": "", + "material": null, + "name": "", + "partNumber": "2026-10-02-11-46-01-085", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 0, + "centerOfMass": null, + "mass": 0, + "volume": 0 + }, + "joints": [], + "occurrences": [], + "parameters": {}, + "physical": { + "centerOfMass": [ + 0.0, + 0.0, + 0.0 + ], + "mass": 0.0, + "volume": 0.0 + }, + "rigidGroups": [], + "timelineCount": 0 + } + }, + "after": { + "id": "262b250c-7467-4c3a-b2b9-862f0c3536d1", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier native-mcmaster-picker" + }, + "bodies": [], + "description": "", + "material": null, + "name": "", + "partNumber": "2026-10-02-11-46-01-085", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 0, + "centerOfMass": null, + "mass": 0, + "volume": 0 + }, + "joints": [], + "occurrences": [], + "parameters": {}, + "physical": { + "centerOfMass": [ + 0.0, + 0.0, + 0.0 + ], + "mass": 0.0, + "volume": 0.0 + }, + "rigidGroups": [], + "timelineCount": 0 + } + } + }, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-before-picker-open available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker-before-picker-open oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker-launch-native-picker", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native McMaster picker close removes exact observed window", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-after-picker-close oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native McMaster open and cancel preserves document contents", + "status": "PASS", + "details": { + "before": { + "id": "f92d2bc4-6097-409a-abe6-409ef791aaa4", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier native-mcmaster-picker" + }, + "bodies": [], + "description": "", + "material": null, + "name": "", + "partNumber": "2026-10-02-11-46-01-085", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 0, + "centerOfMass": null, + "mass": 0, + "volume": 0 + }, + "joints": [], + "occurrences": [], + "parameters": {}, + "physical": { + "centerOfMass": [ + 0.0, + 0.0, + 0.0 + ], + "mass": 0.0, + "volume": 0.0 + }, + "rigidGroups": [], + "timelineCount": 0 + } + }, + "after": { + "id": "f92d2bc4-6097-409a-abe6-409ef791aaa4", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier native-mcmaster-picker" + }, + "bodies": [], + "description": "", + "material": null, + "name": "", + "partNumber": "2026-10-02-11-46-01-085", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 0, + "centerOfMass": null, + "mass": 0, + "volume": 0 + }, + "joints": [], + "occurrences": [], + "parameters": {}, + "physical": { + "centerOfMass": [ + 0.0, + 0.0, + 0.0 + ], + "mass": 0.0, + "volume": 0.0 + }, + "rigidGroups": [], + "timelineCount": 0 + } + } + }, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "f92d2bc4-6097-409a-abe6-409ef791aaa4", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier native-mcmaster-picker" + }, + "bodies": [], + "description": "", + "material": null, + "name": "", + "partNumber": "2026-10-02-11-46-01-085", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 0, + "centerOfMass": null, + "mass": 0, + "volume": 0 + }, + "joints": [], + "occurrences": [], + "parameters": {}, + "physical": { + "centerOfMass": [ + 0.0, + 0.0, + 0.0 + ], + "mass": 0.0, + "volume": 0.0 + }, + "rigidGroups": [], + "timelineCount": 0 + } + }, + "after": { + "id": "ebef9b1c-9e04-40e4-b611-b1f5d40aca00", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier native-mcmaster-picker" + }, + "bodies": [], + "description": "", + "material": null, + "name": "", + "partNumber": "2026-10-02-11-46-01-085", + "sketches": [] + } + ], + "independentAggregation": { + "bodyInstances": 0, + "centerOfMass": null, + "mass": 0, + "volume": 0 + }, + "joints": [], + "occurrences": [], + "parameters": {}, + "physical": { + "centerOfMass": [ + 0.0, + 0.0, + 0.0 + ], + "mass": 0.0, + "volume": 0.0 + }, + "rigidGroups": [], + "timelineCount": 0 + } + } + }, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "native-mcmaster-picker-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "native-mcmaster-picker original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "d087a1d6-c5cb-483d-ae69-fc77f86b4780", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "final-documents oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-114558-46db347b", + "category": "availability" + }, + { + "case": "final original documents unchanged", + "status": "PASS", + "details": [ + { + "id": "d087a1d6-c5cb-483d-ae69-fc77f86b4780", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "sourceRun": "cp3-114558-46db347b", + "category": "behavior" + }, + { + "case": "joint-rigid-joint-rigid-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-Base-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-component-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-Base-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-Base-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-before-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-Base-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-after-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "Base has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d1", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-Link-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-component-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-Link-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-Link-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-before-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-Link-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-after-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "Link has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d3", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-occurrences-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-occurrences-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-rigid-ground-base", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-occurrence-Link:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-rigid-free-link", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-joint-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-before-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-rigid-joint-create", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-after-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "rigid as-built joint preserves initial poses", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-joint-Test rigid available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "rigid native joint type reads back", + "status": "PASS", + "details": { + "motionType": "adsk::fusion::RigidJointMotion", + "name": "Test rigid", + "occurrenceOneId": "d6ce1f3f-fc09-40f3-a06a-0dc6af699500", + "occurrenceTwoId": "89dbdda4-80fa-4640-8e58-15135070766a", + "ref": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:eb570895-3e86-4c82-bd89-ad12445920e6", + "objectType": "adsk::fusion::AsBuiltJoint", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0d16f444a13c7ce2b2e55ffc3f673b9b457734c170d63d9d7ed4df4bf9ebb781", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQp7X7rM3DX0vLriaX9rwYfJPoAojBWMzBWPDVPPEZFNz3WTTxCRdEwsTI10LI3MgNzHV3NLMyDzJ1DQNrBZoBgMaANtnoAC2DmS9kamFBQD+XSj+iQAAAA==" + }, + "suppressed": false, + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.4, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "type": "adsk::fusion::AsBuiltJoint", + "units": { + "angle": "deg", + "length": "mm", + "transformTranslation": "cm" + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-rigid-wrong-motion-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-rigid-wrong-motion-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "rigid-wrong-motion safely refused without model changes", + "status": "PASS", + "details": { + "error": "Joint does not support rotation", + "errorCode": "mutation_failed", + "causeCode": "wrong_joint_type", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-joint-Test rigid available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-rigid-suppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-joint-Test rigid available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "rigid joint suppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-joint-Test rigid available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-rigid-unsuppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-joint-Test rigid available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "rigid joint unsuppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-checkpoint-with-rigid-joint-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-checkpoint-with-rigid-joint available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid native with-rigid-joint export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-native-roundtrip-with-rigid-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid with-rigid-joint archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "32751ca9-52b5-4cdb-a691-9c14a2045c62", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-rigid" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-13-04-553", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-13-05-609", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-13-11-234", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 7.222222222222222, + 3.666666666666667, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test rigid", + "one": "Base:1", + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::RigidJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 4.0 + ], + [ + 20.0, + 4.0, + 8.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 7.222222222222223, + 3.6666666666666665, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 10 + } + }, + "after": { + "id": "f3c7624c-88a4-4a6e-8500-b67d08b29a9c", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-rigid" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-13-04-553", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-13-05-609", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-13-11-234", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 7.222222222222222, + 3.666666666666667, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test rigid", + "one": "Base:1", + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::RigidJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 4.0 + ], + [ + 20.0, + 4.0, + 8.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 7.222222222222223, + 3.6666666666666665, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 10 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-joint-Test rigid available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-delete-rigid-joint", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-after-joint-delete available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint deletion removes native joint", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-occurrence-Link:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid-freed-link-move", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-after-joint-delete-move oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "deleted joint permits independent translation", + "status": "PASS", + "details": [ + 1.0, + 0.0, + 0.0, + 25.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "32751ca9-52b5-4cdb-a691-9c14a2045c62", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-rigid" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-13-04-553", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-13-05-609", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-13-11-234", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 18.333333333333336, + 3.666666666666667, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 25.0, + 0.0, + 4.0 + ], + [ + 45.0, + 4.0, + 8.0 + ] + ], + "centerOfMass": [ + 35.0, + 2.0, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 25.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 18.333333333333336, + 3.6666666666666665, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 8 + } + }, + "after": { + "id": "6ac78f2a-37e4-4ef9-b586-eae1dd8f2cbb", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-rigid" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-13-04-553", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-13-05-609", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-13-11-234", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 18.333333333333336, + 3.666666666666667, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 25.0, + 0.0, + 4.0 + ], + [ + 45.0, + 4.0, + 8.0 + ] + ], + "centerOfMass": [ + 35.0, + 2.0, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 25.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 18.333333333333336, + 3.6666666666666665, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 8 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-rigid-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "availability" + }, + { + "case": "joint-rigid original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-rigid", + "category": "behavior" + }, + { + "case": "joint-revolute-joint-revolute-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-Base-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-component-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-Base-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-Base-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-before-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-Base-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-after-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "Base has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d1", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-Link-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-component-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-Link-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-Link-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-before-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-Link-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-after-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "Link has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d3", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-occurrences-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-occurrences-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-revolute-ground-base", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-occurrence-Link:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-revolute-free-link", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-joint-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-before-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-revolute-joint-create", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-after-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "revolute as-built joint preserves initial poses", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-joint-Test revolute available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "revolute native joint type reads back", + "status": "PASS", + "details": { + "motionType": "adsk::fusion::RevoluteJointMotion", + "name": "Test revolute", + "occurrenceOneId": "5008ff8d-921a-4849-8305-d86ec3fdc8e6", + "occurrenceTwoId": "2c4b34f1-ac17-412b-b2d2-7a9c79890fb2", + "ref": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:1002a3f4-bb3b-44a4-91e8-19829f37ca2c", + "objectType": "adsk::fusion::AsBuiltJoint", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "359691d273fc8487332fa6575dd20de4a71752e13404de873e2ab513631442dc", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZwo3a8rys5f6/Vs4/Vn1FacZroAojBWMzhUQzAxNjUxMjXRNzSzNdk1RTM92kZAsT3TQjY4tUU1OjJPMkC7BaoBkMaABsn4EC2DqwIlNLCwB5FDMxiQAAAA==" + }, + "rotationAxisVector": [ + 0.0, + 0.0, + 1.0 + ], + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 0.0, + "suppressed": false, + "transform": [ + 1.0, + 0.0, + 0.0, + 0.5, + 0.0, + 1.0, + 0.0, + 0.5, + 0.0, + 0.0, + 1.0, + 0.4, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "type": "adsk::fusion::AsBuiltJoint", + "units": { + "angle": "deg", + "length": "mm", + "transformTranslation": "cm" + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "revolute rotation limits use public units", + "status": "PASS", + "details": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-revolute-joint-drive", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-after-drive oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "revolute drive values match independent API readback", + "status": "PASS", + "details": { + "name": "Test revolute", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::RevoluteJointMotion" + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "revolute drive changes real occurrence pose", + "status": "PASS", + "details": { + "before": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "after": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -1.1237243569579447, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 1.4644660940672616, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "revolute grounded base remains fixed", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-joint-Test revolute available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-revolute-beyond-limit-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-revolute-beyond-limit-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "revolute-beyond-limit safely refused without model changes", + "status": "PASS", + "details": { + "error": "Drive value is above maximum.", + "errorCode": "mutation_failed", + "causeCode": "joint_limit_exceeded", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-joint-Test revolute available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-revolute-suppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-joint-Test revolute available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "revolute joint suppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-checkpoint-suppressed-joint-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-checkpoint-suppressed-joint available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute native suppressed-joint export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-native-roundtrip-suppressed-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute suppressed-joint archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "a720b9d9-7aa6-428b-ac5e-abb69b2e003e", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-revolute" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-14-00-325", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-14-01-390", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-14-07-071", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 6.801409776061235, + 3.1369454647200854, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test revolute", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "suppressed": true, + "two": "Link:1", + "type": "adsk::fusion::RevoluteJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -1.1237243569579447, + -3.7119148079831503, + 4.0 + ], + [ + 19.230068349233505, + 5.328169399223535, + 8.0 + ] + ], + "centerOfMass": [ + 9.05317199613778, + 0.8081272956201921, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -1.1237243569579447, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 1.4644660940672616, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "15.0 deg" + }, + "physical": { + "centerOfMass": [ + 6.801409776061236, + 3.136945464720085, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 10 + } + }, + "after": { + "id": "f39df742-5c4b-43be-be5e-41b453bf693f", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-revolute" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-14-00-325", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-14-01-390", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-14-07-071", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 6.801409776061235, + 3.1369454647200854, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test revolute", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "suppressed": true, + "two": "Link:1", + "type": "adsk::fusion::RevoluteJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -1.1237243569579447, + -3.7119148079831503, + 4.0 + ], + [ + 19.230068349233505, + 5.328169399223535, + 8.0 + ] + ], + "centerOfMass": [ + 9.05317199613778, + 0.8081272956201921, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -1.1237243569579447, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 1.4644660940672616, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "15.0 deg" + }, + "physical": { + "centerOfMass": [ + 6.801409776061236, + 3.136945464720085, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 10 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-joint-Test revolute available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute-revolute-unsuppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-joint-Test revolute available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "revolute joint unsuppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "a720b9d9-7aa6-428b-ac5e-abb69b2e003e", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-revolute" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-14-00-325", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-14-01-390", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-14-07-071", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 6.801409776061235, + 3.1369454647200854, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test revolute", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::RevoluteJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -1.1237243569579447, + -3.7119148079831503, + 4.0 + ], + [ + 19.230068349233505, + 5.328169399223535, + 8.0 + ] + ], + "centerOfMass": [ + 9.05317199613778, + 0.8081272956201921, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -1.1237243569579447, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 1.4644660940672616, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "15.0 deg" + }, + "physical": { + "centerOfMass": [ + 6.801409776061236, + 3.136945464720085, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + }, + "after": { + "id": "3161ee15-c9aa-489b-9ed5-a8f81219ceac", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-revolute" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-14-00-325", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-14-01-390", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-14-07-071", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 6.801409776061235, + 3.1369454647200854, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test revolute", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::RevoluteJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -1.1237243569579447, + -3.7119148079831503, + 4.0 + ], + [ + 19.230068349233505, + 5.328169399223535, + 8.0 + ] + ], + "centerOfMass": [ + 9.05317199613778, + 0.8081272956201921, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -1.1237243569579447, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 1.4644660940672616, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "15.0 deg" + }, + "physical": { + "centerOfMass": [ + 6.801409776061236, + 3.136945464720085, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-revolute-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "availability" + }, + { + "case": "joint-revolute original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-revolute", + "category": "behavior" + }, + { + "case": "joint-slider-joint-slider-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-Base-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-component-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-Base-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-Base-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-before-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-Base-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-after-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "Base has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d1", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-Link-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-component-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-Link-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-Link-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-before-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-Link-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-after-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "Link has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d3", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-occurrences-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-occurrences-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-slider-ground-base", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-occurrence-Link:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-slider-free-link", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-joint-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-before-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-slider-joint-create", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-after-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "slider as-built joint preserves initial poses", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-joint-Test slider available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "slider native joint type reads back", + "status": "PASS", + "details": { + "motionType": "adsk::fusion::SliderJointMotion", + "name": "Test slider", + "occurrenceOneId": "942fd9e3-cd5f-46a1-a934-ac9938747d06", + "occurrenceTwoId": "e6ed09bd-23e0-4bcd-bc90-b48ae010814f", + "ref": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:1cc42b02-eb63-4e5d-b388-497f98a34c9e", + "objectType": "adsk::fusion::AsBuiltJoint", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "707d8f2c71b2545bb44d243d8e23ddd2bec87f7e1971699737cd641768b371c5", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZwovbcuv/TXB6sygm5uPresE5QBVGCsZmCubJScmm5pZmukkmFka6JoYpFrqJ5ubGuklpqWnGySmWKYZpFmC1QDMY0ADYPgMFsHVgRaaWFgAj55I+iQAAAA==" + }, + "slideDirectionVector": [ + 0.0, + 0.0, + 1.0 + ], + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 0.0, + "suppressed": false, + "transform": [ + 1.0, + 0.0, + 0.0, + 0.5, + 0.0, + 1.0, + 0.0, + 0.5, + 0.0, + 0.0, + 1.0, + 0.4, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "type": "adsk::fusion::AsBuiltJoint", + "units": { + "angle": "deg", + "length": "mm", + "transformTranslation": "cm" + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "slider slide limits use public units", + "status": "PASS", + "details": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-slider-joint-drive", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-after-drive oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "slider drive values match independent API readback", + "status": "PASS", + "details": { + "name": "Test slider", + "one": "Base:1", + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::SliderJointMotion" + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "slider drive changes real occurrence pose", + "status": "PASS", + "details": { + "before": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "after": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.9999999999999998, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "slider grounded base remains fixed", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-joint-Test slider available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-slider-beyond-limit-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-slider-beyond-limit-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "slider-beyond-limit safely refused without model changes", + "status": "PASS", + "details": { + "error": "Drive value is above maximum.", + "errorCode": "mutation_failed", + "causeCode": "joint_limit_exceeded", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-joint-Test slider available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-slider-suppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-joint-Test slider available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "slider joint suppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-joint-Test slider available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider-slider-unsuppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-joint-Test slider available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "slider joint unsuppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "bbf9a8f7-a6a9-47fc-86e0-b976118f21fc", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-slider" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-14-54-834", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-14-55-910", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-15-01-586", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 7.222222222222222, + 3.666666666666667, + 2.444444444444445 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test slider", + "one": "Base:1", + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::SliderJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.9999999999999998 + ], + [ + 20.0, + 4.0, + 5.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 3.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.9999999999999998, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-5.00 mm", + "d6": "10.00 mm", + "d7": "0.00 mm", + "d8": "3.00 mm" + }, + "physical": { + "centerOfMass": [ + 7.222222222222223, + 3.6666666666666665, + 2.4444444444444446 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + }, + "after": { + "id": "8f0e47e7-7b0b-41be-a6c5-b5c38981f021", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-slider" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-14-54-834", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-14-55-910", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-15-01-586", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 7.222222222222222, + 3.666666666666667, + 2.444444444444445 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test slider", + "one": "Base:1", + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::SliderJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.9999999999999998 + ], + [ + 20.0, + 4.0, + 5.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 3.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.9999999999999998, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-5.00 mm", + "d6": "10.00 mm", + "d7": "0.00 mm", + "d8": "3.00 mm" + }, + "physical": { + "centerOfMass": [ + 7.222222222222223, + 3.6666666666666665, + 2.4444444444444446 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-slider-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "availability" + }, + { + "case": "joint-slider original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-slider", + "category": "behavior" + }, + { + "case": "joint-cylindrical-joint-cylindrical-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-Base-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-component-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-Base-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-Base-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-before-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-Base-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-after-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "Base has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d1", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-Link-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-component-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-Link-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-Link-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-before-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-Link-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-after-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "Link has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d3", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-occurrences-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-occurrences-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-cylindrical-ground-base", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-occurrence-Link:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-cylindrical-free-link", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-joint-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-before-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-cylindrical-joint-create", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-after-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "cylindrical as-built joint preserves initial poses", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-joint-Test cylindrical available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "cylindrical native joint type reads back", + "status": "PASS", + "details": { + "motionType": "adsk::fusion::CylindricalJointMotion", + "name": "Test cylindrical", + "occurrenceOneId": "361805c3-a247-47fb-8f15-2a97af04ac47", + "occurrenceTwoId": "3ffacebc-b1b7-42f8-a75e-e0e5ae5fec34", + "ref": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:ac26bb17-f609-41e1-8033-9db34e5e4255", + "objectType": "adsk::fusion::AsBuiltJoint", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8942b4dc7ff2968c63440c58a106930c3c3ebc9f2071150b93ce8e44d8c07652", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZwnH53vYZiQ6TO1ImtWzNPD0fqMJIwdhMwcjMwDg1JTFJ19jE0EjXxDzRTNcyLdFSNy3F0sLIwsjSLCnNAKwWaAYDGgDbZ6AAtg5kvZGppQUAM02dbokAAAA=" + }, + "rotationAxisVector": [ + 0.0, + 0.0, + 1.0 + ], + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 0.0, + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 0.0, + "suppressed": false, + "transform": [ + 1.0, + 0.0, + 0.0, + 0.5, + 0.0, + 1.0, + 0.0, + 0.5, + 0.0, + 0.0, + 1.0, + 0.4, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "type": "adsk::fusion::AsBuiltJoint", + "units": { + "angle": "deg", + "length": "mm", + "transformTranslation": "cm" + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "cylindrical rotation limits use public units", + "status": "PASS", + "details": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "cylindrical slide limits use public units", + "status": "PASS", + "details": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-cylindrical-joint-drive", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-after-drive oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "cylindrical drive values match independent API readback", + "status": "PASS", + "details": { + "name": "Test cylindrical", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::CylindricalJointMotion" + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "cylindrical drive changes real occurrence pose", + "status": "PASS", + "details": { + "before": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "after": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -1.1237243569579447, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 1.4644660940672616, + 0.0, + 0.0, + 1.0, + 0.9999999999999998, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "cylindrical grounded base remains fixed", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-joint-Test cylindrical available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-cylindrical-beyond-limit-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-cylindrical-beyond-limit-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "cylindrical-beyond-limit safely refused without model changes", + "status": "PASS", + "details": { + "error": "Drive value is above maximum.", + "errorCode": "mutation_failed", + "causeCode": "joint_limit_exceeded", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-joint-Test cylindrical available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-cylindrical-suppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-joint-Test cylindrical available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "cylindrical joint suppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-joint-Test cylindrical available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical-cylindrical-unsuppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-joint-Test cylindrical available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "cylindrical joint unsuppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "053e4364-2b64-4fde-b3fc-6903c70786bf", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-cylindrical" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-15-42-805", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-15-43-911", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-15-49-599", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 6.801409776061235, + 3.1369454647200854, + 2.444444444444445 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test cylindrical", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::CylindricalJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -1.1237243569579447, + -3.7119148079831503, + 0.9999999999999998 + ], + [ + 19.230068349233505, + 5.328169399223535, + 5.0 + ] + ], + "centerOfMass": [ + 9.05317199613778, + 0.8081272956201921, + 3.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -1.1237243569579447, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 1.4644660940672616, + 0.0, + 0.0, + 1.0, + 0.9999999999999998, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d10": "0.00 mm", + "d11": "15.0 deg", + "d12": "3.00 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "-5.00 mm", + "d9": "10.00 mm" + }, + "physical": { + "centerOfMass": [ + 6.801409776061236, + 3.136945464720085, + 2.4444444444444446 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + }, + "after": { + "id": "653284db-dbaf-44a2-bb86-2b314cb0d086", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-cylindrical" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-15-42-805", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-15-43-911", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-15-49-599", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 6.801409776061235, + 3.1369454647200854, + 2.444444444444445 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test cylindrical", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::CylindricalJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -1.1237243569579447, + -3.7119148079831503, + 0.9999999999999998 + ], + [ + 19.230068349233505, + 5.328169399223535, + 5.0 + ] + ], + "centerOfMass": [ + 9.05317199613778, + 0.8081272956201921, + 3.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -1.1237243569579447, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 1.4644660940672616, + 0.0, + 0.0, + 1.0, + 0.9999999999999998, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d10": "0.00 mm", + "d11": "15.0 deg", + "d12": "3.00 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "-5.00 mm", + "d9": "10.00 mm" + }, + "physical": { + "centerOfMass": [ + 6.801409776061236, + 3.136945464720085, + 2.4444444444444446 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-cylindrical-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "availability" + }, + { + "case": "joint-cylindrical original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-cylindrical", + "category": "behavior" + }, + { + "case": "joint-pin_slot-joint-pin_slot-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-Base-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-component-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-Base-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-Base-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-before-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-Base-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-after-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "Base has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d1", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-Link-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-component-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-Link-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-Link-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-before-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-Link-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-after-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "Link has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d3", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-occurrences-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-occurrences-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-pin_slot-ground-base", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-occurrence-Link:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-pin_slot-free-link", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-joint-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-before-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-pin_slot-joint-create", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-after-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "pin_slot as-built joint preserves initial poses", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-joint-Test pin_slot available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "pin_slot native joint type reads back", + "status": "PASS", + "details": { + "motionType": "adsk::fusion::PinSlotJointMotion", + "name": "Test pin_slot", + "occurrenceOneId": "6b206dac-072c-4056-9339-09eeb3776cbb", + "occurrenceTwoId": "7339b678-8488-4d82-9466-be28137b48f9", + "ref": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:e37d90ce-75a9-4995-9719-892b1e7f796a", + "objectType": "adsk::fusion::AsBuiltJoint", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "230dbe382b2883a6505a86d0eab3b456808ecddbdd0e78645fa36754430a179b", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZgoRt5cIjUS5N+3hspzWfduYCqjBSMDZTMDAyTDM3SUnTTUw2MNM1STZL1U00NjLStTQ0SDFNMUkxSE5NAqsFmsGABsD2GSiArQNZb2RqaQEAniSZCIkAAAA=" + }, + "rotationAxisVector": [ + 0.0, + 0.0, + 1.0 + ], + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 0.0, + "slideDirectionVector": [ + 1.0, + 0.0, + 0.0 + ], + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 0.0, + "suppressed": false, + "transform": [ + 1.0, + 0.0, + 0.0, + 0.5, + 0.0, + 1.0, + 0.0, + 0.5, + 0.0, + 0.0, + 1.0, + 0.4, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "type": "adsk::fusion::AsBuiltJoint", + "units": { + "angle": "deg", + "length": "mm", + "transformTranslation": "cm" + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "pin_slot rotation limits use public units", + "status": "PASS", + "details": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "pin_slot slide limits use public units", + "status": "PASS", + "details": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-pin_slot-joint-drive", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-after-drive oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "pin_slot drive values match independent API readback", + "status": "PASS", + "details": { + "name": "Test pin_slot", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::PinSlotJointMotion" + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "pin_slot drive changes real occurrence pose", + "status": "PASS", + "details": { + "before": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "after": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -4.021501835825149, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 2.2409232293748245, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "pin_slot grounded base remains fixed", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-joint-Test pin_slot available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-pin_slot-beyond-limit-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-pin_slot-beyond-limit-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "pin_slot-beyond-limit safely refused without model changes", + "status": "PASS", + "details": { + "error": "Drive value is above maximum.", + "errorCode": "mutation_failed", + "causeCode": "joint_limit_exceeded", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-joint-Test pin_slot available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-pin_slot-suppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-joint-Test pin_slot available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "pin_slot joint suppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-joint-Test pin_slot available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot-pin_slot-unsuppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-joint-Test pin_slot available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "pin_slot joint unsuppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "36b3b1bd-4ff2-4c0b-be61-40848473efec", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-pin_slot" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-16-31-191", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-16-32-221", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-16-37-933", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 5.513508674342478, + 3.48203752485678, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test pin_slot", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::PinSlotJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -4.021501835825149, + -2.935457672675588, + 4.0 + ], + [ + 16.332290870366297, + 6.104626534531099, + 8.0 + ] + ], + "centerOfMass": [ + 6.155394517270574, + 1.5845844309277548, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -4.021501835825149, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 2.2409232293748245, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d10": "0.00 mm", + "d11": "15.0 deg", + "d12": "3.00 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "-5.00 mm", + "d9": "10.00 mm" + }, + "physical": { + "centerOfMass": [ + 5.513508674342477, + 3.48203752485678, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + }, + "after": { + "id": "19f9f71d-5241-4b48-b002-20cca65928ff", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-pin_slot" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-16-31-191", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-16-32-221", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-16-37-933", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 5.513508674342478, + 3.48203752485678, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test pin_slot", + "one": "Base:1", + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "slideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "slideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::PinSlotJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -4.021501835825149, + -2.935457672675588, + 4.0 + ], + [ + 16.332290870366297, + 6.104626534531099, + 8.0 + ] + ], + "centerOfMass": [ + 6.155394517270574, + 1.5845844309277548, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -4.021501835825149, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + 2.2409232293748245, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d10": "0.00 mm", + "d11": "15.0 deg", + "d12": "3.00 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "-5.00 mm", + "d9": "10.00 mm" + }, + "physical": { + "centerOfMass": [ + 5.513508674342477, + 3.48203752485678, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-pin_slot-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "availability" + }, + { + "case": "joint-pin_slot original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-pin_slot", + "category": "behavior" + }, + { + "case": "joint-planar-joint-planar-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-Base-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-component-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-Base-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-Base-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-before-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-Base-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-after-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "Base has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d1", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-Link-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-component-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-Link-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-Link-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-before-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-Link-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-after-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "Link has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d3", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-occurrences-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-occurrences-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-planar-ground-base", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-occurrence-Link:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-planar-free-link", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-joint-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-before-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-planar-joint-create", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-after-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "planar as-built joint preserves initial poses", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-joint-Test planar available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "planar native joint type reads back", + "status": "PASS", + "details": { + "motionType": "adsk::fusion::PlanarJointMotion", + "name": "Test planar", + "normalDirectionVector": [ + 0.0, + 0.0, + 1.0 + ], + "occurrenceOneId": "01f5cc1e-a1b5-456c-b6f7-f33b265dcc80", + "occurrenceTwoId": "6f54c785-0ffa-4f9e-be63-853792209d83", + "primarySlideDirectionVector": [ + 1.0, + 0.0, + 0.0 + ], + "primarySlideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "primarySlideValue": 0.0, + "ref": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:754aeedd-7156-4b65-b640-89422d4fb584", + "objectType": "adsk::fusion::AsBuiltJoint", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4ea83f7011ab2174587f469228bbe873e63a384e7a4a8c3bcc3807e31fa6b40", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZwuXn58Sud7hZ7in6M8dqs9lRoAojBWMzhVRzS+OkpERT3TQLE0tdkxTLJN1EizQL3dQ0A+NkM8tkQ2PTZLBaoBkMaABsn4EC2DqQ9UamlhYAfYnD6okAAAA=" + }, + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 0.0, + "secondarySlideDirectionVector": [ + 0.0, + 1.0, + 0.0 + ], + "secondarySlideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "secondarySlideValue": 0.0, + "suppressed": false, + "transform": [ + 1.0, + 0.0, + 0.0, + 0.5, + 0.0, + 1.0, + 0.0, + 0.5, + 0.0, + 0.0, + 1.0, + 0.4, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "type": "adsk::fusion::AsBuiltJoint", + "units": { + "angle": "deg", + "length": "mm", + "transformTranslation": "cm" + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "planar rotation limits use public units", + "status": "PASS", + "details": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "planar primarySlide limits use public units", + "status": "PASS", + "details": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "planar secondarySlide limits use public units", + "status": "PASS", + "details": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-planar-joint-drive", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-after-drive oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "planar drive values match independent API readback", + "status": "PASS", + "details": { + "name": "Test planar", + "one": "Base:1", + "primarySlideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "primarySlideValue": 3.0000000000000004, + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "secondarySlideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "secondarySlideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::PlanarJointMotion" + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "planar drive changes real occurrence pose", + "status": "PASS", + "details": { + "before": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "after": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -4.7979589711327115, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + -0.6568542494923796, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "planar grounded base remains fixed", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-joint-Test planar available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-planar-beyond-limit-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-planar-beyond-limit-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "planar-beyond-limit safely refused without model changes", + "status": "PASS", + "details": { + "error": "Drive value is above maximum.", + "errorCode": "mutation_failed", + "causeCode": "joint_limit_exceeded", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-joint-Test planar available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-planar-suppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-joint-Test planar available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "planar joint suppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-joint-Test planar available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar-planar-unsuppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-joint-Test planar available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "planar joint unsuppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "34117de3-d4ce-480d-81e9-62afe1391d7b", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-planar" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-17-19-723", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-17-20-800", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-17-26-573", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 5.168416614205784, + 2.1941364231380223, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test planar", + "one": "Base:1", + "primarySlideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "primarySlideValue": 3.0000000000000004, + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "secondarySlideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "secondarySlideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::PlanarJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -4.7979589711327115, + -5.833235151542793, + 4.0 + ], + [ + 15.555833735058735, + 3.206849055663894, + 8.0 + ] + ], + "centerOfMass": [ + 5.378937381963011, + -1.3131930479394491, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -4.7979589711327115, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + -0.6568542494923796, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d10": "0.00 mm", + "d11": "-5.00 mm", + "d12": "10.00 mm", + "d13": "0.00 mm", + "d14": "15.0 deg", + "d15": "3.00 mm", + "d16": "3.00 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "-5.00 mm", + "d9": "10.00 mm" + }, + "physical": { + "centerOfMass": [ + 5.168416614205783, + 2.1941364231380227, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + }, + "after": { + "id": "bcaeeffa-be41-41e1-ac28-f74fea5a9c80", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-planar" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-17-19-723", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-17-20-800", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-17-26-573", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 5.168416614205784, + 2.1941364231380223, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test planar", + "one": "Base:1", + "primarySlideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "primarySlideValue": 3.0000000000000004, + "rotationLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rotationValue": 14.999999999999998, + "secondarySlideLimits": { + "maximum": 10.0, + "maximumEnabled": true, + "minimum": -5.0, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "secondarySlideValue": 3.0000000000000004, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::PlanarJointMotion" + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -4.7979589711327115, + -5.833235151542793, + 4.0 + ], + [ + 15.555833735058735, + 3.206849055663894, + 8.0 + ] + ], + "centerOfMass": [ + 5.378937381963011, + -1.3131930479394491, + 6.000000000000001 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.9659258262890684, + 0.25881904510252063, + 0.0, + -4.7979589711327115, + -0.25881904510252063, + 0.9659258262890684, + 0.0, + -0.6568542494923796, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d10": "0.00 mm", + "d11": "-5.00 mm", + "d12": "10.00 mm", + "d13": "0.00 mm", + "d14": "15.0 deg", + "d15": "3.00 mm", + "d16": "3.00 mm", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "-5.00 mm", + "d9": "10.00 mm" + }, + "physical": { + "centerOfMass": [ + 5.168416614205783, + 2.1941364231380227, + 3.7777777777777786 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-planar-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "availability" + }, + { + "case": "joint-planar original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-planar", + "category": "behavior" + }, + { + "case": "joint-ball-joint-ball-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-Base-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-component-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-Base-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-Base-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-before-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-Base-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-after-Base-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "Base has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d1", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-Link-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-component-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-Link-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-Link-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-before-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-Link-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-after-Link-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "Link has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "4.0 mm", + "name": "d3", + "unit": "mm", + "value": 4.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-occurrences-Base available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-occurrences-Link available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-ball-ground-base", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-occurrence-Link:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-ball-free-link", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-occurrence-Base:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-joint-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-before-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-ball-joint-create", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-after-joint oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "ball as-built joint preserves initial poses", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-joint-Test ball available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "ball native joint type reads back", + "status": "PASS", + "details": { + "motionType": "adsk::fusion::BallJointMotion", + "name": "Test ball", + "occurrenceOneId": "2896df7e-57de-4061-9f59-7fc33b35be15", + "occurrenceTwoId": "41df952b-38e4-434c-8cb8-049ff457f372", + "pitchLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "pitchValue": 0.0, + "ref": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:0bbaca2b-bee3-4f51-b28c-302a62bb6291", + "objectType": "adsk::fusion::AsBuiltJoint", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "20d3191b564f1f5af9a454342479a83ffbfda876fd284b1add632d7a69cec978", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQr7g9wuTLjhLdfOm8Ipyz9gGVGGkYGymYG5hapKWYpKka2lqkKZrkmgOYlkY6xobpSWlJFsYmKQkG4HVAs1gQANg+wwUwNaBrDcytbQAAM0IlcyJAAAA" + }, + "rollLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rollValue": 0.0, + "suppressed": false, + "transform": [ + 1.0, + 0.0, + 0.0, + 0.5, + 0.0, + 1.0, + 0.0, + 0.5, + 0.0, + 0.0, + 1.0, + 0.4, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "type": "adsk::fusion::AsBuiltJoint", + "units": { + "angle": "deg", + "length": "mm", + "transformTranslation": "cm" + }, + "yawLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "yawValue": 0.0 + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "ball pitch limits use public units", + "status": "PASS", + "details": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "ball roll limits use public units", + "status": "PASS", + "details": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "ball yaw limits use public units", + "status": "PASS", + "details": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-ball-joint-drive", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-after-drive oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "ball drive values match independent API readback", + "status": "PASS", + "details": { + "name": "Test ball", + "one": "Base:1", + "pitchLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "pitchValue": 14.999999999999998, + "rollLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rollValue": 14.999999999999998, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::BallJointMotion", + "yawLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "yawValue": 14.999999999999998 + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "ball drive changes real occurrence pose", + "status": "PASS", + "details": { + "before": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 4.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "after": [ + 0.8683079406165893, + 0.4914814565722669, + 0.06698729810778065, + -1.7989469859442804, + -0.4914814565722669, + 0.8342337669056578, + 0.2499999999999999, + 3.2862384483330453, + 0.06698729810778058, + -0.24999999999999992, + 0.9659258262890684, + 4.915063509461097, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "ball grounded base remains fixed", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-joint-Test ball available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-ball-beyond-limit-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-ball-beyond-limit-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "ball-beyond-limit safely refused without model changes", + "status": "PASS", + "details": { + "error": "Drive value is above maximum.", + "errorCode": "mutation_failed", + "causeCode": "joint_limit_exceeded", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-joint-Test ball available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-ball-suppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-joint-Test ball available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "ball joint suppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-joint-Test ball available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball-ball-unsuppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-joint-Test ball available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "ball joint unsuppression reads back", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "7d0454a1-d721-4161-a892-60ee562472cb", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-ball" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-18-08-422", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-18-09-458", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-18-15-180", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 6.333808857591871, + 3.017729518409641, + 4.22968361916313 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test ball", + "one": "Base:1", + "pitchLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "pitchValue": 14.999999999999998, + "rollLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rollValue": 14.999999999999998, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::BallJointMotion", + "yawLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "yawValue": 14.999999999999998 + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -1.7989469859442804, + -6.5433906831122925, + 3.9150635094610977 + ], + [ + 17.801086845107697, + 7.623173515955678, + 10.118512776772985 + ] + ], + "centerOfMass": [ + 8.001069929581707, + 0.5398914164216922, + 7.016788143117042 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.8683079406165893, + 0.4914814565722669, + 0.06698729810778065, + -1.7989469859442804, + -0.4914814565722669, + 0.8342337669056578, + 0.2499999999999999, + 3.2862384483330453, + 0.06698729810778058, + -0.24999999999999992, + 0.9659258262890684, + 4.915063509461097, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d10": "0.0 deg", + "d11": "-30.00 deg", + "d12": "45.00 deg", + "d13": "0.0 deg", + "d14": "15.0 deg", + "d15": "15.0 deg", + "d16": "15.0 deg", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "-30.00 deg", + "d9": "45.00 deg" + }, + "physical": { + "centerOfMass": [ + 6.333808857591871, + 3.0177295184096415, + 4.22968361916313 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + }, + "after": { + "id": "9672976c-cd76-428f-8ea4-8e8ed49feec0", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier joint-ball" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-18-08-422", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Base", + "partNumber": "2026-10-02-12-18-09-458", + "sketches": [ + "Base section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 4.0, + 4.0 + ] + ], + "centerOfMass": [ + 10.0, + 2.0, + 2.0 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "description": "", + "material": "Aluminum", + "name": "Link", + "partNumber": "2026-10-02-12-18-15-180", + "sketches": [ + "Link section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 6.333808857591871, + 3.017729518409641, + 4.22968361916313 + ], + "mass": 0.001944, + "volume": 720.0 + }, + "joints": [ + { + "name": "Test ball", + "one": "Base:1", + "pitchLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "pitchValue": 14.999999999999998, + "rollLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "rollValue": 14.999999999999998, + "suppressed": false, + "two": "Link:1", + "type": "adsk::fusion::BallJointMotion", + "yawLimits": { + "maximum": 45.0, + "maximumEnabled": true, + "minimum": -29.999999999999996, + "minimumEnabled": true, + "rest": 0.0, + "restEnabled": true + }, + "yawValue": 14.999999999999998 + } + ], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 4.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 2.0000000000000004 + ], + "faces": 6, + "mass": 0.00108, + "material": "Aluminum", + "name": "Body1", + "volume": 400.0 + } + ], + "component": "Base", + "grounded": true, + "groundedToParent": false, + "path": "Base:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -1.7989469859442804, + -6.5433906831122925, + 3.9150635094610977 + ], + [ + 17.801086845107697, + 7.623173515955678, + 10.118512776772985 + ] + ], + "centerOfMass": [ + 8.001069929581707, + 0.5398914164216922, + 7.016788143117042 + ], + "faces": 6, + "mass": 0.0008640000000000001, + "material": "Aluminum", + "name": "Body1", + "volume": 320.00000000000006 + } + ], + "component": "Link", + "grounded": false, + "groundedToParent": false, + "path": "Link:1", + "transform": [ + 0.8683079406165893, + 0.4914814565722669, + 0.06698729810778065, + -1.7989469859442804, + -0.4914814565722669, + 0.8342337669056578, + 0.2499999999999999, + 3.2862384483330453, + 0.06698729810778058, + -0.24999999999999992, + 0.9659258262890684, + 4.915063509461097, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "4.0 mm", + "d10": "0.0 deg", + "d11": "-30.00 deg", + "d12": "45.00 deg", + "d13": "0.0 deg", + "d14": "15.0 deg", + "d15": "15.0 deg", + "d16": "15.0 deg", + "d2": "0.0 deg", + "d3": "4.0 mm", + "d4": "0.0 deg", + "d5": "-30.00 deg", + "d6": "45.00 deg", + "d7": "0.0 deg", + "d8": "-30.00 deg", + "d9": "45.00 deg" + }, + "physical": { + "centerOfMass": [ + 6.333808857591871, + 3.0177295184096415, + 4.22968361916313 + ], + "mass": 0.001944, + "volume": 720.0000000000001 + }, + "rigidGroups": [], + "timelineCount": 11 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "joint-ball-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "availability" + }, + { + "case": "joint-ball original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "joint-ball", + "category": "behavior" + }, + { + "case": "rigid-groups-rigid-groups-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-GroupA-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-component-GroupA available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-GroupA-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-GroupA-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-before-GroupA-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-GroupA-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-after-GroupA-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "GroupA has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "2.0 mm", + "name": "d1", + "unit": "mm", + "value": 2.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-GroupB-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-component-GroupB available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-GroupB-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-GroupB-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-before-GroupB-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-GroupB-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-after-GroupB-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "GroupB has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "2.0 mm", + "name": "d3", + "unit": "mm", + "value": 2.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-group-selection available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-rigid-group-create", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-group-Pair available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid group contains exact two instances", + "status": "PASS", + "details": { + "name": "Pair", + "occurrenceIds": [ + "1089e619-5227-4b11-a90a-0e404b8e5b91", + "109011da-2a20-4a99-b789-273599de6c8d" + ], + "occurrenceRefs": [ + { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:e9f12ae7-2261-4461-9d7b-6bd473593159", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "GroupA:1", + "occurrenceToken": null, + "revision": "8bc4fc37d3f30231f480617e270ba0873564d87128ae68d4cca15e347f58b19f", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OsQ1CMQxExQpMENFbchLbcVokFmADJ9+/ZBmmoGEBBkBMQYOYAyN6dM359HQ+TJRKyglDuWi4/Esk3W/bx+G8f183r9PueHkGUVKVtBh5k1pgYaxA6gtYMQNla7N3U0aJliB79lXUV+DcGMgDH51WqGrYGmMW1/+/lL3Ozh0GqQKNKTA0TkPizLWKFP5u/wDnNBOXxwAAAA==" + }, + { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:e9f12ae7-2261-4461-9d7b-6bd473593159", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "GroupB:1", + "occurrenceToken": null, + "revision": "8bc4fc37d3f30231f480617e270ba0873564d87128ae68d4cca15e347f58b19f", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/31OywlCMRDEFqxg8b6w2U+y7yrYgB1sXpKjzViFFxuwALEKL2IdRrzLwDAMw8wQKDAkoInEPlX6ORnut+3jcN6/r5vXaXe8PGeCQTK00F6yMDYjQfXeMDgC3aKsyxJulGfLTKaxFpIqyMMDNVgwqNikGm2QeXX7v6VL1SopY1gYqnrF6iVwsIp67i6jf79/AAW608nHAAAA" + } + ], + "ref": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:e9f12ae7-2261-4461-9d7b-6bd473593159", + "objectType": "adsk::fusion::RigidGroup", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8bc4fc37d3f30231f480617e270ba0873564d87128ae68d4cca15e347f58b19f", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZwvHdQiddJzs9W8f4JE8paOV9oAojBWMzhZREk1RzM2Mj3RRTA2NdE4vUFN1Eo8REXQvTRPNkS8tEC1MDM7BaoBkMaABsn4EC2DqQ9YZmJgYAszXUYokAAAA=" + }, + "suppressed": false + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-rigid-group-rename", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-group-Renamed pair available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-rigid-group-suppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-group-Renamed pair available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid group suppression persists", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-checkpoint-suppressed-group-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-checkpoint-suppressed-group available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups native suppressed-group export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-native-roundtrip-suppressed-group oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups suppressed-group archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "fbf88765-0b92-4a5c-8740-e178c90c1f5c", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier rigid-groups" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-18-57-003", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupA", + "partNumber": "2026-10-02-12-18-58-040", + "sketches": [ + "GroupA section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupB", + "partNumber": "2026-10-02-12-19-03-664", + "sketches": [ + "GroupB section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 11.0, + 1.0, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupA", + "grounded": false, + "groundedToParent": false, + "path": "GroupA:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 0.0, + 0.0 + ], + [ + 22.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 21.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupB", + "grounded": false, + "groundedToParent": false, + "path": "GroupB:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "2.0 mm", + "d2": "0.0 deg", + "d3": "2.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 10.999999999999998, + 1.0, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "rigidGroups": [ + { + "name": "Renamed pair", + "occurrences": [ + "GroupA:1", + "GroupB:1" + ], + "suppressed": true + } + ], + "timelineCount": 8 + } + }, + "after": { + "id": "09cd90ad-c427-4e22-8b16-18791d8077f0", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier rigid-groups" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-18-57-003", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupA", + "partNumber": "2026-10-02-12-18-58-040", + "sketches": [ + "GroupA section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupB", + "partNumber": "2026-10-02-12-19-03-664", + "sketches": [ + "GroupB section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 11.0, + 1.0, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupA", + "grounded": false, + "groundedToParent": false, + "path": "GroupA:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 0.0, + 0.0 + ], + [ + 22.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 21.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupB", + "grounded": false, + "groundedToParent": false, + "path": "GroupB:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "2.0 mm", + "d2": "0.0 deg", + "d3": "2.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 10.999999999999998, + 1.0, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "rigidGroups": [ + { + "name": "Renamed pair", + "occurrences": [ + "GroupA:1", + "GroupB:1" + ], + "suppressed": true + } + ], + "timelineCount": 8 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-group-Renamed pair available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-rigid-group-unsuppress", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-group-Renamed pair available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid group unsuppression persists", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-checkpoint-with-rigid-group-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-checkpoint-with-rigid-group available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups native with-rigid-group export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-native-roundtrip-with-rigid-group oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups with-rigid-group archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "fbf88765-0b92-4a5c-8740-e178c90c1f5c", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier rigid-groups" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-18-57-003", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupA", + "partNumber": "2026-10-02-12-18-58-040", + "sketches": [ + "GroupA section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupB", + "partNumber": "2026-10-02-12-19-03-664", + "sketches": [ + "GroupB section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 11.0, + 1.0, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupA", + "grounded": false, + "groundedToParent": false, + "path": "GroupA:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 0.0, + 0.0 + ], + [ + 22.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 21.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupB", + "grounded": false, + "groundedToParent": false, + "path": "GroupB:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "2.0 mm", + "d2": "0.0 deg", + "d3": "2.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 10.999999999999998, + 1.0, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "rigidGroups": [ + { + "name": "Renamed pair", + "occurrences": [ + "GroupA:1", + "GroupB:1" + ], + "suppressed": false + } + ], + "timelineCount": 9 + } + }, + "after": { + "id": "29b439f9-f0c5-400e-8bcd-34ec79e5559e", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier rigid-groups" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-18-57-003", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupA", + "partNumber": "2026-10-02-12-18-58-040", + "sketches": [ + "GroupA section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupB", + "partNumber": "2026-10-02-12-19-03-664", + "sketches": [ + "GroupB section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 11.0, + 1.0, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupA", + "grounded": false, + "groundedToParent": false, + "path": "GroupA:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 20.0, + 0.0, + 0.0 + ], + [ + 22.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 21.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupB", + "grounded": false, + "groundedToParent": false, + "path": "GroupB:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 20.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "2.0 mm", + "d2": "0.0 deg", + "d3": "2.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 10.999999999999998, + 1.0, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "rigidGroups": [ + { + "name": "Renamed pair", + "occurrences": [ + "GroupA:1", + "GroupB:1" + ], + "suppressed": false + } + ], + "timelineCount": 9 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-group-Renamed pair available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-rigid-group-delete", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-after-group-delete available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid group deletion removes native group", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-occurrences-GroupB available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-occurrence-GroupB:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-group-free-rotation", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-occurrence-GroupB:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "absolute pose applies rotation then translation", + "status": "PASS", + "details": { + "max": [ + 25.0, + 7.000000000000001, + 2.0 + ], + "min": [ + 23.0, + 4.999999999999999, + 0.0 + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-occurrence-GroupB:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-explicit-grounding", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-occurrence-GroupB:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-grounded-move-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups-grounded-move-after oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "grounded-move safely refused without model changes", + "status": "PASS", + "details": { + "error": "Unground the occurrence explicitly before moving it.", + "errorCode": "mutation_failed", + "causeCode": "grounded_occurrence", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "unchanged": true + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "fbf88765-0b92-4a5c-8740-e178c90c1f5c", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier rigid-groups" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-18-57-003", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupA", + "partNumber": "2026-10-02-12-18-58-040", + "sketches": [ + "GroupA section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupB", + "partNumber": "2026-10-02-12-19-03-664", + "sketches": [ + "GroupB section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 12.499999999999998, + 3.5, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupA", + "grounded": false, + "groundedToParent": false, + "path": "GroupA:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 23.0, + 4.999999999999999, + 0.0 + ], + [ + 25.0, + 7.000000000000001, + 2.0 + ] + ], + "centerOfMass": [ + 24.0, + 6.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupB", + "grounded": true, + "groundedToParent": false, + "path": "GroupB:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 25.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 5.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "2.0 mm", + "d2": "0.0 deg", + "d3": "2.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 12.5, + 3.5, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "rigidGroups": [], + "timelineCount": 8 + } + }, + "after": { + "id": "d86de160-e9be-415c-a498-e37624dfd4b6", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier rigid-groups" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-18-57-003", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupA", + "partNumber": "2026-10-02-12-18-58-040", + "sketches": [ + "GroupA section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "description": "", + "material": "Aluminum", + "name": "GroupB", + "partNumber": "2026-10-02-12-19-03-664", + "sketches": [ + "GroupB section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 12.499999999999998, + 3.5, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, + 2.0, + 2.0 + ] + ], + "centerOfMass": [ + 1.0, + 1.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupA", + "grounded": false, + "groundedToParent": false, + "path": "GroupA:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 23.0, + 4.999999999999999, + 0.0 + ], + [ + 25.0, + 7.000000000000001, + 2.0 + ] + ], + "centerOfMass": [ + 24.0, + 6.0, + 1.0 + ], + "faces": 6, + "mass": 2.1600000000000003e-05, + "material": "Aluminum", + "name": "Body1", + "volume": 8.000000000000002 + } + ], + "component": "GroupB", + "grounded": true, + "groundedToParent": false, + "path": "GroupB:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 25.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 5.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "2.0 mm", + "d2": "0.0 deg", + "d3": "2.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 12.5, + 3.5, + 1.0 + ], + "mass": 4.3200000000000007e-05, + "volume": 16.000000000000004 + }, + "rigidGroups": [], + "timelineCount": 8 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "rigid-groups-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "availability" + }, + { + "case": "rigid-groups original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "rigid-groups", + "category": "behavior" + }, + { + "case": "interference-interference-new", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-OverlapA-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-component-OverlapA available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-OverlapA-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-OverlapA-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-before-OverlapA-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-OverlapA-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-after-OverlapA-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "OverlapA has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "10.0 mm", + "name": "d1", + "unit": "mm", + "value": 10.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-OverlapB-component", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-component-OverlapB available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-OverlapB-sketch", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-OverlapB-rectangle", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-before-OverlapB-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-OverlapB-solid", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-after-OverlapB-extrude available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "OverlapB has discoverable driving depth", + "status": "PASS", + "details": [ + { + "displayUnit": "mm", + "expression": "10.0 mm", + "name": "d3", + "unit": "mm", + "value": 10.0 + } + ], + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-interference-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-before-overlap-query oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference overlap readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-after-overlap-query oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "known overlap is 500 cubic millimetres", + "status": "PASS", + "details": { + "bodiesCreated": false, + "complete": true, + "results": [ + { + "classification": "overlap", + "entityOne": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:8a220b3d-4862-4ec8-84c5-42aa63867bf8", + "objectType": "adsk::fusion::BRepBody", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "bae48f79c2ba72eaa31d918073cd32519db5d790561b1a15b006a65d1725566f", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQv6DB1/vLnNl3XH34/bThl8jgSqMFIzNFNJMTM1MDRItdNNM0xJ1TZJTLXUTzcyTdc2MUg2NkpIN0yyMLMBqgWYwoAGwfQYKYOtAikyNDQDDWb9DiAAAAA==" + }, + "entityTwo": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:8a220b3d-4862-4ec8-84c5-42aa63867bf8", + "objectType": "adsk::fusion::BRepBody", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "bae48f79c2ba72eaa31d918073cd32519db5d790561b1a15b006a65d1725566f", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQv6DB1/vLnNl3XH34/bThl8jgSqMFIzNFMzNk42Mkk1MdM0TUy11TUwNTXUtU01SdVOTElPMzS1MEpNMEsFqgWYwoAGwfQYKYOsswFaamAEAsgIcUYkAAAA=" + }, + "volume": 500.0 + } + ], + "target": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:8a220b3d-4862-4ec8-84c5-42aa63867bf8", + "revision": "bae48f79c2ba72eaa31d918073cd32519db5d790561b1a15b006a65d1725566f" + }, + "volumeUnit": "mm3" + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference query creates no bodies or other model changes", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-native-body-selection available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "native child body interference requires occurrence context", + "status": "PASS", + "details": { + "_contribute": "If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.", + "_hint": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_hintDocumentHygiene": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + }, + { + "isModified": true, + "isSaved": false, + "name": "Untitled", + "needsSave": true, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 1, + "openDocumentCount": 2, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "error": "Non-root geometry requires a specific occurrence-context reference.", + "errorCode": "occurrence_context_required", + "sessionId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03", + "shell": "rust", + "statusVerb": "fusion_get_app_state", + "success": false, + "timeoutSeconds": 60 + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-occurrences-OverlapB available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-occurrence-OverlapB:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-clearance-placement", + "status": "PASS", + "details": { + "error": null, + "errorCode": null, + "causeCode": null, + "recovery": null + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-clearance-members available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference clearance readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "one millimetre clearance has no interference", + "status": "PASS", + "details": { + "bodiesCreated": false, + "complete": true, + "results": [], + "target": { + "documentId": "bb4d4554-15eb-4ffd-971d-cb009c3c4f03:8a220b3d-4862-4ec8-84c5-42aa63867bf8", + "revision": "0d76e6ad4557e2379adaa5285149abd3de7301ca55b864c60a5c32bacb74b19e" + }, + "volumeUnit": "mm3" + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-occurrence-OverlapB:1 available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-selected-occurrence readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference-selected-occurrence-body readback", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "clearance placement is measured in millimetres", + "status": "PASS", + "details": { + "max": [ + 21.0, + 10.0, + 10.0 + ], + "min": [ + 11.0, + 0.0, + 0.0 + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-checkpoint-final-before oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference checkpoint owns active document", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-checkpoint-final available", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference native final export succeeds", + "status": "PASS", + "details": null, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-native-roundtrip-final oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference final archive preserves complete assembly witness", + "status": "PASS", + "details": { + "before": { + "id": "9f7a63cc-f607-4672-bf6b-bdca956b5a9b", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier interference" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-19-53-273", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "OverlapA", + "partNumber": "2026-10-02-12-19-54-311", + "sketches": [ + "OverlapA section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "OverlapB", + "partNumber": "2026-10-02-12-20-00-072", + "sketches": [ + "OverlapB section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 10.5, + 5.0, + 5.0 + ], + "mass": 0.005399999999999999, + "volume": 2000.0 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "OverlapA", + "grounded": false, + "groundedToParent": false, + "path": "OverlapA:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 11.0, + 0.0, + 0.0 + ], + [ + 21.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 16.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "OverlapB", + "grounded": false, + "groundedToParent": false, + "path": "OverlapB:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 11.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "10.0 mm", + "d2": "0.0 deg", + "d3": "10.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 10.5, + 5.0, + 5.0 + ], + "mass": 0.005399999999999999, + "volume": 2000.0 + }, + "rigidGroups": [], + "timelineCount": 7 + } + }, + "after": { + "id": "2b889d8e-885d-4a97-aafe-6af48dd70efe", + "semantic": { + "components": [ + { + "attributes": { + "requestedName": "Verifier interference" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-12-19-53-273", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "OverlapA", + "partNumber": "2026-10-02-12-19-54-311", + "sketches": [ + "OverlapA section" + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "OverlapB", + "partNumber": "2026-10-02-12-20-00-072", + "sketches": [ + "OverlapB section" + ] + } + ], + "independentAggregation": { + "bodyInstances": 2, + "centerOfMass": [ + 10.5, + 5.0, + 5.0 + ], + "mass": 0.005399999999999999, + "volume": 2000.0 + }, + "joints": [], + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "OverlapA", + "grounded": false, + "groundedToParent": false, + "path": "OverlapA:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 11.0, + 0.0, + 0.0 + ], + [ + 21.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 16.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "OverlapB", + "grounded": false, + "groundedToParent": false, + "path": "OverlapB:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 11.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "10.0 mm", + "d2": "0.0 deg", + "d3": "10.0 mm", + "d4": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 10.5, + 5.0, + 5.0 + ], + "mass": 0.005399999999999999, + "volume": 2000.0 + }, + "rigidGroups": [], + "timelineCount": 7 + } + } + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + }, + { + "case": "interference-close-owned oracle completed", + "status": "PASS", + "details": "", + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "availability" + }, + { + "case": "interference original documents unchanged", + "status": "PASS", + "details": { + "closed": true, + "remaining": [ + { + "id": "28f84cb4-6784-4700-a225-c8767b04753b", + "modified": false, + "name": "Untitled", + "saved": false + } + ] + }, + "sourceRun": "cp3-121116-6159c012", + "fixture": "interference", + "category": "behavior" + } + ] +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp4-assembly.png b/docs/mechanical-verification/cp4-assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..84b9226d9614e74df3289eceb4adcc5fb5e3069e GIT binary patch literal 13874 zcmeHuc~n!`v+hm^5f5eZHxV{C?mBqX=?!Q1!$x8D2X-Sz9W1kO2osH$C6yS{Jl zKIH4YXq3)49fZ&*4|g{|gf!t#jRg7#_@x?iMgxA04h`^F@8yLi!{2oHhySbbKL$Uw z!xt{xK|bRjZzmVMK!}Yz++3DLp6P5}x!rWpo1CS@@{U)>jB=#uTq^tak)TyamYx18 zuxFae9~k-i+-9$@)rhc9J9s7}LJ*tcc|tqQYQdlGFZ&w%P1-m^%F6bUcxd{!=QU&T zAINhNqQNghNaNy1y61l$|F2sk$5=g7EhrXHVC3)0kZ-!k-A`65P&YUU?%(e;=gS8( zH1n}1taVhYSPfTl?Wh}9WXTk=@8_Zduf;|$S#04;gH4ea7yG+qH*xT4B?Qv}> zjfqkf8d9pOtBcz*GJ5VWvS7k6DdQ3K=CjtG-VD3y?B8O3dq5{*!rzyCTPuF_D7;zZ z%7!+k3lVMou@6BUWvC6>dh8;_fb2RNx*qFbNxMWP8+=+4wqn@7Mi?<{jU}h4&3!h&J($4?#No#x)d)vh$L$HI0gpa6Of6|F^0xDE(v5 zbYrCOmZeM}-~SHp538~S6PjP&VX1D|XzTNBc>2w!V<*5O3y|kn-8*GvU)j_56_)`}Z?XuDmPB2?h!~)w9>0sjJ zHmd%Lpf?O+(jviFwOCK3_xrZ#Ny7fsiKOYKFj1V#e1HB;<8O0o^0XgW{4kFjNMUDd zq`ILe7;iRi*r3El8aL-=q|9Xct34ODD0Jr!5^Ysb@mA-UX zVzv&2IWGO8$~i_gulwk{$9}>+7Y(Tku#%f6BG>(}_%ewkdP5*3Vn!_iZ|gi!!s81v zsYG%)s#LDZKzBKKA&GI?#LI*8`ZGQTZC8C+)MtRCld$c54Jgd`sM6w|Hqq(mXvIL+ z-uCdoG}VqlKYLurCaw5RvwFO`XsqCxv*$Vq({f{ zE21ON`L8HLD)_YZQACgHJSA_M`FRpDpQI(UP2}of8UCabOrf(V#()wrZoZzq9@#h! z(Z^J__Ecu%gKwrTZM<&AUob*g8gCa~n}3gqr_`o#FD*OFAChGBhtyfj8epQ-S%xTk z&(E>yX{2se+Jx`PbC(6v=tS+e7Hc;g8@#Pl_Oi8qOER>HS`Ui74{c4L@{N-Y_MWN* zD52cTOm*Xf2G6g|s(T4GG;b=EZ5URYC9t6rO9IZW4s2k++`?NluJy}6e|`*AtRGvF z^TYIcY~<EweIT?}#Qs)Xps~Dd`;cgEOuuA+b-Yye7(a8*UT+i)>e#b8mOo zZ=@B^YZLZ2&pGj_V!g@5@0w?72|t|;DFeMsJy60=yP{O3(R;7Y*|Df}3r(22h4EwF zb2M&dS#MoS#zoxo8}7NLG{;n9)&oybJS(mHrA{LeH$#YVMLVT1?Udz+Wh|H|e;7!DSQ~+x}e#!T6C*=c3W!@;Td>f^J z^+(H^z@4e2MPjJzFTZ6K9>^`|Y>Eu}g!S~@Vk^Z(f3&ZKVT#~;~fmjT-32NMcnSC^ViiKP@D zid%AOBI;J&xxT#GMbhmkP&t8UZ>$*E#{N`%K}n$Q!QDIeP!Yz*dI;KQJQ)qR<1R0RI3xBtHBrsInXhjWo#zoFNU*3{P7618c^sp2A zPNk&z%E@5dL=*ZMPQQIWk(9@rlE!=kA+y|0a8*-SyKD?nOn%V${24g^5CM_#Ir3(o zrttF2mQUv`+a3rk2%l^YM=%TAKHv=}y%ZT&wD8rvo%KO#AL+bAVY2~Wxa^;4Jm~q1 zjr12DCOmZFe)Z9C&4rln$QKlgIBI3c(@N+sK7`yIJ8B8xtv3}cXdkMFv@df;Wzys9 zj~c2IIN)kGw26c-0TCZ-CO^>+|0C*_YHQ`|lxpwFI%v;zqH#}&1MHLM%QV1tsmOhX zsqTS~+I$$QUmtBsVbYTd+Zd3DA)P(ncaJ6MC|}`U)Z4?qwsuObE>EtRl&6BWYnf=% z`;W20Ajm)B^=&?PPFA)SbLlRYB(Cu+atDoZ8E{cr+ut=>mhuCT6DieEdujtt>%((NImK zy?H@u{ss2%1#*jm~8Dr)ZuYaW!6o%~At9;qj2N zP*Pp%L_|MfK&=d^#xh#zA&Z0hQjMa=q{vqK$ii4bX`6%>%@+(zUDX~CaesWouY0I3 zYRuwN?}m{wj)N^ZbBNG#EI9%)evDCfEOcY zIhF13xKLa%yIU7NKZnnC%S7?j*%{x?zTP`O&DIOUHM^oKcFWiN#Phm#b%AP(7 zFUO*Ohmz`M`h4DDKKZDpO$dMX@6xjU<1z=n{$+sTj#~C;k;}XhbPOBQ6;OcH=l)LP z^6d0nbDZ!Dx7-nJwBN^AE;-*Vz$qzy6|r2b6{2y)G=;gYvszW(t_a$(9j_EJhk2gP zOcWZbzL36+*65?SSGM<9zF0;g7>dyQv!xoO#}=H0%69EgfTYbXXrX#f1GWn)h5;^Y zr+XG|y-MGRqXP|0g2LL}!ak`uWPT175ha22jeQp>$6|iG5aAbQ`qZvLJP9t?*A{hY zIbhSGk5D*1>X&M)C+(2@5o55l3-ruM)JND7#;L<_Fix9*C&bMB&m)-Of3Gzf@K%J- zm+viVrQ(qYqjSr83KEt86eq;PmHvm`jGp(qa7o1tqrwm0*~(_VGIDoptg2nKgNf_! zwFZcSsEfbbB?@Bt=I7Aqh>0DE>CSKO@wK7hQtluI`E*`Pb<5`4bK0|yRkY%g25WXAt+X_nlb$J=|Yra{rrXnjhT(fPn8T3KQi__xBpw@*%(;ahtJ> zi>vfhHJ`*URl>f#P@Cm=V+mWoWXXQxIG32ydU~>5#V7EF{0kFA)G31EC~#(%fv1K2 z0-+le57tnFBHx^Q7gZ@IEO|N!7{R6{!odH~p_As*R=chylMe6Fkj7gq`$5_FY0Gdu z|5*<=xH8^?iQBSA2s>zj%o zhZIc>ble4W&TQN#YbyH9jtYYFR^so;e#%OhtNeyLw@hL^%b*w|La`V#WYhYk1w)f! z>wV%DywJ>wjFU=P)z`02B};!{A2x*cX9)l>o4#o+^K|A3r>BC6SU!@HF@9R=&mXyDxO#jH$P%6T znr0GRa2g6Ad)T;<*uA{vyIe%f`j&*zmN*jYpy#JF(cvd`4R)yC4RkY0zSVDb8u=EG zO$6+)NR0AS>8-GQ!tYpWr>jYVn3RI)*ZY3Y;tydojr~jrl?M`z{%9&~4wX4d2Cq~b zu8-FZRPQp=xi-YKrczNDWI+@rz8n5iQR17vs1UF)Z!Wg|^XrmX-Je(&x7!*IzY#;l zE0sz&w6%q&KQJDRk;6#rtuM?!0$Jd}QJoyPl8PO~4xEl#+c|io65D+dNbqt(YyK#( zbg}5lmCEj=;4P~rz_eaZTYFktYkS+4UwQ4i;--hXVcVwqBA3>TcMM#Gzr<>8T!_Kr zoukeCX}RS3Zv?P{67F=|&2OkT0`x8>I$C|c{_Z1pV$Jz*);YU$YE7zk9OCYT z$(eqK`CBC}H_T(}_ve6o!!HjPD{fTgdH5UlB?sse3$h8+sa8IU+~#9Vec^_d;2gOS>ck^6D67&PcJ@U(>Fl1Rb5Fo2o(W0B5DQ}z z(w<89lbDYnOJq6N{@e%0BuL(w)efFR1ckvF%M;L1#=l6{a6|?4zDy6d`S3o zyDUo9x9Ovq@1|u>5)*4nFBwv56<_7;e=7pOHNA0sF6w|VHyui>xFD@+9*O~Af#cE< zDjH;J^+@28?VNpWrYHAMY{dOOXB;Aqc-2iO_zdOBW?i@|8QV_Z96RmGitN3ED=ohY zGHM)nay)nn5Je~o)`9re-(z%!9*2a^;C;M{(eK6vJeIG!1`aB;z;EopM=<=hwQI3} z2n6_!3Ni$0)dooQ+ixu#YgGFFU1UjgpEO^f>NZy^dsFpPmxrA@A}y9~NC`IYfO<;I zgpLu%4XM2j;);ttx1;jky^VWx@cE zLA>sDBG)<-8YcrOh!)o3urz(KEeP>+NIM%+y)?>IxMKImE9c>8RJD9>aBzR6j!#pG zHB_%VumgE$$4O4XAW%Wm(E4BwdmgUSGl73ZRnKCDg`-$5PF=jo{un*jF2HTt0_>;U zgBp@Z#B03PRCnTZPzBe_$o54c@2`8eU;yib@Msu35K^|+BTI8{@)M|?eSr-`)`y3P zy08EIvs#Kp820Z*hWjW0beIxDz77h?{<%F)`JIlt$uibg1NX`TNP{7RuL(R|I>3DL zC++|RGx9Z4P)?rySV|VmC}-9APOYnvT4uE~K;Yp#vBNgg22cWb0<>nvGoKhkS2mV~ zp4&Ae`zR+Z(0ZS>&BCyy@LlmY(H2Q=c=Pog)E7MA8lTbQ_z&%W0vRv zs*1&1^^2?ljnb%7BSwy)Het9STms_=kF{;$S`;kCP~`wF5`Iq*-p4qn2|t+N(j#D^ zD29S|;}pNUfK@OLH^ntG>MSc1PseScUZ$YYY}$)YCDLdsur=vZj`2f8FUGxM2RxB> zr`DMlpXcI2KLm^8y-Zao?!Bm9JxcXevLRzUbW2_W1~EPqQg#sworgmtxe7o^t_&j} z&-w5*lRGGiujGN^ynT4ogalzQm`fN9Zc6;rz>w{SL1O&D%mA zIL~ld;QCh*1{uROM7d?R7Ivf@Qy7tJVcAJm_P*w@0y*s4=DJ28%rl$}3@@dJl)-G= zK|EXhiD=sfSPxbBW`~1xIaBdiR_X5<*!O^rfr6~+or01G?T3r8 zQz0A@1NCF$O`iF>kcUmP4Ua`h9z(?qfi^+}*SnD+!?8xB;YZ?tR3nR_dZ+At2rYn! zL`2SRGg8L4c=>5}%&9Z5YNNuT5H+q~@s-sz8K_S=*v48CM73up0d~S&cW0st`=C5s zBF!AnQ>B{lezH-0mRcc%DuKZ{kL$+Fpe(t88s0p!MEc%`8F`doXN+>VjWn(+B)dEk znAW+V2@V#_ykHDrNiKxPVJBB$1j~&9W@IggZMq1fvr8GseFrcj6^Qg9k@mI`gTDV}Gj5Y$_~lGs8-d%%B?0)qBnDV`n8aYy{B%e- zdes00yA5dEFa&cV!V9=p0Mu0ruqwQ<6y`*znf-5q-ykA}PS{Tq#s74g1izy#P`Rh6 z?w4g)7bIe$;DsrgJ4TYD_yc8$EYe~~xrCR2M@}0e!q#FSN&vy*ixiZnSON4HNCgX1 z-L0pwZo*~2U?(#h%%i{+(Z2)*DPo#aVm}9W*ZqxYGY-9 zEZCy>HVd*F;nG_Lj)<{H9Zvfz|GMpj3iX1K(GCEk+uz_Oj7{HpRbFsB`FX@VLG~87R5uLAtVFz z;Jw_Bj?)18ms5C2_JZOz?$z`EW*EAFzR>q)kpYKz9N-%++x#Fi3OE#I<|80%yfAeo zY=xG~ML(3mmArlN{1nZ(*!R&zkn&O3T%$0&@aQpQx+5JdU2oC`LJ0dDdOS9wC&?zj zAOAVgMLnPe{%oA_!S&t^mK<4e&n43^h{b?EjTmu zU8LSwtyU?rp>UV9W%GBYetV#OeEcGTS|LzJ4Saci`eq9!TH>sE7#9IiPt}z1wDRo< z9Bcp4eD(c%v*A$qx3TJfL^jlk@9zlzgt9@*c4b%j$o6l~mF?NFV@J_GxuZzX`DLIe zN-0srNWaF6w8fN4N)0adJtsZll%Z$GE~>U>Q-N>Vrz-62?H$XR6%!q`r{0Ork7;(= z7oHW&Udq#X7zPh(y0CzVgl9} zS$tByfBI+1o;`ciJFE8eE^V3C$e?>-1ToQyR{lGTc$uXtTA8ghnacp)gak1p{s2z- z+3^o8zOtsa%y9LF zQkR+iEBr?qQsd@B2kx{^tqZ&J@MtV)^E&Ir*I`3|^ZVVvj1hl18hIXt)vVno`>o~5 ziu32{p~fnJQyXOXw2-%%t#rBPr)>J=`-b#$N`{9MzgXVnD++3Y?Kmvq+nU9piIFkh5RlhrpKaTepT+ zJD2cVoTM=f%!U%aom!s)QWUNyXLb#SnA%YDis@=q>wIZp&wgAZq6Dbv6w|@)p850d z+}TsP#$BVv%U`u?N3D~O#Y^dYk}oaaZkxFU40%j)Cpo%pohaS{PP!1?hkoJTP*9kj z4}jCcLrgj@#(wH{`H<$LRb?$7Od8#D8v@H2Qg`E5t1R#+;iQhP)q>f9da^+$M9 zbs>w{j?t0VcH6t7!1XpcDRZCPn&LX`+Bus_RnH>TcZ`-@&w|!Dn^H7IVBF!gYikHU zS<`c5h=7w>CK3biasRP+Kg(Z_A6oOdMI;4^=zLGHFI2E_Xcj>%?7+-m4oBajvjd}U&6;&*1Irn_G8e<8 znSkxWhJ(+mHUIh{&cN#~t&+WO8P+t{Z5U>lb!yqBI`Mrc`tv8avX5i-xnVz?W8qNO zSB)zQZ43slDIHabM*}oCb-rx>^xGz?%_Y}F+dH)qK4TFU6|f?l@gf#=4bJuGx>LQ{ zKx~ysZBCTg0Ka_nqbV(>=4*LsCYmpduLyVldli-qcpc zv*Q&lUCn3b4oLaj%1Lhb zk48qMV-&>N&}EK%AZVF!SZ?cAKhu&2F-rM9wd#IUUmGPEv*?*{YDT6P;P0;S!=g8i zvj=vMKUH`aOQH>uc!HMN{Hoyk(N9Slg#7T6qmk16M{bQ$OnzazyMoacdK!*DNsODh zv{Dq`1(A7D9^R!<+V&^!ceS<0()-%RK-{6% z0djm|7}^ee_D6c%)|NwW@Wk<;rSI8$_+aicr0?B8razeUULfdp9%%as%6-7nzldVF zcx|`-L#gol+T=iqii)a-TSNG;5nXy`hzoR=liP&}!}rpw1q^GJPfwQf_vnZZ>?o$V@j600`o8lT3Ai)p@qA zJvB||Fh9nX{R%t0OV=D+h#2wdQraNH z#JV!DHT>5d+yDMjBNe>dyr#xbhyOi~a_AuqMjx-#8i_jXS|&_*w3mOtuXxsyAgHfU zYR%Fipwe^gG)`rd2gwz{0j`nz@eC(|ut=vSl^8&e$A&!!?*FGSs5KR?tsz8|e>yz? zHyc<6d^b!JBSSbN5*;Sm9z?xd9y32}?cguhj$Y=h!Z{onz9Lxcn5V(cYAZ9rGea#klPC=J5r z57IPzA8VC_7 zKnjY7ZcDU6FkOQpmv$W%z zA@PI(jp=TXQAn}Rz~=C+?yl}j*qCq;fP@oCEJ zgzGxBJU7pKSj=i=w3BOVZzGDo8HrUO2`p5#wkV{`^I09Mj=Vk0Tb`oH3V&Mhu$)yl zEcNab&H6{%f-Vh@w>Cj|172jJJ`fq=Ap*Z^Bo~*<~NMT!sTWq(DoZHF(J_n5X_dt7qQfZdsNv7~ z@0gMAqe|Z@)KCsOCXiCk*xZ5%KHzvj;*H*0Fu^A_geld6vvVD{T8^l&4>N9Wb)z`A z)hyX~km~q~`EcY!?+=c}Yc^TM?8{oR{_Z-vR!NEqh{?r6S(=;;ZHxv?3nSj<2M4(M zD#DM{$Fc7wo(D)9P$nYpwKGUrM@lKwjmp+!@qzvM@ocg=TQi$_UZzz?hMI8h;%rD~ z!Yp!}fSkIO1v`Rx;iOfrM*L3iYiDf4l`NP;8^qUQfFb>gsdnIjAI#Hr z)>jd0qQfw?fzm!0!tI8fN#rPqMur4p|G3&vMh<}JWXvM2J@$Wu$N~h6`r|4(?>}At zzcEw8#W$FY61GYPE9)zoo9|RqR7l@sQ|H|m2o#E5*&XfkqzBB|c9>Y?%D!cx`~&Z_ z=<5@kIrO*!K?vOJawnZ}r#n4iD6)UiaGnimgIl8skRsLt|Ao*pVc;z&F?1FgA z7xBS!=klw_k&Kg>^p3s#qAF}N!lh9wL8{Fsli0{=XLiX%Wf@#9L$Gz<=^DU z07O7XgRC3QXx7G`&C)F=Fbd$FRCbJ_OE}+MmHV*Drkun*E zvLd|K47mtMKl{6Y;iv_@NWFZI-V}$uhzZ6wD4@{Nj$2tG-w*6FJaj&G7B?htj4_}> z!tPFulm)W=a90jKIkehFjs!zRlfAsO<6{14XAJL0JIkDTtOU*z`2P%mZ6Bi`w$S-$ z!}eayLLH@vgQOTE7tl+N zuHf6-kt$m>Y6UKoX^@=`tY=B!5YUmV0gSV5irYGsls59y+A4GE1G&aj^3%Z?O*lyg zk|HsGj=@}UI+>;qrtdQfYhwfqr&%2vi>aY0$*i$f0H<7l4|L%U z`96+rQLonV;jQz*`xo&r)nc-tIQz{8I2Q8Vj~k*5tIlf9m1=G#r4YwIaLrl4=MHaC zflGhKVhju?ZffoT>=r*#vF)vX+lCjcm$JW&4`aO#(AWS U-}KiASQg~5z}xM*D=+@P0FT^pYybcN literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp4-bracket.png b/docs/mechanical-verification/cp4-bracket.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e99f6d302c3a3e7c54196239ff222387b5d8d1 GIT binary patch literal 28410 zcmeFZc|4Ts|1f^f7>s>HNn~ilA(XNdMx;$qR8%x0p-zgD-Ix*4&S|kks1qs9$x@aXDLaE{%rM*Uy2m-^^Euz=_xwR^<%T6Wv74i@S zDed01-3@}I!JkqIXc_QJv@}Z!{8IMw-0i<_AM^|O8x8)$|310j0YBw}cI*g|e1?B~ z{pD2)1nEM%w{JTbku}lBxUl96u{#oSq}?hJK(WxBzME6|yN+qxn%>g+%J{3#&h9lo z+M?F~W`4K!>%H&Z*2b5+EK@sQk7keR*g;sbM~oWd=nBH{$pQ7}v!ug*hx|k>!}X`W z;UALkJTTZxVknkh{{Au*cLOrNDW=mLU-_QtXkCT6}eP*6|WH%5{Q zmK%h#(-B4O*4vLlK~RMa0zdX!^-!qG+gb8$}0tp^kL2hafT=10j}g4(((Z zevkp%SgC+*j#~?e^FNYWGNOld;YW>~AylsWHIkvgFHN4DfdL#&Q3Ur%agLBe)0D{> zLIl{`Wi^D{KdM0bQil8sycv`|x$fp=+Qj|8z#CG75b~+t7ZxQ;ZdRx z2SN5%!7Y%RV7&Ty&}UxS&-HS}c89NDGDNO3L|r3;>!-nWrSYRvJqLe7!hU%KhTvP3%D0drd>`=$4}^-aIccWH51L*E5bFK{ zuC884<)<#;SKW}Nk6El#rHrTNVGNLfP^y3*jMD01?kP-b&Rq+cG{DEwT?HP>n;T#a zHe^N(FM)E_uY}m8WjL@K<|>4yI2ei!4Vbcb^^JNh5{irl@GiAZ=XebNR@Gi9MM!nX zMFXk_-UD|dYX?eNeh+QR`-{w!L*Nuk_sNqoc8;g!NfAPGY(11-!HY|-+W4Oh!aWl@p(26wm@b6$^33LNeUPH7vu!!#l>2 z%;znds7aN-AP7bnit?t@zVp)1)>#LLl|k)AytIgyI-&2^zLv#z ziO4`st^vFRn5m04B7!5&$dRvpfxkQoBvE1P>u^ajR8g~8n!ZN3k`^=bXpwV@ogkFw zE@BStqyf}&i{xz+Rqka39mZD&km!41)`D-aIza5ihyA>4H#9xcccB@wIwT*r3Y
g$_@LL#RM7T~Ns5bD%O&u|dO=6-q6X2>E` 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp4-supplier.png b/docs/mechanical-verification/cp4-supplier.png new file mode 100644 index 0000000000000000000000000000000000000000..82fa8afe7b14199b4f3a6243ac172208bd33689a GIT binary patch literal 134026 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

Dm4>9qU)1~lS(+)E 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

+dqwCrCT9&vlyRFkM7 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp4-verification.json b/docs/mechanical-verification/cp4-verification.json new file mode 100644 index 0000000..7ebfd49 --- /dev/null +++ b/docs/mechanical-verification/cp4-verification.json @@ -0,0 +1,7314 @@ +{ + "version": "1.12.0-dev.4", + "offline": { + "status": "PASS", + "groups": [ + { + "group": "python", + "command": [ + "/usr/bin/python3", + "-m", + "unittest", + "discover", + "-s", + "tests", + "-p", + "test_*.py" + ], + "cwd": "/home/adom/project/fusion-mechanical-build", + "status": "PASS", + "coverageKind": "tests", + "returncode": 0, + "testCount": 194, + "seconds": 2.021 + }, + { + "group": "rust", + "command": [ + "/home/adom/.cargo/bin/cargo", + "test", + "--locked", + "--workspace" + ], + "cwd": "/home/adom/project/fusion-mechanical-build/rust", + "status": "PASS", + "coverageKind": "tests", + "returncode": 0, + "testCount": 56, + "seconds": 1.57 + }, + { + "group": "dashboard", + "command": [ + "/home/adom/.cargo/bin/cargo", + "test", + "--locked" + ], + "cwd": "/home/adom/project/fusion-mechanical-build/dashboard", + "status": "PASS", + "coverageKind": "build_only", + "returncode": 0, + "testCount": 0, + "testStatus": "NOT_RUN", + "reason": "Dashboard compiled; no dashboard tests were executed", + "seconds": 0.032 + }, + { + "group": "portability", + "command": [ + "bash", + "tools/check-portable.sh" + ], + "cwd": "/home/adom/project/fusion-mechanical-build", + "status": "PASS", + "coverageKind": "static", + "returncode": 0, + "seconds": 0.114 + }, + { + "group": "shadow", + "command": [ + "/usr/bin/python3", + "tools/shadow_check.py", + "/home/adom/project/fusion-mechanical-build/ab_client.py", + "/home/adom/project/fusion-mechanical-build/ad_client.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/AdomBridge.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/__init__.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/activity_palette.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/app_state.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/assembly_bom.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/close_document.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/cloud_documents.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/design_info.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/document_hygiene.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/document_info.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/electron_view.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/electronics.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/export.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/import_file.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/manufacturing.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/__init__.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/assemblies.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/assembly_state.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/bill_of_materials.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/core.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/exporting.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/features.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/operations.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/purchased.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/readback.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/sketches.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/mechanical/transactions.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/modeling.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/open_electronics_file.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/open_lbr.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/parameters.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/physical_properties.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/screenshot.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/commands/silkscreen_capture.py", + "/home/adom/project/fusion-mechanical-build/addin/AdomBridge/http_server.py", + "/home/adom/project/fusion-mechanical-build/aps.py", + "/home/adom/project/fusion-mechanical-build/describe.py", + "/home/adom/project/fusion-mechanical-build/eagle_lbr.py", + "/home/adom/project/fusion-mechanical-build/fusion_detect.py", + "/home/adom/project/fusion-mechanical-build/fusion_helper.py", + "/home/adom/project/fusion-mechanical-build/fusion_ui.py", + "/home/adom/project/fusion-mechanical-build/handlers/__init__.py", + "/home/adom/project/fusion-mechanical-build/handlers/close_fusion.py", + "/home/adom/project/fusion-mechanical-build/handlers/dialog_classify.py", + "/home/adom/project/fusion-mechanical-build/handlers/dismiss_recovery.py", + "/home/adom/project/fusion-mechanical-build/handlers/fusion_ui.py", + "/home/adom/project/fusion-mechanical-build/handlers/open_design.py", + "/home/adom/project/fusion-mechanical-build/handlers/taskbar_overlay.py", + "/home/adom/project/fusion-mechanical-build/install_addin.py", + "/home/adom/project/fusion-mechanical-build/kicad_lbr.py", + "/home/adom/project/fusion-mechanical-build/library_bundle.py", + "/home/adom/project/fusion-mechanical-build/rust/bridge/src/attach_orient_block.py", + "/home/adom/project/fusion-mechanical-build/rust/bridge/src/inspect_bodies_script.py", + "/home/adom/project/fusion-mechanical-build/rust/bridge/src/make3d_orient_block.py", + "/home/adom/project/fusion-mechanical-build/rust/bridge/src/make3d_placement_block.py", + "/home/adom/project/fusion-mechanical-build/rust/bridge/src/pref_script.py", + "/home/adom/project/fusion-mechanical-build/rust/bridge/src/routing_planner.py", + "/home/adom/project/fusion-mechanical-build/rust/bridge/src/routing_script.py", + "/home/adom/project/fusion-mechanical-build/server.py", + "/home/adom/project/fusion-mechanical-build/tests/fusion_harness.py", + "/home/adom/project/fusion-mechanical-build/tests/ralph_mechanical.py", + "/home/adom/project/fusion-mechanical-build/tests/ralph_support.py", + "/home/adom/project/fusion-mechanical-build/tests/run_verb_tests.py", + "/home/adom/project/fusion-mechanical-build/tests/test_bridge_contracts.py", + "/home/adom/project/fusion-mechanical-build/tests/test_document_hygiene.py", + "/home/adom/project/fusion-mechanical-build/tests/test_fusion_harness.py", + "/home/adom/project/fusion-mechanical-build/tests/test_http_server.py", + "/home/adom/project/fusion-mechanical-build/tests/test_live_feed_drain.py", + "/home/adom/project/fusion-mechanical-build/tests/test_mechanical.py", + "/home/adom/project/fusion-mechanical-build/tests/test_mechanical_assemblies.py", + "/home/adom/project/fusion-mechanical-build/tests/test_mechanical_transactions.py", + "/home/adom/project/fusion-mechanical-build/tests/test_portable_tree.py", + "/home/adom/project/fusion-mechanical-build/tests/test_ralph_campaign.py", + "/home/adom/project/fusion-mechanical-build/tests/test_routing.py", + "/home/adom/project/fusion-mechanical-build/timings.py", + "/home/adom/project/fusion-mechanical-build/tools/abrun.py", + "/home/adom/project/fusion-mechanical-build/tools/adrun.py", + "/home/adom/project/fusion-mechanical-build/tools/check-bridge.py", + "/home/adom/project/fusion-mechanical-build/tools/check_portable_tree.py", + "/home/adom/project/fusion-mechanical-build/tools/freeze-contract.py", + "/home/adom/project/fusion-mechanical-build/tools/gen-readme-verbs.py", + "/home/adom/project/fusion-mechanical-build/tools/live_feed_drain.py", + "/home/adom/project/fusion-mechanical-build/tools/package-mechanical-dev.py", + "/home/adom/project/fusion-mechanical-build/tools/promote.py", + "/home/adom/project/fusion-mechanical-build/tools/shadow_check.py" + ], + "cwd": "/home/adom/project/fusion-mechanical-build", + "status": "PASS", + "coverageKind": "static", + "excludedTemplates": [ + "rust/bridge/src/attach_template.py", + "rust/bridge/src/epg_template.py", + "rust/bridge/src/make3d_template.py" + ], + "limitation": "Unexpanded Rust string templates are hashed but cannot be parsed as Python source; rendered variants need separate tests.", + "returncode": 0, + "seconds": 0.867 + } + ], + "sourceSha256": { + "BRIDGE_VERSION": "3096269a66dd1a62beeadda33bfd31b19235388bcc0ecb77ad982c76a39fbb54", + "ab_client.py": "f6a0a55fdd325ffd3fbae5c7acc62a552f94b415e54524f09be85238c115d6a5", + "ad_client.py": "c324775d17ccebe671acd54818eaf801e3f3136f5586ec9352331d98fce4ea0c", + "addin/AdomBridge/AdomBridge.manifest": "c28064a67a997ba5b72b5ac5561c32ff2f67c28a845d059760e76e4eaa3a7ce7", + "addin/AdomBridge/AdomBridge.py": "a7de03f4e554dd98d96caa675ecc5615c75d0a98d1da4190b6feebbc26602c51", + "addin/AdomBridge/commands/__init__.py": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "addin/AdomBridge/commands/activity_palette.py": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "addin/AdomBridge/commands/app_state.py": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "addin/AdomBridge/commands/assembly_bom.py": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "addin/AdomBridge/commands/close_document.py": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "addin/AdomBridge/commands/cloud_documents.py": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "addin/AdomBridge/commands/design_info.py": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "addin/AdomBridge/commands/document_hygiene.py": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "addin/AdomBridge/commands/document_info.py": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "addin/AdomBridge/commands/electron_view.py": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "addin/AdomBridge/commands/electronics.py": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "addin/AdomBridge/commands/export.py": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "addin/AdomBridge/commands/import_file.py": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "addin/AdomBridge/commands/manufacturing.py": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "addin/AdomBridge/commands/mechanical/__init__.py": "43c79c74ca0f9bd4cebef92f5cee7148437e5002793120c38f29a50e5d064817", + "addin/AdomBridge/commands/mechanical/assemblies.py": "7c9b2fdc266db0d5815483d1d7e962e653c70990b03b99448d69d193804bf477", + "addin/AdomBridge/commands/mechanical/assembly_state.py": "5d6edda819b597775e8017b07d9f8706d0fe62cc94f17f2eeb55c28e6021982c", + "addin/AdomBridge/commands/mechanical/bill_of_materials.py": "b2bceb99479da4fa80a4ad00b0ba8b2eef00235b7cb24867e56a6cd30cb7e34e", + "addin/AdomBridge/commands/mechanical/core.py": "2e6c1f0fca2a797ff11205105d977922a43e83e45e6f14470c3c627ccb0c7238", + "addin/AdomBridge/commands/mechanical/exporting.py": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "addin/AdomBridge/commands/mechanical/features.py": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "addin/AdomBridge/commands/mechanical/operations.py": "0ac774d0017769fecdfc6a74b9ce4beb35184a4d6048f94bd7de57b5e81b52e5", + "addin/AdomBridge/commands/mechanical/purchased.py": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "addin/AdomBridge/commands/mechanical/readback.py": "1fe32ab93bd2f5782efec0460f972bc4646eefc837603319f095aef262ae92a0", + "addin/AdomBridge/commands/mechanical/schema.json": "09318b67924d9b5cff9500ba172b42880deaf028a6e639713d33cb88a54855f9", + "addin/AdomBridge/commands/mechanical/sketches.py": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "addin/AdomBridge/commands/mechanical/transactions.py": "009babdcf14bcf78872dd5df98aaead33c81246aed9f106d8f7b92d3f8536cec", + "addin/AdomBridge/commands/modeling.py": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "addin/AdomBridge/commands/open_electronics_file.py": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "addin/AdomBridge/commands/open_lbr.py": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "addin/AdomBridge/commands/parameters.py": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "addin/AdomBridge/commands/physical_properties.py": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "addin/AdomBridge/commands/screenshot.py": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "addin/AdomBridge/commands/silkscreen_capture.py": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "addin/AdomBridge/http_server.py": "d4ea91760d8c766aef88a6e0588e2c626a9f74b01886a1bf8a6a6d3b6a6be76f", + "addin/AdomBridge/resources/cam/jlcpcb-2layers.cam": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "addin/AdomBridge/resources/cam/jlcpcb-4layers.cam": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "addin/AdomBridge/resources/dru/Adom-InstaPCB-2-Layer.edru": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "addin/AdomBridge/resources/dru/Adom-InstaPCB-4-Layer.edru": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "addin/AdomBridge/resources/dru/AdomDefaults-jlcpcb-2layers-accurate.edru": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "addin/AdomBridge/resources/dru/AdomDefaults-jlcpcb-4layers-accurate.edru": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "addin/AdomBridge/resources/ulp/detect_layers.ulp": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "adom-bridge-fusion-manifest.json": "201533d7888a069afff4db17a4e99f0221afa97260d409c013ae8136b96cf475", + "aps.py": "872325ad79d780e3438b44ead8c704e7c95919c17eb467515e8a7e38dfe13c76", + "bridge.json": "c0ff277e550b042dcd6351731ec3620572299c2a4bbe4ecf161d83103b58151f", + "contracts/describe.json": "9af52cf2cea8dd46356c49c074541a6be55c88bdec1966f9b522d9b6b93a3f28", + "dashboard/.gitignore": "b53ee26e6ff1da219b0563333a76d2c9ec19eec713d6ee54e11a1edacb0e9f3d", + "dashboard/Cargo.lock": "8828ca3a21699aca9fee6fb90081b85eb0e3f6b011e73f3bd262a6098a01b21a", + "dashboard/Cargo.toml": "a8a0246edcbb442093f1831122a0c0038e8616fda4e473683487ced03c62ccfb", + "dashboard/src/demo_audio.rs": "9f0bc1252a3469ec20cb2e3c04c1357b116a0ea9c41b20ef9917c85b1dba2b10", + "dashboard/src/main.rs": "853700ca597d7b9bf458a0af574ab36dd47d9eb951f10b704714c6250746762d", + "dashboard/ui/fusion-icon.png": "a5554421f76c39e3c9a271a95af1f4a623c416381d4c81e2413604b00dd71f5f", + "dashboard/ui/index.html": "319be1ee31938d4873b00cbcf8e4cb63187ba5960493c249b1f5a82a7a854254", + "dashboard/ui/quick-actions.html": "8f7e61c684d96c242ecd124a608b634a5cd14e29e1108d5f3e5cc6582d1039fb", + "dashboard/ui/vendor/newbie-panel.js": "5ed214867df8d16e7c5c50f2508361aa41c04547bc42caf90da7129939e7b8d2", + "demo/audio/2d-board.mp3": "aa3d9708a741395391ff1291aa80022faa82c0ede318aa475d68f099480da809", + "demo/audio/3d-board.mp3": "0e186a8724a661bded904d2fddfd734cea806fe4fc5fd1bf156f9b615170b8ad", + "demo/audio/3d-package.mp3": "0c8d3c0f21beb7a69dbdeb8c935897c5b6f138b93abb3fc56bcbee2cb4c0be20", + "demo/audio/aps.mp3": "1d8bde4b955db04e8328e1dc2578c443217e7300321b9d4ef33df218e91315cf", + "demo/audio/datahub.mp3": "51da3bc18c696baff6c670cf1caf3e8592d431e801a3e4cce927f12c6a2407dc", + "demo/audio/device.mp3": "25eafbaabdd04ed1671e790a0052c01c74ce6ecffe99f2858edd96e8e123bdf0", + "demo/audio/exports.mp3": "ba26a1ed4e7eccb289971126d747e4bb2fa84dc149fd14b156641cb4fd702684", + "demo/audio/footprint.mp3": "40edb0635be76e07d55be8eb80a80b599baf8be3ff590b678d7f76837ee3cab3", + "demo/audio/launch.mp3": "0fb9eb73f8190dd0104a63564f21851d43d56869a2f806b59a64f37c49529a4f", + "demo/audio/library.mp3": "266fac1e5d9ffadae8ec2f14bec83860f872fa8df02bbc34bee017c968120c83", + "demo/audio/make-project.mp3": "a820c7e290493f77841f445a34fad8e040592eb1cbd7472dcee8d5d0c4f9d285", + "demo/audio/mcp.mp3": "e20fed5b4b379392cd07577cfa4dce0cfd4d0ec6c848f9d8319d7327c57de2ff", + "demo/audio/open-design.mp3": "c0995723fc3fc96821df77589c9790cb79e5d21935b6a246d3912d07f9051c6d", + "demo/audio/schematic.mp3": "883aebd1fa3f0082c57c38a4cd252a46360581db37ddf7dfe057a0b7bfa141ee", + "demo/audio/stage.mp3": "6a644f2d40d60021e7aa51c29eec8c2472354f3ca6970b7e6f8afd96f7165c2e", + "demo/audio/symbol.mp3": "a21241431172fb50e47c85a9fcd8cd424a668f884e0b98fc941c4652c7155e06", + "describe.py": "b6980ad6438d57838357f21babe9e3a421d2e8e8b72565aec593cd4312d5242e", + "dockbar.json": "0de36d6305ebec71d5936dc1d29274ee8215d5fd7302f8459658a821d8022f00", + "docs/img/dock-fusion.svg": "365d419a49a6a79f0b88460a067352dd5506d5dbfa1311f3e70d7484103c5cc6", + "eagle_lbr.py": "b1e4900ec49ed6bd5f1367869a2d9f9ff39a445fc7c0ef9c0443cb42a7008cdf", + "fusion_detect.py": "75f5f65fcc4f72373840a684b786f06a79700d0776d6a2000b9ad337edf6bd8b", + "fusion_helper.py": "d53ba9a940d52c42bbcb49c93b96f70bca7ea52080da0e94d1a4a1e5765b979a", + "fusion_ui.py": "0767b1321cf50d53e29fadbbbd21d418a8b886c208cd82f39c6e136abace5dd5", + "handlers/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "handlers/close_fusion.py": "fc962c743bebb33e5b43f8d660b2c84f3c197e6770571052d4080f8e50834d53", + "handlers/dialog_classify.py": "c51895f289589f065b6017d2857a83325051c41e5dd9c46c6e5396a3f3d0b7d5", + "handlers/dismiss_recovery.py": "ab5528e38fa6af44620e2b38ff80c306981ad843fca0d730adbef14f27083f03", + "handlers/fusion_ui.py": "33e209bd784f17986bc8b6b5016ad0c0c519e77093ea5498c8fe49d24e4470d9", + "handlers/open_design.py": "cee0cfdea20c259c7122e0b6c754048b57a54fa13efbd424706568d52bbacbc7", + "handlers/taskbar_overlay.py": "5e02457667c879cad05ca34e934c2034354e489a4d9c1c4701d10ec396456d78", + "install_addin.py": "3c549bed77bca1b844ff3823aaba5da079f9faf6e41cdbff3cd71a058933bea0", + "kicad_lbr.py": "1e0407a64c8bcac8b2a191fbab7b4b0f11455e710035f4e05bb5bc321fde58cc", + "library_bundle.py": "d071b600cefb20243259a8a1e27eb3edfbcefd1c502503ac7698ce0b919646c6", + "package.json": "44b6e604012163c9e28e99d0d8e682b651499261868f1c5edad55f2e81538954", + "page.json": "316f1067b4e61acd9e2384cab88a6b1452889b52155634cf5068121ea7ffb830", + "requirements-test.txt": "c144e88f7a259b078519c943f54987885467114d211de382f1e2ab4124753733", + "resources/adom-overlay-32.png": "23014fd52b3a531e4567837cfed0668843353e02ff7682e06a1c4a2f57d394c5", + "rust/Cargo.lock": "85644814244aeeb857fb1837f4ee64f70d676c24baa35b7bbbd30e323d5ae9bf", + "rust/Cargo.toml": "ea7cbd50fa7791ec6a8f26cddacc314725c8a9b232fdba372ab6329a45b1608a", + "rust/PORTING.md": "cdbd1c7795936a73c4fa294964cc89937b32854b7d1474668c55c781e0407d71", + "rust/bridge/Cargo.toml": "a4a29bcb211c9713f78f8c6846b8cd84d3868373d4b5cfcb8ffc82c264153177", + "rust/bridge/src/addin.rs": "1c047f60ff494524886c3042accc6c8466363dde9ccfc7f0cea7f639eba5a38a", + "rust/bridge/src/addin_install.rs": "aa75349181977f7985210c56688621b62744a23f3083d69ec9e4e544fb706092", + "rust/bridge/src/aps_signin.rs": "21d01ee554dd95e61d550860b1d3d090d15e1ceaf99c5a965d16a712ebc67686", + "rust/bridge/src/attach_orient_block.py": "e6fd837dad1b266f999202224665c6d9ea602b8afea13bd759c9cdd735446cbc", + "rust/bridge/src/attach_template.py": "c402f7ec4a928280e38feea2c5a864d8e93496840473832db73908de76f35c38", + "rust/bridge/src/chainexec.rs": "4d02d83422ab70485ef413c87a189acf980254954430781dbafafab074fa01a9", + "rust/bridge/src/chains.rs": "dac4d311cae41e7a086fa08931afdbe2c29dd9f6ff7ecff74da8f92278aedc4f", + "rust/bridge/src/demo.rs": "e2069c22d85e48869b934b17e6b07f91d0c137848cb25a0c6c29d0eea2a6df31", + "rust/bridge/src/electronics.rs": "3a83fbe0f615db400a74ef5a3eec949d615dbe4e4f7d065af42b951630967984", + "rust/bridge/src/epg.rs": "0ccedd7192514b02ceffc082508362d4807e3a27fcf6dd4ab0e54e11959891f4", + "rust/bridge/src/epg_template.py": "b9bfeeb270e8505d04625d41f69d7a4a48646478c1c64e1c9e171c2ed7db40a1", + "rust/bridge/src/epg_types.json": "be5fd128d7becf98002e3ce257f5a2f5c630480a385fe7d5319800c62e19636a", + "rust/bridge/src/etiquette.rs": "2ebc3ae027f1a976c6d1265832507bafb32d14732295d487602093dd9e2c3822", + "rust/bridge/src/fusion_prefs.rs": "2aee1d6d12545aaead793719589484a1b1b628230bc0849cbbc0eb3d485a0634", + "rust/bridge/src/fusionpath.rs": "e9d7b98507c70d9d1fccb35f312143e0f6a05e5462b6926b08a2cb48d17e6a45", + "rust/bridge/src/inspect_bodies_script.py": "5e1cf1a6516b3fc4fc705d1dcf7eb4dacc23bef9124a2e0cd6f13dd977cb7dea", + "rust/bridge/src/janitor.rs": "76b64e601dd22f68634498c39829ecea6003cc0648fd645283ab242c3e61df18", + "rust/bridge/src/launch.rs": "76054e794a63abf15defc89166703f0d3da87531a4ea7c9bf2123e1e279dac14", + "rust/bridge/src/lbr_wrap_parts.json": "f237770833807f095940f8b8acbf544b0ce337f44a9b0593eef336a46e3dfb29", + "rust/bridge/src/lifecycle.rs": "7a909d100de6cd57779ab9bb9dcd786293b6d531ce1aeff2e7555a85908b5057", + "rust/bridge/src/livefeed.rs": "08d1f445b524aa602fac937b28bec3e2254f3e7f9405b09a932d8e39d0a1c3b9", + "rust/bridge/src/main.rs": "99a490b649048d57503681b0035064c5ce832c0a810dcb9d05c58af838af9a52", + "rust/bridge/src/maintenance.rs": "f5e98a22248c217edf399993cf8bbc2462fba781c7de64d1c5f8c8141a77a5ce", + "rust/bridge/src/make3d_orient_block.py": "8bcd3f2b86602ea74229a6fd686db5b306d49085d0bf4920b7e37c1fa4b186e1", + "rust/bridge/src/make3d_placement_block.py": "9aa001d7eae80edb8a8c23da55ea60f5af8917c7e705896099c35b5ac4b9d879", + "rust/bridge/src/make3d_template.py": "ee5506673f832002796f227c71d693e4879867c7edcdd24b80abd22602d89bc5", + "rust/bridge/src/managed.rs": "941398dc076d4c7189a297cba0361cd5823687e7f64953c68575212da8f3ee62", + "rust/bridge/src/mcp.rs": "f71d03df88067d4d5e20b4a7cf4822ace25b114db8d361b5dc987962e41672d5", + "rust/bridge/src/mint.rs": "85d6430a129bc2ffc5ac005656d6f297058413eef2ae2e6532accd85c247b187", + "rust/bridge/src/orchestrations.rs": "d996f1499047e45af23be2ea7ab31f6b7f926d85cb1351d61b54bd2b31f49af0", + "rust/bridge/src/palette.rs": "dea46dbce7c7644ee2f366ab7a848dca77872e8224787b784324dbe2d3dd6541", + "rust/bridge/src/pref_script.py": "d057d8240103313483bb8627a4a980553e8cc5901dd62249e87d97fd70935f19", + "rust/bridge/src/prove.rs": "4fa3bab3277f885c6017ad368af80d161f8fb5f9c8d0481ef42d0892e2ccd37d", + "rust/bridge/src/readiness_exec.rs": "f6653592d7ec05ebbf6eb548b7484fc4e99a14970e87fc486de6810ca810ef14", + "rust/bridge/src/routing.rs": "42851d9f6f00be76199f9ce3f038f57ac0ed8b1f6a31f8d9e20fe0ffa442302c", + "rust/bridge/src/routing_planner.py": "d60d3cd24c702cc6c6ce5f4eb8de7b859b894d6a8dea24fd8b0cea1c1901f303", + "rust/bridge/src/routing_script.py": "6cf55372ff5cd2e7e4e64b44b9c6f87a8c67f1c20251be6459bc930e453ca7a2", + "rust/bridge/src/seat.rs": "62029258deddc252ae016ba2afcd8904cbe697e5cd38a03302f6798018317f49", + "rust/bridge/src/services.rs": "73c5c017b8a943521c7ed0a320ca58a8797af6369fbf64bfd26c1200e3dc580c", + "rust/bridge/src/signin.rs": "cb4dcbbabaf83dc1dbd8ce2e80fd1733b6a81c4fbbc4cf20e78b3cba7c37bd61", + "rust/bridge/src/small_verbs.rs": "a05053ce098062498e7f9b912d12e5998b93b8903f7bec4db243cf22c4a0c526", + "rust/bridge/src/testproject.rs": "02b4d1ec6ab2d196b396f57f58b07e0bdcc522f02524ccbedfae4a4af5f90e21", + "rust/bridge/src/timings.rs": "b41fc1604c44f403bc1fe51f01119c19d62e93d5e5d393c2f733539ad2d6daad", + "rust/bridge/src/tour.rs": "bec9eac6fa40075325f66280f3509633b26cd18b3878b3e7cd84696e4d1a2bed", + "rust/bridge/tests/fixtures/board_info_sample.json": "f2c8688bf3f877f7c13efa6510d73af4792553e8325e91bd4f3be14c20df4ba6", + "rust/bridge/tests/golden/attach_script.json": "506b21ab31ebe8a7a948056bed532186decefabe220e739d1d96894f3caf5495", + "rust/bridge/tests/golden/epg_script.json": "748f7b1c161cdf663cdec3e720714fec0d3757819d96b645b38e3ac5dbbe338c", + "rust/bridge/tests/golden/make3d_script.json": "80ff2d73c9a7c88e5170935d292a8475ef963e324957200c6764b8342356d1c2", + "rust/bridge/tests/golden/mtp.json": "1d61ddf58ff5d121f878cb3304101ff328fb1e219d99652894b34ec2e172fe35", + "rust/core/Cargo.toml": "317c07a50b175ae3fd3ac9ee82065568738e3e84fbe647612c109ecd7ba076dd", + "rust/core/src/ab.rs": "f71893214420b66fa75abce0c1ebaeb763fa26b191c6d420abae6201acd0c943", + "rust/core/src/alerts.rs": "e51914d3c4a8122762a45c0ee825f0459ba4197488b319fb755a4170c405b593", + "rust/core/src/aps.rs": "a5bb2860aa8a2b155f41280e8abb1cb8a01fcc50379b1c964f032816d3a2c4fa", + "rust/core/src/contract.rs": "69ca49c4469c323887efecb10333b51ad9f6813fc450422c155f9983238acd26", + "rust/core/src/dialog_rules.json": "05c015e80ee38b68d3a0330d34327cacd294d8f0e235dba1a21d2999c6091784", + "rust/core/src/dialogs.rs": "a6e99c6e836dbb462d8d9a90e94234e980b321a61d23d5b0e2493ebbb9663607", + "rust/core/src/host.rs": "7183e1cb5e3fc00d2f1c0b98446612de77a397bc77adcb677822131df36d3943", + "rust/core/src/lib.rs": "4897c959c4bc61a118d4039f2550c7ea365a839e6d537a3f041f26ad6bb41662", + "rust/core/src/readiness.rs": "0e89546a8411645e880e27e22d113bebbe04d2a61e019738b82b3ff215737e2d", + "rust/core/src/readiness_hints.json": "c9825ddc2cace06e73c414e2117748f0b49754b240eee0f69a37705034bff867", + "rust/core/src/windows_facts.rs": "12a76a7a56ff7b28cd229bf93628e836deb6d804177b2d65c3545e8793c28013", + "rust/core/tests/alerts_golden.rs": "286b72406009bf3041954c2e4e0becf6bb1c71b30b7458a6251e47ff067e503c", + "rust/core/tests/dialogs_golden.rs": "15247100daca1c2cb70d0d434998934191e0fa0d317d92ab3ef53593a011c850", + "rust/core/tests/golden/alerts.json": "87a0f799497e63ad1e3ae36c469dcd667cd41bec79d8c733cf391746bae59ffc", + "rust/core/tests/golden/dialog_titles.json": "ca164599b90d6d3b800c232bf9105e10130a5d35c92a93428e3ab63a2f668076", + "rust/core/tests/golden/readiness.json": "2475846c8c047d78dc72d4770f2b1ef4d6b755907576b217c4ad507e8c6df98d", + "rust/core/tests/readiness_golden.rs": "092afc32a81098c2cd8267b827751606a34794be6358fe7c7c3b2a6860a19359", + "rust/lbr/Cargo.toml": "9e943260ba115865f6c734e12a4088a0474963615ad3138b5631513f5336feb0", + "rust/lbr/src/lib.rs": "c23a1c6aa81c95ae24d76e2d1bcb5c3d8ca9321a0d11069987d7758f3135c676", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbr": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbrx": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "rust/lbr/tests/fixtures/CH340G.lbr": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "rust/lbr/tests/fixtures/CH340G.lbrx": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "rust/lbr/tests/fixtures/Demo_Board.bundle.zip": "ad7d754bebdae8e46ee67de4901373b2114c87ad4356da44b6601a38d5c0721f", + "rust/lbr/tests/fixtures/Demo_Board.lbr": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "rust/lbr/tests/fixtures/Demo_Board.lbrx": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "rust/lbr/tests/fixtures/IN-S63BTG.lbr": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "rust/lbr/tests/fixtures/IN-S63BTG.lbrx": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "rust/lbr/tests/fixtures/LAN7800.lbr": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "rust/lbr/tests/fixtures/LAN7800.lbrx": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbr": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbrx": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "rust/lbr/tests/fixtures/syn_deadconnect.lbr": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "rust/lbr/tests/fixtures/syn_deadconnect.lbrx": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "rust/lbr/tests/fixtures/syn_duppad.lbr": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "rust/lbr/tests/fixtures/syn_duppad.lbrx": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "rust/lbr/tests/fixtures/syn_noteagle.lbr": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "rust/lbr/tests/fixtures/syn_noteagle.lbrx": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "rust/lbr/tests/fixtures/syn_truncated.lbr": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "rust/lbr/tests/fixtures/syn_truncated.lbrx": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "rust/lbr/tests/fixtures/zipslip.zip": "62789c0c18ec56ea3a7ae6c6dcceff94581ea5a3f4a7d250229820fc44fb1657", + "rust/lbr/tests/golden/ABM8-16.000MHZ-B2-T.json": "59f0a1eb337db1aecd9bd4438c29fa39ff50fc3829e9fc34f8e8b09f1dd6e75d", + "rust/lbr/tests/golden/CH340G.json": "a6ab7cc05ec4ef537a499dc844857bbd0b4fbcb693d42f60be2755efa47d7412", + "rust/lbr/tests/golden/Demo_Board.bound3.lbr": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "rust/lbr/tests/golden/Demo_Board.bound3.lbrx": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "rust/lbr/tests/golden/Demo_Board.bound5.lbr": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "rust/lbr/tests/golden/Demo_Board.bound5.lbrx": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbr": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbrx": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "rust/lbr/tests/golden/Demo_Board.json": "f5250ac9d4e1761ea2a37f99437dbb431d90011863bbdc3793cddd586334f900", + "rust/lbr/tests/golden/Demo_Board.metadata.json": "f77498a63f5c99f5e228dbc6d5d27d32ffbbdb0fc385f3e6f423812105eefd1a", + "rust/lbr/tests/golden/IN-S63BTG.json": "2c9695c52cb73609c8c11af135609746a25f903b556e45dbb1b2bffcde031cda", + "rust/lbr/tests/golden/LAN7800.json": "400187b6fa0d2c2a55a1fc166f45be48fd1e1716910f97c15bc86ee3ca29ba9f", + "rust/lbr/tests/golden/STM32L431RCT6TR.json": "a4abd1bc6e0d9e22ecb3bb05b188a0df3dcd3acfe645c00c3c0ffdf394526212", + "rust/lbr/tests/golden/bundle_files.json": "e9ce9c1fcc880aebdfd9ca91cd3c489fca0c44a109f594d6d71535e24e98b02d", + "rust/lbr/tests/golden/inject_bindings.json": "70f08781980c5b3932154f4e05bde9527b8519e57cb79fb625e650d91e428680", + "rust/lbr/tests/golden/pair_parts.json": "269217c7b343b934c49668fd3cf31ca26124759198df05971d195c5eff2f7fc5", + "rust/lbr/tests/golden/preflight_and_parts.json": "3fab24b531175c303933c303550bbb36b1a4fac84631e8e136cc5bf5c3d7f4fc", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbr": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbrx": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbr": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbrx": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/CH340G.lbr": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G.lbrx": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbr": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbrx": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/IN-S63BTG.lbr": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG.lbrx": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbr": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbrx": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/LAN7800.lbr": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800.lbrx": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbr": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbrx": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbr": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbrx": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbr": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbrx": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/index.json": "a21429c3d77845998f97a2233394e1756ed99a1ca1b24d19a2fee2a156d0b362", + "rust/lbr/tests/golden.rs": "02df17a9be23b9727e1732f4b5079c23910b2fbfd45dbeaa8b07636c23a306cf", + "rust/os-mac/Cargo.toml": "864f9685ed5bb133c51c7fb979ab03175c6310f7a74db761e024b7635aa10851", + "rust/os-mac/src/lib.rs": "d0840cfd26262792ed9318b73df071eb523f7d19ffb72277ccc3ba1ba47263a4", + "rust/os-win/Cargo.toml": "1dbd93b057c4ac2a895a0b2dc2636c19330248854f3a8bde8922d27011b01f45", + "rust/os-win/src/lib.rs": "4461931dbe8899dfc8ccc1e80e557cdb7eefbc4e584d4dbe743a31b507f1682b", + "server.py": "f40c7cf8d601da6c573d5dd84200caa1bb68a910e562766a5fb6a7a39d0c4a83", + "tests/daily_verb_cron.sh": "6c94a5bc0d157a91e1363eda40b62895a05d9e1b75667e66e1d02a8d63adcb4e", + "tests/fusion_harness.py": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "tests/ralph_mechanical.py": "224820957b6b270cbee4538bd3692aaa3e08fec7cb77ed52618dc8a044266f68", + "tests/ralph_support.py": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "tests/run_verb_tests.py": "f2cc6974b8905c3c5e2924c5fc30795c06d0dc257f6f5d15f5da2fad73661b51", + "tests/test_bridge_contracts.py": "056ddda03091ccc99e257023f6d5d8d75849ab38dba2c7b763e29d9a368d6364", + "tests/test_document_hygiene.py": "650eea3f8a1d577a90c7e57016188b0c812415f48f9ad8948f1f94a17fdbad13", + "tests/test_fusion_harness.py": "4546c5700b221c5a7533c642e6c082b10de35fffd621e367c29eb4df916cd741", + "tests/test_http_server.py": "6bfd1d5b8de1cb3b7b1d6b72d5822eeb59e130995422eb59a2d193446a174ed9", + "tests/test_live_feed_drain.py": "2db5e74d7ae32cbc5172a20a876eb0da7c01554e5fd1ed38a27bb67272b53f10", + "tests/test_mechanical.py": "dc6acd88635ffe4a4865605c7deaec494a1de35a5140286fdbd7a73cbdd081f5", + "tests/test_mechanical_assemblies.py": "b4ace10bf3636c54ad0c9fed49d00319eb89e808ddb62e9e4b65e925466deca2", + "tests/test_mechanical_transactions.py": "59e51fd3a3b0b5f786bbabf67d86eb6730b8bd2b81a55049a29c97ae65d99cf4", + "tests/test_portable_tree.py": "c0cef12a2355bbae33f056d4bf7d4af96e64652d0e86118d2da4232419e96b7a", + "tests/test_ralph_campaign.py": "132ce2f342305f71a4ae4473ffe8710967528bafd82b002f1fd29d4af940329a", + "tests/test_routing.py": "be671c46a6a1474a39d2b1846fc76fb27796647cc430bcfc828f9c1957c0e52f", + "timings.py": "b17f946f88286358bcebf397d1467c00010cc3626411a40b7ccfb6522dae425a", + "tools/abrun.py": "5e7a7cd09a3c18c88b912bee5fba3afe77a92aaaa70ace0f52f973f7bb6a4801", + "tools/adrun.py": "ed088ab89f82e13c355f1c60316e5d96e4df3971e998bdeee037a87bee9474ef", + "tools/check-bridge.py": "cb15bef8cbc3d4252a3d656a5484e7459ff340edce171f0489c62baa2212b72b", + "tools/check-naming.sh": "38b4c22c8af31127e5d20b6c24f56cb8000ed6c825a2eda0efc8058952140ebd", + "tools/check-portable.sh": "a637d7db4e6dd1948029dd32ac657f3dff48ba31d72af856100b51edf05f033f", + "tools/check_portable_tree.py": "56dba86e9d779d8d94acd0db1967ad393b30455c40382c2bfd65e4029d19803d", + "tools/exe-only-flip.sh": "4b19223eb3b198d6ce672502b949634c061ed9f679ac88fbf1966403361d381e", + "tools/freeze-contract.py": "82f51090a79c57adf2f41c27229a860acdc75598aa4ead16893126cd7c848886", + "tools/gen-readme-verbs.py": "c56804ad5e17daef470849724017151956945acb4859fd0083aabd84dc09c45e", + "tools/install-mechanical-dev.ps1": "d6a6b456e65d2b9adffa7d2aaf53a82905bbd720868234bbc8e3ca848ccb3445", + "tools/install-routing-dev.ps1": "6b7aaf8f4e6bad49f1ea01f76e0684ee533ff93290dc0ce81cbf0174132ea3a4", + "tools/live_feed_drain.py": "1154921afdca61a726976eb4eceff165d710d11f2106d0d972b45fe3344374f7", + "tools/package-mechanical-dev.py": "98798ab48a68e402bf25af557fb734ef60b9d23843ef7c5bf8b330713f1ced8b", + "tools/promote.py": "d1eca1f21c0af7f085e8e6965f3417c1052bc25e2bff2624c59a851aa656ac09", + "tools/promote.sh": "b2577eac39267f94ec6d810d6fee62b211a4cedea7d084e52c77d30b7c685bd5", + "tools/promotions.log": "7c5e6040e4b2d68dd5d588a7544e98b1d700b8afe58d93610ef73f33fc9cb5d9", + "tools/release-files.txt": "3a00cc7daf773883d68cd2facfd7d03118d835a9aeefdb0f1bb3cbeded5871e4", + "tools/release.sh": "d38172bebf6819c23d542a4f5325e20482c311a3be93231ba1b757d12f60981c", + "tools/rust-commit.sh": "c331c26bde94231b667924bbdabd3e56d1e975729cb7edf9eae8e5537a4151cf", + "tools/rust-ship.sh": "1254e4950f1d76bed5e0a4aa81f0bc45a719acb73193cdab753ecf9e5cb8e093", + "tools/shadow_check.py": "6cebf4f1e42cb3847360df8b83793bef4a5d36a7cec1bbb744d2e875c2b6919b" + } + }, + "native": { + "native": "PASS", + "cleanup": "PASS", + "overall": "PASS", + "checks": [ + { + "label": "Bracket sketch is fully constrained", + "status": "PASS", + "evidence": null + }, + { + "label": "Bracket before hole complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + } + }, + { + "label": "Bracket before hole native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 01-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 40.0, + 20.0, + 8.0 + ] + ], + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "faces": 6, + "mass": 0.01728, + "material": "Aluminum", + "name": "Body1", + "volume": 6400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-47-18-250", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6400.0, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "8 mm", + "Width": "40 mm", + "d5": "Width", + "d6": "Height", + "d7": "Thickness", + "d8": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "mass": 0.01728, + "volume": 6400.0 + }, + "timelineCount": 2 + } + }, + { + "label": "Bracket before hole independent instance volume", + "status": "PASS", + "evidence": 6400.0 + }, + { + "label": "Bracket before hole native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket before hole public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2560.0, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "1caa9aad5140b75afc17be6fa354a5e61bca92b9c7e60bed609dc64956bf862f", + "rootComponentId": "1328d8bc-c5e4-443d-88fa-21f5fc11b60e", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.01728, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "revision": "1caa9aad5140b75afc17be6fa354a5e61bca92b9c7e60bed609dc64956bf862f" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6400.0 + } + }, + { + "label": "Bracket with mounting hole complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 5, + "unknown": [] + } + }, + { + "label": "Bracket with mounting hole native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 01-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 40.0, + 20.0, + 8.0 + ] + ], + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "faces": 7, + "mass": 0.016669274388142117, + "material": "Aluminum", + "name": "Body1", + "volume": 6173.805328941526 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-47-18-250", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + }, + { + "curves": 0, + "fullyConstrained": false, + "name": "Hole point", + "profiles": 0 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6173.805328941526, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "8 mm", + "Width": "40 mm", + "d11": "Thickness", + "d12": "6.0 mm", + "d13": "118.0 deg", + "d5": "Width", + "d6": "Height", + "d7": "Thickness", + "d8": "0.0 deg", + "d9": "Thickness" + }, + "physical": { + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "mass": 0.016669274388142117, + "volume": 6173.805328941526 + }, + "timelineCount": 5 + } + }, + { + "label": "Bracket with mounting hole independent instance volume", + "status": "PASS", + "evidence": 6173.805328941526 + }, + { + "label": "Bracket with mounting hole native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket with mounting hole public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2654.2477796076937, + "averageDensity": 2.6999999999999996e-06, + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "5baaaecaa6782c460e945bbeed8c73a4002a7d1d3f8ade4e7698d5afec507d57", + "rootComponentId": "1328d8bc-c5e4-443d-88fa-21f5fc11b60e", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.016669274388142117, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "revision": "5baaaecaa6782c460e945bbeed8c73a4002a7d1d3f8ade4e7698d5afec507d57" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6173.805328941526 + } + }, + { + "label": "Bracket after parameter edit complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 5, + "unknown": [] + } + }, + { + "label": "Bracket after parameter edit native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 01-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 50.0, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "faces": 7, + "mass": 0.026236592985177644, + "material": "Aluminum", + "name": "Body1", + "volume": 9717.256661176903 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-47-18-250", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + }, + { + "curves": 0, + "fullyConstrained": false, + "name": "Hole point", + "profiles": 0 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 9717.256661176903, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "10 mm", + "Width": "50 mm", + "d11": "Thickness", + "d12": "6.0 mm", + "d13": "118.0 deg", + "d5": "Width", + "d6": "Height", + "d7": "Thickness", + "d8": "0.0 deg", + "d9": "Thickness" + }, + "physical": { + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "mass": 0.026236592985177644, + "volume": 9717.256661176903 + }, + "timelineCount": 5 + } + }, + { + "label": "Bracket after parameter edit independent instance volume", + "status": "PASS", + "evidence": 9717.256661176903 + }, + { + "label": "Bracket after parameter edit native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket after parameter edit public and native physical properties", + "status": "PASS", + "evidence": { + "area": 3531.946891450771, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "d41ca7e02e71045fb090ec3d6edea19b8e3ac39da1715d90455385894bee2bc2", + "rootComponentId": "1328d8bc-c5e4-443d-88fa-21f5fc11b60e", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.026236592985177644, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "revision": "d41ca7e02e71045fb090ec3d6edea19b8e3ac39da1715d90455385894bee2bc2" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 9717.256661176903 + } + }, + { + "label": "Failed parameter batch confirms recovery", + "status": "PASS", + "evidence": { + "_contribute": "If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.", + "_hint": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_hintDocumentHygiene": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "causeCode": "invalid_expression", + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + }, + { + "isModified": true, + "isSaved": false, + "name": "Untitled", + "needsSave": true, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 1, + "openDocumentCount": 2, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 2033, + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-1185bece479a", + "output": "{\"_contribute\":\"If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.\",\"_hint\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_hintDocumentHygiene\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"causeCode\":\"invalid_expression\",\"documentHygiene\":{\"documents\":[{\"isModified\":false,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":false,\"saveStateKnown\":true},{\"isModified\":true,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":true,\"saveStateKnown\":true}],\"inspectionComplete\":true,\"needsSaveCount\":1,\"openDocumentCount\":2,\"ownership\":\"notInferred\",\"recoveryHealth\":\"notInspected\"},\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-1185bece479a\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"statusVerb\":\"fusion_get_app_state\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d\",\"revision\":\"b38ea7437a5cb2618e121da6e2187ad8aedb63877d53569d740de595f7ec316b\"},\"timeoutSeconds\":60}", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "status": "error", + "statusVerb": "fusion_get_app_state", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "revision": "b38ea7437a5cb2618e121da6e2187ad8aedb63877d53569d740de595f7ec316b" + }, + "timeoutSeconds": 60 + } + }, + { + "label": "Failed parameter batch has the intended cause", + "status": "PASS", + "evidence": { + "_contribute": "If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.", + "_hint": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_hintDocumentHygiene": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "causeCode": "invalid_expression", + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + }, + { + "isModified": true, + "isSaved": false, + "name": "Untitled", + "needsSave": true, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 1, + "openDocumentCount": 2, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 2033, + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-1185bece479a", + "output": "{\"_contribute\":\"If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.\",\"_hint\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_hintDocumentHygiene\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"causeCode\":\"invalid_expression\",\"documentHygiene\":{\"documents\":[{\"isModified\":false,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":false,\"saveStateKnown\":true},{\"isModified\":true,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":true,\"saveStateKnown\":true}],\"inspectionComplete\":true,\"needsSaveCount\":1,\"openDocumentCount\":2,\"ownership\":\"notInferred\",\"recoveryHealth\":\"notInspected\"},\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-1185bece479a\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"statusVerb\":\"fusion_get_app_state\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d\",\"revision\":\"b38ea7437a5cb2618e121da6e2187ad8aedb63877d53569d740de595f7ec316b\"},\"timeoutSeconds\":60}", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "status": "error", + "statusVerb": "fusion_get_app_state", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "revision": "b38ea7437a5cb2618e121da6e2187ad8aedb63877d53569d740de595f7ec316b" + }, + "timeoutSeconds": 60 + } + }, + { + "label": "Failed parameter batch restores native geometry", + "status": "PASS", + "evidence": null + }, + { + "label": "Failed operation has a terminal ledger result", + "status": "PASS", + "evidence": { + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "durationMs": 163, + "error": "", + "operationId": "20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-1185bece479a", + "output": "{\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"operationId\":\"20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-1185bece479a\",\"result\":{\"causeCode\":\"invalid_expression\",\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-1185bece479a\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d\",\"revision\":\"b38ea7437a5cb2618e121da6e2187ad8aedb63877d53569d740de595f7ec316b\"}},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"state\":\"failed\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "result": { + "causeCode": "invalid_expression", + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-1185bece479a", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3e102d8a-bb16-4609-ab43-4c2cf634079d", + "revision": "b38ea7437a5cb2618e121da6e2187ad8aedb63877d53569d740de595f7ec316b" + } + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "state": "failed", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } + }, + { + "label": "01-bracket archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 75834, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-bracket-a8af8265.f3d", + "sha256": "2b4a63fcdd29839c7c84adf20fdf52fbe40e0c7d5f5a5053e742060350b46874" + } + }, + { + "label": "Assembly driving depth is unambiguous", + "status": "PASS", + "evidence": [ + { + "displayUnit": "mm", + "expression": "10.0 mm", + "name": "d1", + "unit": "mm", + "value": 10.0 + } + ] + }, + { + "label": "Independent copy has a separate definition", + "status": "PASS", + "evidence": null + }, + { + "label": "Repeated assembly complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 8, + "unknown": [] + } + }, + { + "label": "Repeated assembly native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 01-assembly" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-48-20-906", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Independent", + "partNumber": "RALPH-COPY", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Block section", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "description": "Repeated block fixture", + "material": "Aluminum", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Block section", + "profiles": 1 + } + ] + } + ], + "instanceCount": 3, + "instanceVolume": 5000.0, + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 60.0, + 0.0, + 0.0 + ], + [ + 70.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 65.00000000000001, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Independent", + "path": "Independent:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 60.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Shared", + "path": "Shared:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 30.0, + 0.0, + 0.0 + ], + [ + 40.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Shared", + "path": "Shared:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 30.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "20 mm", + "d1_1": "10.0 mm", + "d2": "0.0 deg", + "d2_1": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 29.0, + 5.0, + 9.0 + ], + "mass": 0.013499999999999998, + "volume": 5000.0 + }, + "timelineCount": 8 + } + }, + { + "label": "Repeated assembly independent instance volume", + "status": "PASS", + "evidence": 5000.0 + }, + { + "label": "Repeated assembly native instance count", + "status": "PASS", + "evidence": 3 + }, + { + "label": "Repeated assembly public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2600.0, + "averageDensity": 2.6999999999999996e-06, + "centerOfMass": [ + 29.0, + 5.0, + 9.0 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2", + "rootComponentId": "97bc4d92-1ae3-4820-b979-2c5ad8ce2887", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.013499999999999998, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 5000.0 + } + }, + { + "label": "Shared edit leaves independent copy unchanged", + "status": "PASS", + "evidence": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 01-assembly" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-48-20-906", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Independent", + "partNumber": "RALPH-COPY", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Block section", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "description": "Repeated block fixture", + "material": "Aluminum", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Block section", + "profiles": 1 + } + ] + } + ] + }, + { + "label": "All occurrence placements persist after recompute", + "status": "PASS", + "evidence": [ + { + "bodies": [ + { + "bounds": [ + [ + 60.0, + 0.0, + 0.0 + ], + [ + 70.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 65.00000000000001, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Independent", + "path": "Independent:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 60.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Shared", + "path": "Shared:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 30.0, + 0.0, + 0.0 + ], + [ + 40.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Shared", + "path": "Shared:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 30.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ] + }, + { + "label": "BOM has one row per expected definition", + "status": "PASS", + "evidence": [ + { + "attributes": {}, + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "description": "Repeated block fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Shared", + "occurrencePaths": [ + "Shared:1", + "Shared:2" + ], + "partNumber": "RALPH-SHARED", + "quantity": 2, + "scope": "direct_component_bodies", + "unitMass": 0.005399999999999999, + "unitVolume": 2000.0 + }, + { + "attributes": {}, + "componentId": "77ff9a53-5ab2-4506-b569-bfd51a0abfc8", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "occurrencePaths": [ + "Independent:1" + ], + "partNumber": "RALPH-COPY", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + } + ] + }, + { + "label": "BOM quantities match actual instances", + "status": "PASS", + "evidence": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 3, + "componentId": "97bc4d92-1ae3-4820-b979-2c5ad8ce2887", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2", + "rootComponentId": "97bc4d92-1ae3-4820-b979-2c5ad8ce2887", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 01-assembly" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "2026-10-02-16-48-20-906" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2", + "token": "/v4BAAEA0AAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "Repeated block fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Shared", + "partNumber": "RALPH-SHARED" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Shared:1", + "occurrenceToken": null, + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OMQ5CMQxDNwZ29m5MkdI0SdsViQVxieQ3f4RLcAIkRiTuxIUoYkdeLOvJNiZOlHLCqUxtuvxLNB3Op/f1crw/X9vd47bfTIJS0YRcVx6OUL1mYBkKFrbCWjkrlcq1jdkyyVxQqMQAtO7Aah2sm4OYLk0dhUX/b4ULagkHij7mFhKYt4BKYctCIbn17/cPMWhf3scAAAA=" + }, + "parentPath": "", + "path": "Shared:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "77ff9a53-5ab2-4506-b569-bfd51a0abfc8", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2", + "token": "/v4BAAEANgQAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "partNumber": "RALPH-COPY" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Independent:1", + "occurrenceToken": null, + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WOOwoCQAxEOwt7+3RWgexuNtltBRvxEvtLqZfwBIKl4J28kBEPINMMw2NmCBgiBCBXiMVd+CUCh/Ppfb0c78/Xdve47TdOREgCxGo8O6F2Dch5CrbVDE05SEzKWqa3ONlSDVmdFGNGbjSwDV1Yc19mgfNQ+bOlaxp5QycR5OozdaWIPDn2kRaV2L/fP7LJQgnHAAAA" + }, + "parentPath": "", + "path": "Independent:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2", + "token": "/v4BAAEA0AAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "Repeated block fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Shared", + "partNumber": "RALPH-SHARED" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Shared:2", + "occurrenceToken": null, + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OMQpCQQxEOwt7++2sApv8bLK/FWzES2z+JqVewhMIlh+8kxdyP/YyzTA8ZiYnTpQw5SGkOhz+Ekmn6+Vzv52f63t/eD2Ou0FQmiRl1uBuGdQUgUsXaN4CQhmFJmWtfbQMshWMEoZQeSMRA9psChZI4mJG0v9vuZUskxuQz31sZYJm1UHJ27KQF6zz9v0Lg+zEl8cAAAA=" + }, + "parentPath": "", + "path": "Shared:2" + } + ], + "partCount": 2, + "parts": [ + { + "attributes": {}, + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "description": "Repeated block fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Shared", + "occurrencePaths": [ + "Shared:1", + "Shared:2" + ], + "partNumber": "RALPH-SHARED", + "quantity": 2, + "scope": "direct_component_bodies", + "unitMass": 0.005399999999999999, + "unitVolume": 2000.0 + }, + { + "attributes": {}, + "componentId": "77ff9a53-5ab2-4506-b569-bfd51a0abfc8", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "occurrencePaths": [ + "Independent:1" + ], + "partNumber": "RALPH-COPY", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + } + ], + "physical": { + "bodyInstances": 3, + "mass": 0.013499999999999998, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5000.0 + }, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:4491425d-3e12-4faa-a39c-8312faa5d9c8", + "revision": "acd65ffda702465b31db6469d9e140f00f584963cee4974b5059783a05d639f2" + }, + "totalPurchasingInstances": 3, + "units": { + "mass": "kg", + "volume": "mm3" + } + } + }, + { + "label": "BOM physical total agrees with native instances", + "status": "PASS", + "evidence": { + "bodyInstances": 3, + "mass": 0.013499999999999998, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5000.0 + } + }, + { + "label": "flat CSV row count", + "status": "PASS", + "evidence": [ + { + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "description": "Repeated block fixture", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "quantity": "2", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.005399999999999999", + "unitVolume": "2000.0" + }, + { + "componentId": "77ff9a53-5ab2-4506-b569-bfd51a0abfc8", + "description": "", + "name": "Independent", + "partNumber": "RALPH-COPY", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.0026999999999999997", + "unitVolume": "1000.0" + } + ] + }, + { + "label": "Flat CSV definitions are unique", + "status": "PASS", + "evidence": [ + { + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "description": "Repeated block fixture", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "quantity": "2", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.005399999999999999", + "unitVolume": "2000.0" + }, + { + "componentId": "77ff9a53-5ab2-4506-b569-bfd51a0abfc8", + "description": "", + "name": "Independent", + "partNumber": "RALPH-COPY", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.0026999999999999997", + "unitVolume": "1000.0" + } + ] + }, + { + "label": "Flat CSV quantities", + "status": "PASS", + "evidence": [ + { + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "description": "Repeated block fixture", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "quantity": "2", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.005399999999999999", + "unitVolume": "2000.0" + }, + { + "componentId": "77ff9a53-5ab2-4506-b569-bfd51a0abfc8", + "description": "", + "name": "Independent", + "partNumber": "RALPH-COPY", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.0026999999999999997", + "unitVolume": "1000.0" + } + ] + }, + { + "label": "structured CSV row count", + "status": "PASS", + "evidence": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "3", + "componentId": "97bc4d92-1ae3-4820-b979-2c5ad8ce2887", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-16-48-20-906", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "depth": "1", + "description": "Repeated block fixture", + "name": "Shared", + "parentPath": "", + "partNumber": "RALPH-SHARED", + "path": "Shared:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "77ff9a53-5ab2-4506-b569-bfd51a0abfc8", + "depth": "1", + "description": "", + "name": "Independent", + "parentPath": "", + "partNumber": "RALPH-COPY", + "path": "Independent:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "depth": "1", + "description": "Repeated block fixture", + "name": "Shared", + "parentPath": "", + "partNumber": "RALPH-SHARED", + "path": "Shared:2", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + } + ] + }, + { + "label": "Structured CSV hierarchy", + "status": "PASS", + "evidence": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "3", + "componentId": "97bc4d92-1ae3-4820-b979-2c5ad8ce2887", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-16-48-20-906", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "depth": "1", + "description": "Repeated block fixture", + "name": "Shared", + "parentPath": "", + "partNumber": "RALPH-SHARED", + "path": "Shared:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "77ff9a53-5ab2-4506-b569-bfd51a0abfc8", + "depth": "1", + "description": "", + "name": "Independent", + "parentPath": "", + "partNumber": "RALPH-COPY", + "path": "Independent:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "c7545f5d-98ee-4863-b5c8-f23cbe8233d4", + "depth": "1", + "description": "Repeated block fixture", + "name": "Shared", + "parentPath": "", + "partNumber": "RALPH-SHARED", + "path": "Shared:2", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + } + ] + }, + { + "label": "01-assembly archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 79145, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-assembly-b174192b.f3d", + "sha256": "442f25873c8bfec108980faf76316c068a7b647d38080f91269837e45ce261cc" + } + }, + { + "label": "Supplier import contains positive native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + -15.875, + -4.216399999999999, + -4.216399999999999 + ], + [ + 15.875000000000057, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "description": "", + "material": "Aluminum", + "name": "3597N17_Torx Flat Head Screws for Wood", + "partNumber": "3597N17_Torx Flat Head Screws for Wood", + "sketches": [] + }, + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 01-supplier" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-49-06-535", + "sketches": [] + }, + { + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Purchased", + "partNumber": "3597N17", + "sketches": [] + } + ], + "instanceCount": 2, + "instanceVolume": 661.1472941491247, + "occurrences": [ + { + "bodies": [], + "component": "Purchased", + "path": "Purchased:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -15.875, + -4.216399999999999, + -4.216399999999999 + ], + [ + 15.875000000000057, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "component": "3597N17_Torx Flat Head Screws for Wood", + "path": "Purchased:1+3597N17_Torx Flat Head Screws for Wood:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Purchased", + "path": "Purchased:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 34.125, + -4.216399999999999, + -4.216399999999999 + ], + [ + 65.87500000000006, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + 46.259111868513514, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "component": "3597N17_Torx Flat Head Screws for Wood", + "path": "Purchased:2+3597N17_Torx Flat Head Screws for Wood:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": {}, + "physical": { + "centerOfMass": [ + 21.25911186851351, + 0.0007026916216773757, + -0.000101096362255465 + ], + "mass": 0.0017850976942026366, + "volume": 661.1472941491247 + }, + "timelineCount": 3 + } + }, + { + "label": "BOM has one row per expected definition", + "status": "PASS", + "evidence": [ + { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "occurrencePaths": [ + "Purchased:1", + "Purchased:2" + ], + "partNumber": "3597N17", + "quantity": 2, + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + } + ] + }, + { + "label": "BOM quantities match actual instances", + "status": "PASS", + "evidence": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "48da8768-88a7-4501-9f45-c4485d08f11b", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:52b50172-0d01-4c7b-9e39-c7587f9926c9", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "3fa62b37a2c6406948df62b25885b648caaacd6aef3247f0a7433ff26f8518f0", + "rootComponentId": "48da8768-88a7-4501-9f45-c4485d08f11b", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 01-supplier" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "2026-10-02-16-49-06-535" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": true, + "bodyCount": 0, + "childCount": 1, + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:52b50172-0d01-4c7b-9e39-c7587f9926c9", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "3fa62b37a2c6406948df62b25885b648caaacd6aef3247f0a7433ff26f8518f0", + "token": "/v4BAAEA0AAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "partNumber": "3597N17", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:52b50172-0d01-4c7b-9e39-c7587f9926c9", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Purchased:1", + "occurrenceToken": null, + "revision": "3fa62b37a2c6406948df62b25885b648caaacd6aef3247f0a7433ff26f8518f0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OvQ1CMQyEYQAWoMoClvwTO2QJNqB48bNblmABJBp2YAVahmAagujRNafTp7vDUgsXKjhFfJiOfomV03XzuL+Ocdm/t7vb8zwJLmIlbCyII2GsjaGKKwxTBeuiSSmxks+WSTb3GEEOkYtDVUfopgFJstYmye2g/7c8ctYuDIgcUDMNOqoBKmH3lmI2vt8/nMFoQccAAAA=" + }, + "parentPath": "", + "path": "Purchased:1" + }, + { + "asPurchased": true, + "bodyCount": 0, + "childCount": 1, + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:52b50172-0d01-4c7b-9e39-c7587f9926c9", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "3fa62b37a2c6406948df62b25885b648caaacd6aef3247f0a7433ff26f8518f0", + "token": "/v4BAAEA0AAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "partNumber": "3597N17", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:52b50172-0d01-4c7b-9e39-c7587f9926c9", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Purchased:2", + "occurrenceToken": null, + "revision": "3fa62b37a2c6406948df62b25885b648caaacd6aef3247f0a7433ff26f8518f0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OsQ0CMQxFYQAWoMoClmwn9iVLsAHFJbFblmABJBp2YAVahrhpMKJHbizr/eePqSROlDCGuMZGv4um8233fLxPdj1u+8P9dQmCU9Zk2lfE7tDnwlDyEOgqAtqyOHm2SSMsQc5auaFUICsERXxCbSSAc0a2Wc3V//8a5qFdGRDZoLgrhFABhbCNxbNq/3b/AD0xqJLHAAAA" + }, + "parentPath": "", + "path": "Purchased:2" + } + ], + "partCount": 1, + "parts": [ + { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "occurrencePaths": [ + "Purchased:1", + "Purchased:2" + ], + "partNumber": "3597N17", + "quantity": 2, + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + } + ], + "physical": { + "bodyInstances": 2, + "mass": 0.0017850976942026366, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 661.1472941491247 + }, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:52b50172-0d01-4c7b-9e39-c7587f9926c9", + "revision": "3fa62b37a2c6406948df62b25885b648caaacd6aef3247f0a7433ff26f8518f0" + }, + "totalPurchasingInstances": 2, + "units": { + "mass": "kg", + "volume": "mm3" + } + } + }, + { + "label": "BOM physical total agrees with native instances", + "status": "PASS", + "evidence": { + "bodyInstances": 2, + "mass": 0.0017850976942026366, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 661.1472941491247 + } + }, + { + "label": "flat CSV row count", + "status": "PASS", + "evidence": [ + { + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "description": "", + "name": "Purchased", + "partNumber": "3597N17", + "quantity": "2", + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": "0.0008925488471013183", + "unitVolume": "330.57364707456236" + } + ] + }, + { + "label": "Flat CSV definitions are unique", + "status": "PASS", + "evidence": [ + { + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "description": "", + "name": "Purchased", + "partNumber": "3597N17", + "quantity": "2", + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": "0.0008925488471013183", + "unitVolume": "330.57364707456236" + } + ] + }, + { + "label": "Flat CSV quantities", + "status": "PASS", + "evidence": [ + { + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "description": "", + "name": "Purchased", + "partNumber": "3597N17", + "quantity": "2", + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": "0.0008925488471013183", + "unitVolume": "330.57364707456236" + } + ] + }, + { + "label": "structured CSV row count", + "status": "PASS", + "evidence": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "2", + "componentId": "48da8768-88a7-4501-9f45-c4485d08f11b", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-16-49-06-535", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "depth": "1", + "description": "", + "name": "Purchased", + "parentPath": "", + "partNumber": "3597N17", + "path": "Purchased:1", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "depth": "1", + "description": "", + "name": "Purchased", + "parentPath": "", + "partNumber": "3597N17", + "path": "Purchased:2", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + } + ] + }, + { + "label": "Structured CSV hierarchy", + "status": "PASS", + "evidence": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "2", + "componentId": "48da8768-88a7-4501-9f45-c4485d08f11b", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-16-49-06-535", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "depth": "1", + "description": "", + "name": "Purchased", + "parentPath": "", + "partNumber": "3597N17", + "path": "Purchased:1", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "depth": "1", + "description": "", + "name": "Purchased", + "parentPath": "", + "partNumber": "3597N17", + "path": "Purchased:2", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + } + ] + }, + { + "label": "Supplier BOM preserves checksum and provenance", + "status": "PASS", + "evidence": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "componentId": "4ca7663d-2e0f-456f-8d95-af6be679ced0", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "occurrencePaths": [ + "Purchased:1", + "Purchased:2" + ], + "partNumber": "3597N17", + "quantity": 2, + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + } + }, + { + "label": "01-supplier archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 549766, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-supplier-e283e808.f3d", + "sha256": "a328bfce8ce895abf9ea95fcafdbe5f23337894da0fff44241a536662382a5a3" + } + }, + { + "label": "Bracket sketch is fully constrained", + "status": "PASS", + "evidence": null + }, + { + "label": "Bracket before hole complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + } + }, + { + "label": "Bracket before hole native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 02-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 40.0, + 20.0, + 8.0 + ] + ], + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "faces": 6, + "mass": 0.01728, + "material": "Aluminum", + "name": "Body1", + "volume": 6400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-49-41-158", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6400.0, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "8 mm", + "Width": "40 mm", + "d4": "Width", + "d5": "Height", + "d6": "Thickness", + "d7": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "mass": 0.01728, + "volume": 6400.0 + }, + "timelineCount": 2 + } + }, + { + "label": "Bracket before hole independent instance volume", + "status": "PASS", + "evidence": 6400.0 + }, + { + "label": "Bracket before hole native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket before hole public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2560.0, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "c9d72fd9b78fcf9622cd0a16818e49465c786a18715cea4b62a2a1ea4713b353", + "rootComponentId": "b50e6652-d48f-4061-8f51-f6ae2c0e11bc", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.01728, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "revision": "c9d72fd9b78fcf9622cd0a16818e49465c786a18715cea4b62a2a1ea4713b353" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6400.0 + } + }, + { + "label": "Bracket with mounting hole complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 5, + "unknown": [] + } + }, + { + "label": "Bracket with mounting hole native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 02-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 40.0, + 20.0, + 8.0 + ] + ], + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "faces": 7, + "mass": 0.016669274388142117, + "material": "Aluminum", + "name": "Body1", + "volume": 6173.805328941526 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-49-41-158", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + }, + { + "curves": 0, + "fullyConstrained": false, + "name": "Hole point", + "profiles": 0 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6173.805328941526, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "8 mm", + "Width": "40 mm", + "d10": "Thickness", + "d11": "6.0 mm", + "d12": "118.0 deg", + "d4": "Width", + "d5": "Height", + "d6": "Thickness", + "d7": "0.0 deg", + "d8": "Thickness" + }, + "physical": { + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "mass": 0.016669274388142117, + "volume": 6173.805328941526 + }, + "timelineCount": 5 + } + }, + { + "label": "Bracket with mounting hole independent instance volume", + "status": "PASS", + "evidence": 6173.805328941526 + }, + { + "label": "Bracket with mounting hole native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket with mounting hole public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2654.2477796076937, + "averageDensity": 2.6999999999999996e-06, + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "e95278cf043d549997ecb2d642a99cbfaf164539033111a6b75e7dd702734541", + "rootComponentId": "b50e6652-d48f-4061-8f51-f6ae2c0e11bc", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.016669274388142117, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "revision": "e95278cf043d549997ecb2d642a99cbfaf164539033111a6b75e7dd702734541" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6173.805328941526 + } + }, + { + "label": "Bracket after parameter edit complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 5, + "unknown": [] + } + }, + { + "label": "Bracket after parameter edit native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 02-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 50.0, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "faces": 7, + "mass": 0.026236592985177644, + "material": "Aluminum", + "name": "Body1", + "volume": 9717.256661176903 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-49-41-158", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + }, + { + "curves": 0, + "fullyConstrained": false, + "name": "Hole point", + "profiles": 0 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 9717.256661176903, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "10 mm", + "Width": "50 mm", + "d10": "Thickness", + "d11": "6.0 mm", + "d12": "118.0 deg", + "d4": "Width", + "d5": "Height", + "d6": "Thickness", + "d7": "0.0 deg", + "d8": "Thickness" + }, + "physical": { + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "mass": 0.026236592985177644, + "volume": 9717.256661176903 + }, + "timelineCount": 5 + } + }, + { + "label": "Bracket after parameter edit independent instance volume", + "status": "PASS", + "evidence": 9717.256661176903 + }, + { + "label": "Bracket after parameter edit native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket after parameter edit public and native physical properties", + "status": "PASS", + "evidence": { + "area": 3531.946891450771, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "cf08b5b4d3d69e415a095b9776df02a4afabfa4c1f8054abd4161f1e72a6d992", + "rootComponentId": "b50e6652-d48f-4061-8f51-f6ae2c0e11bc", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.026236592985177644, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "revision": "cf08b5b4d3d69e415a095b9776df02a4afabfa4c1f8054abd4161f1e72a6d992" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 9717.256661176903 + } + }, + { + "label": "Failed parameter batch confirms recovery", + "status": "PASS", + "evidence": { + "_contribute": "If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.", + "_hint": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_hintDocumentHygiene": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "causeCode": "invalid_expression", + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + }, + { + "isModified": true, + "isSaved": false, + "name": "Untitled", + "needsSave": true, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 1, + "openDocumentCount": 2, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 2031, + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-bad7e63a267e", + "output": "{\"_contribute\":\"If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.\",\"_hint\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_hintDocumentHygiene\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"causeCode\":\"invalid_expression\",\"documentHygiene\":{\"documents\":[{\"isModified\":false,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":false,\"saveStateKnown\":true},{\"isModified\":true,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":true,\"saveStateKnown\":true}],\"inspectionComplete\":true,\"needsSaveCount\":1,\"openDocumentCount\":2,\"ownership\":\"notInferred\",\"recoveryHealth\":\"notInspected\"},\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-bad7e63a267e\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"statusVerb\":\"fusion_get_app_state\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0\",\"revision\":\"6172b556c89ed0e1771d68074df47cbbf730848932a7dfbc9055cdbf0c5e6b2b\"},\"timeoutSeconds\":60}", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "status": "error", + "statusVerb": "fusion_get_app_state", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "revision": "6172b556c89ed0e1771d68074df47cbbf730848932a7dfbc9055cdbf0c5e6b2b" + }, + "timeoutSeconds": 60 + } + }, + { + "label": "Failed parameter batch has the intended cause", + "status": "PASS", + "evidence": { + "_contribute": "If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.", + "_hint": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_hintDocumentHygiene": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "causeCode": "invalid_expression", + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + }, + { + "isModified": true, + "isSaved": false, + "name": "Untitled", + "needsSave": true, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 1, + "openDocumentCount": 2, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 2031, + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-bad7e63a267e", + "output": "{\"_contribute\":\"If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.\",\"_hint\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_hintDocumentHygiene\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"causeCode\":\"invalid_expression\",\"documentHygiene\":{\"documents\":[{\"isModified\":false,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":false,\"saveStateKnown\":true},{\"isModified\":true,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":true,\"saveStateKnown\":true}],\"inspectionComplete\":true,\"needsSaveCount\":1,\"openDocumentCount\":2,\"ownership\":\"notInferred\",\"recoveryHealth\":\"notInspected\"},\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-bad7e63a267e\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"statusVerb\":\"fusion_get_app_state\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0\",\"revision\":\"6172b556c89ed0e1771d68074df47cbbf730848932a7dfbc9055cdbf0c5e6b2b\"},\"timeoutSeconds\":60}", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "status": "error", + "statusVerb": "fusion_get_app_state", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "revision": "6172b556c89ed0e1771d68074df47cbbf730848932a7dfbc9055cdbf0c5e6b2b" + }, + "timeoutSeconds": 60 + } + }, + { + "label": "Failed parameter batch restores native geometry", + "status": "PASS", + "evidence": null + }, + { + "label": "Failed operation has a terminal ledger result", + "status": "PASS", + "evidence": { + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "durationMs": 119, + "error": "", + "operationId": "20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-bad7e63a267e", + "output": "{\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"operationId\":\"20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-bad7e63a267e\",\"result\":{\"causeCode\":\"invalid_expression\",\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-bad7e63a267e\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0\",\"revision\":\"6172b556c89ed0e1771d68074df47cbbf730848932a7dfbc9055cdbf0c5e6b2b\"}},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"state\":\"failed\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "result": { + "causeCode": "invalid_expression", + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c-bad7e63a267e", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3b53e0a7-b93b-4382-9c8f-3010ea7ec5f0", + "revision": "6172b556c89ed0e1771d68074df47cbbf730848932a7dfbc9055cdbf0c5e6b2b" + } + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "state": "failed", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } + }, + { + "label": "02-bracket archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 76038, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-bracket-fff80f5b.f3d", + "sha256": "9c3b5773a7f18c58dc5c32fde38991c3f0e0e7d8859600376a2dd070cabcc1fc" + } + }, + { + "label": "Assembly driving depth is unambiguous", + "status": "PASS", + "evidence": [ + { + "displayUnit": "mm", + "expression": "10.0 mm", + "name": "d1", + "unit": "mm", + "value": 10.0 + } + ] + }, + { + "label": "Independent copy has a separate definition", + "status": "PASS", + "evidence": null + }, + { + "label": "Repeated assembly complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 8, + "unknown": [] + } + }, + { + "label": "Repeated assembly native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 02-assembly" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-50-43-197", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Independent", + "partNumber": "RALPH-COPY", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Block section", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "description": "Repeated block fixture", + "material": "Aluminum", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Block section", + "profiles": 1 + } + ] + } + ], + "instanceCount": 3, + "instanceVolume": 5000.0, + "occurrences": [ + { + "bodies": [ + { + "bounds": [ + [ + 60.0, + 0.0, + 0.0 + ], + [ + 70.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 65.00000000000001, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Independent", + "path": "Independent:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 60.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Shared", + "path": "Shared:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 30.0, + 0.0, + 0.0 + ], + [ + 40.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Shared", + "path": "Shared:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 30.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d1": "20 mm", + "d1_1": "10.0 mm", + "d2": "0.0 deg", + "d2_1": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 29.0, + 5.0, + 9.0 + ], + "mass": 0.013499999999999998, + "volume": 5000.0 + }, + "timelineCount": 8 + } + }, + { + "label": "Repeated assembly independent instance volume", + "status": "PASS", + "evidence": 5000.0 + }, + { + "label": "Repeated assembly native instance count", + "status": "PASS", + "evidence": 3 + }, + { + "label": "Repeated assembly public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2600.0, + "averageDensity": 2.6999999999999996e-06, + "centerOfMass": [ + 29.0, + 5.0, + 9.0 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534", + "rootComponentId": "f9dbcf41-2466-4baa-9140-65dab72d16c5", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.013499999999999998, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 5000.0 + } + }, + { + "label": "Shared edit leaves independent copy unchanged", + "status": "PASS", + "evidence": [ + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 02-assembly" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-50-43-197", + "sketches": [] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "Independent", + "partNumber": "RALPH-COPY", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Block section", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "description": "Repeated block fixture", + "material": "Aluminum", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Block section", + "profiles": 1 + } + ] + } + ] + }, + { + "label": "All occurrence placements persist after recompute", + "status": "PASS", + "evidence": [ + { + "bodies": [ + { + "bounds": [ + [ + 60.0, + 0.0, + 0.0 + ], + [ + 70.0, + 10.0, + 10.0 + ] + ], + "centerOfMass": [ + 65.00000000000001, + 5.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Independent", + "path": "Independent:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 60.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 10.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 5.0, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Shared", + "path": "Shared:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 30.0, + 0.0, + 0.0 + ], + [ + 40.0, + 10.0, + 20.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 5.0, + 10.0 + ], + "faces": 6, + "mass": 0.005399999999999999, + "material": "Aluminum", + "name": "Body1", + "volume": 2000.0 + } + ], + "component": "Shared", + "path": "Shared:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 30.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ] + }, + { + "label": "BOM has one row per expected definition", + "status": "PASS", + "evidence": [ + { + "attributes": {}, + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "description": "Repeated block fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Shared", + "occurrencePaths": [ + "Shared:1", + "Shared:2" + ], + "partNumber": "RALPH-SHARED", + "quantity": 2, + "scope": "direct_component_bodies", + "unitMass": 0.005399999999999999, + "unitVolume": 2000.0 + }, + { + "attributes": {}, + "componentId": "76766bad-290a-475f-9881-b034f64ed354", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "occurrencePaths": [ + "Independent:1" + ], + "partNumber": "RALPH-COPY", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + } + ] + }, + { + "label": "BOM quantities match actual instances", + "status": "PASS", + "evidence": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 3, + "componentId": "f9dbcf41-2466-4baa-9140-65dab72d16c5", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534", + "rootComponentId": "f9dbcf41-2466-4baa-9140-65dab72d16c5", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 02-assembly" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "2026-10-02-16-50-43-197" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534", + "token": "/v4BAAEA0AAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "Repeated block fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Shared", + "partNumber": "RALPH-SHARED" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Shared:1", + "occurrenceToken": null, + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OsQ1CMQxEN2AGL2AR5zt2XFJSM0EcJwvQsgUbfFEixIgE0aNrTqenu0vAkIEgLVGuy9EvEdhvr8f7fj7s/XK6Po+6iAybQO1Uh3ZC21pGJt7QjRjNZzfxPmuU1bJIpSY9uKGSG7JrxmploicSSaYlif7filI5aA7kPgI5tUDTKEhDSK1Eys2/3z+Q5LEaxwAAAA==" + }, + "parentPath": "", + "path": "Shared:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "76766bad-290a-475f-9881-b034f64ed354", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534", + "token": "/v4BAAEANgQAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "partNumber": "RALPH-COPY" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Independent:1", + "occurrenceToken": null, + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OsQ1CMQxEN2AGL2ARJ05il5TUTBDbPwvQsgUbfFEixIgE0aNrTqenu0vAkIEgLVGW5eiXNNhvr8f7fj7sfjldn8e+iAylgTjJ1p1Qy8jIxAVNiVFtujbzKVFXyyIzi221KfbKi8ydUJQMZ4koVjlY9f9Wmim2iIbKHshRBa2khsMme6qRBsf3+weL5Vl5xwAAAA==" + }, + "parentPath": "", + "path": "Independent:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534", + "token": "/v4BAAEA0AAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "Repeated block fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Shared", + "partNumber": "RALPH-SHARED" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Shared:2", + "occurrenceToken": null, + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OvQ1CMRCDN2CGLHDinFz+SkpqJsjd5S1AyxZs8ESJECMSRI/cWNYn2xwkxIDAS4htOfySEvbb6/G+nw+7XU7X57EuIoZUQjO0WQ3U04gkkETaIdR1s17UtuZ5tSwSmtk1dmJoIRm10hhIlDgCAlga/H/LcxPHNklsOgkPp149E2ZB7dk5Dv1+/wAy8ycAxwAAAA==" + }, + "parentPath": "", + "path": "Shared:2" + } + ], + "partCount": 2, + "parts": [ + { + "attributes": {}, + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "description": "Repeated block fixture", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Shared", + "occurrencePaths": [ + "Shared:1", + "Shared:2" + ], + "partNumber": "RALPH-SHARED", + "quantity": 2, + "scope": "direct_component_bodies", + "unitMass": 0.005399999999999999, + "unitVolume": 2000.0 + }, + { + "attributes": {}, + "componentId": "76766bad-290a-475f-9881-b034f64ed354", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Independent", + "occurrencePaths": [ + "Independent:1" + ], + "partNumber": "RALPH-COPY", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + } + ], + "physical": { + "bodyInstances": 3, + "mass": 0.013499999999999998, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5000.0 + }, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:671c05b3-a542-4688-ac61-21649e2fb96e", + "revision": "ca99dd9bbb642ccb985820a424fe57655e4f9a74e334f5805c32e2631cad7534" + }, + "totalPurchasingInstances": 3, + "units": { + "mass": "kg", + "volume": "mm3" + } + } + }, + { + "label": "BOM physical total agrees with native instances", + "status": "PASS", + "evidence": { + "bodyInstances": 3, + "mass": 0.013499999999999998, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 5000.0 + } + }, + { + "label": "flat CSV row count", + "status": "PASS", + "evidence": [ + { + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "description": "Repeated block fixture", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "quantity": "2", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.005399999999999999", + "unitVolume": "2000.0" + }, + { + "componentId": "76766bad-290a-475f-9881-b034f64ed354", + "description": "", + "name": "Independent", + "partNumber": "RALPH-COPY", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.0026999999999999997", + "unitVolume": "1000.0" + } + ] + }, + { + "label": "Flat CSV definitions are unique", + "status": "PASS", + "evidence": [ + { + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "description": "Repeated block fixture", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "quantity": "2", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.005399999999999999", + "unitVolume": "2000.0" + }, + { + "componentId": "76766bad-290a-475f-9881-b034f64ed354", + "description": "", + "name": "Independent", + "partNumber": "RALPH-COPY", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.0026999999999999997", + "unitVolume": "1000.0" + } + ] + }, + { + "label": "Flat CSV quantities", + "status": "PASS", + "evidence": [ + { + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "description": "Repeated block fixture", + "name": "Shared", + "partNumber": "RALPH-SHARED", + "quantity": "2", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.005399999999999999", + "unitVolume": "2000.0" + }, + { + "componentId": "76766bad-290a-475f-9881-b034f64ed354", + "description": "", + "name": "Independent", + "partNumber": "RALPH-COPY", + "quantity": "1", + "scope": "direct_component_bodies", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "", + "unitMass": "0.0026999999999999997", + "unitVolume": "1000.0" + } + ] + }, + { + "label": "structured CSV row count", + "status": "PASS", + "evidence": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "3", + "componentId": "f9dbcf41-2466-4baa-9140-65dab72d16c5", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-16-50-43-197", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "depth": "1", + "description": "Repeated block fixture", + "name": "Shared", + "parentPath": "", + "partNumber": "RALPH-SHARED", + "path": "Shared:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "76766bad-290a-475f-9881-b034f64ed354", + "depth": "1", + "description": "", + "name": "Independent", + "parentPath": "", + "partNumber": "RALPH-COPY", + "path": "Independent:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "depth": "1", + "description": "Repeated block fixture", + "name": "Shared", + "parentPath": "", + "partNumber": "RALPH-SHARED", + "path": "Shared:2", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + } + ] + }, + { + "label": "Structured CSV hierarchy", + "status": "PASS", + "evidence": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "3", + "componentId": "f9dbcf41-2466-4baa-9140-65dab72d16c5", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-16-50-43-197", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "depth": "1", + "description": "Repeated block fixture", + "name": "Shared", + "parentPath": "", + "partNumber": "RALPH-SHARED", + "path": "Shared:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "76766bad-290a-475f-9881-b034f64ed354", + "depth": "1", + "description": "", + "name": "Independent", + "parentPath": "", + "partNumber": "RALPH-COPY", + "path": "Independent:1", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "False", + "bodyCount": "1", + "childCount": "0", + "componentId": "1140e754-b1ff-4541-a87e-b399bdd3976d", + "depth": "1", + "description": "Repeated block fixture", + "name": "Shared", + "parentPath": "", + "partNumber": "RALPH-SHARED", + "path": "Shared:2", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + } + ] + }, + { + "label": "02-assembly archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 79035, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-assembly-e11a7ee5.f3d", + "sha256": "5b9c99805d45a65dac214cd07f0879de1325272980b274371d205613efcf5b95" + } + }, + { + "label": "Supplier import contains positive native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": {}, + "bodies": [ + { + "bounds": [ + [ + -15.875, + -4.216399999999999, + -4.216399999999999 + ], + [ + 15.875000000000057, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "description": "", + "material": "Aluminum", + "name": "3597N17_Torx Flat Head Screws for Wood", + "partNumber": "3597N17_Torx Flat Head Screws for Wood", + "sketches": [] + }, + { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 02-supplier" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-51-30-119", + "sketches": [] + }, + { + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Purchased", + "partNumber": "3597N17", + "sketches": [] + } + ], + "instanceCount": 2, + "instanceVolume": 661.1472941491247, + "occurrences": [ + { + "bodies": [], + "component": "Purchased", + "path": "Purchased:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -15.875, + -4.216399999999999, + -4.216399999999999 + ], + [ + 15.875000000000057, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + -3.740888131486488, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "component": "3597N17_Torx Flat Head Screws for Wood", + "path": "Purchased:1+3597N17_Torx Flat Head Screws for Wood:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Purchased", + "path": "Purchased:2", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 34.125, + -4.216399999999999, + -4.216399999999999 + ], + [ + 65.87500000000006, + 4.216399999999999, + 4.216399999999999 + ] + ], + "centerOfMass": [ + 46.259111868513514, + 0.0007026916216773757, + -0.000101096362255465 + ], + "faces": 35, + "mass": 0.0008925488471013183, + "material": "Aluminum", + "name": "Body1", + "volume": 330.57364707456236 + } + ], + "component": "3597N17_Torx Flat Head Screws for Wood", + "path": "Purchased:2+3597N17_Torx Flat Head Screws for Wood:1", + "transform": [ + 1.0, + 0.0, + 0.0, + 50.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": {}, + "physical": { + "centerOfMass": [ + 21.25911186851351, + 0.0007026916216773757, + -0.000101096362255465 + ], + "mass": 0.0017850976942026366, + "volume": 661.1472941491247 + }, + "timelineCount": 3 + } + }, + { + "label": "BOM has one row per expected definition", + "status": "PASS", + "evidence": [ + { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "occurrencePaths": [ + "Purchased:1", + "Purchased:2" + ], + "partNumber": "3597N17", + "quantity": 2, + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + } + ] + }, + { + "label": "BOM quantities match actual instances", + "status": "PASS", + "evidence": { + "calculationAccuracy": "high", + "complete": true, + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "9dc96d3b-b3de-43e7-bcfc-b1c54d0564e7", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3bae9abc-8213-40c7-855e-85d102c80437", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "888f91dd9c28b0335eb85072a9f371e17e3967b1dc5f3bd4b58b99aa2de8e40a", + "rootComponentId": "9dc96d3b-b3de-43e7-bcfc-b1c54d0564e7", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Ralph 20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c 02-supplier" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "2026-10-02-16-51-30-119" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": true, + "bodyCount": 0, + "childCount": 1, + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3bae9abc-8213-40c7-855e-85d102c80437", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "888f91dd9c28b0335eb85072a9f371e17e3967b1dc5f3bd4b58b99aa2de8e40a", + "token": "/v4BAAEA0AAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "partNumber": "3597N17", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3bae9abc-8213-40c7-855e-85d102c80437", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Purchased:1", + "occurrenceToken": null, + "revision": "888f91dd9c28b0335eb85072a9f371e17e3967b1dc5f3bd4b58b99aa2de8e40a", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32Oyw0CMQxEu0CcUI5cLMW/7KYC6rCT+EYjSBSzR4qgFKhhs+KO5jIePY0nJ0mUMOUppHU6/CUlPV7v7/l0u273D/LluU2CEpcknWXJlKForCAeHUyjzRPNA9FrOxon2SsWpUmuXQKk5QFO7KCVqtiCUWP8/4WDqrJXWEwdBDuCS2ZoFsTGbkP12L4DOs0ps8cAAAA=" + }, + "parentPath": "", + "path": "Purchased:1" + }, + { + "asPurchased": true, + "bodyCount": 0, + "childCount": 1, + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "componentRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3bae9abc-8213-40c7-855e-85d102c80437", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "888f91dd9c28b0335eb85072a9f371e17e3967b1dc5f3bd4b58b99aa2de8e40a", + "token": "/v4BAAEA0AAAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "partNumber": "3597N17", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + "occurrenceRef": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3bae9abc-8213-40c7-855e-85d102c80437", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Purchased:2", + "occurrenceToken": null, + "revision": "888f91dd9c28b0335eb85072a9f371e17e3967b1dc5f3bd4b58b99aa2de8e40a", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/31OwQ0CMQzbAvFCffKJlKRJ007AHE17+bEIEsPwZAhGgRnoiT/yx7Ys25gkcaKEC8R1Mfo5Jd2er8/xcDk/rm/Kp/tjJTjlkmRmMWSEolFBPCZ0jbEkdQ8ib2NvXElDVZ5O4B4GohbQdBpU9FaCq7ON/1u0cdPsDayrg9BcXYIZRg/OPXvfVPfvX0j16enHAAAA" + }, + "parentPath": "", + "path": "Purchased:2" + } + ], + "partCount": 1, + "parts": [ + { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "occurrencePaths": [ + "Purchased:1", + "Purchased:2" + ], + "partNumber": "3597N17", + "quantity": 2, + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + } + ], + "physical": { + "bodyInstances": 2, + "mass": 0.0017850976942026366, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 661.1472941491247 + }, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:3bae9abc-8213-40c7-855e-85d102c80437", + "revision": "888f91dd9c28b0335eb85072a9f371e17e3967b1dc5f3bd4b58b99aa2de8e40a" + }, + "totalPurchasingInstances": 2, + "units": { + "mass": "kg", + "volume": "mm3" + } + } + }, + { + "label": "BOM physical total agrees with native instances", + "status": "PASS", + "evidence": { + "bodyInstances": 2, + "mass": 0.0017850976942026366, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass", + "volume": 661.1472941491247 + } + }, + { + "label": "flat CSV row count", + "status": "PASS", + "evidence": [ + { + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "description": "", + "name": "Purchased", + "partNumber": "3597N17", + "quantity": "2", + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": "0.0008925488471013183", + "unitVolume": "330.57364707456236" + } + ] + }, + { + "label": "Flat CSV definitions are unique", + "status": "PASS", + "evidence": [ + { + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "description": "", + "name": "Purchased", + "partNumber": "3597N17", + "quantity": "2", + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": "0.0008925488471013183", + "unitVolume": "330.57364707456236" + } + ] + }, + { + "label": "Flat CSV quantities", + "status": "PASS", + "evidence": [ + { + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "description": "", + "name": "Purchased", + "partNumber": "3597N17", + "quantity": "2", + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": "0.0008925488471013183", + "unitVolume": "330.57364707456236" + } + ] + }, + { + "label": "structured CSV row count", + "status": "PASS", + "evidence": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "2", + "componentId": "9dc96d3b-b3de-43e7-bcfc-b1c54d0564e7", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-16-51-30-119", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "depth": "1", + "description": "", + "name": "Purchased", + "parentPath": "", + "partNumber": "3597N17", + "path": "Purchased:1", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "depth": "1", + "description": "", + "name": "Purchased", + "parentPath": "", + "partNumber": "3597N17", + "path": "Purchased:2", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + } + ] + }, + { + "label": "Structured CSV hierarchy", + "status": "PASS", + "evidence": [ + { + "asPurchased": "False", + "bodyCount": "0", + "childCount": "2", + "componentId": "9dc96d3b-b3de-43e7-bcfc-b1c54d0564e7", + "depth": "0", + "description": "", + "name": "(Unsaved)", + "parentPath": "", + "partNumber": "2026-10-02-16-51-30-119", + "path": "", + "quantity": "1", + "sha256": "", + "sourceUrl": "", + "supplier": "", + "supplierPartNumber": "" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "depth": "1", + "description": "", + "name": "Purchased", + "parentPath": "", + "partNumber": "3597N17", + "path": "Purchased:1", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + }, + { + "asPurchased": "True", + "bodyCount": "0", + "childCount": "1", + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "depth": "1", + "description": "", + "name": "Purchased", + "parentPath": "", + "partNumber": "3597N17", + "path": "Purchased:2", + "quantity": "1", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17" + } + ] + }, + { + "label": "Supplier BOM preserves checksum and provenance", + "status": "PASS", + "evidence": { + "asPurchased": true, + "attributes": { + "asPurchased": "true", + "sha256": "\"763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a\"", + "sourceFile": "\"C:\\\\Users\\\\Public\\\\adom-crate\\\\_dl_archive\\\\3597N17_Torx Flat Head Screws for Wood.STEP\"", + "sourceUrl": "\"https://www.mcmaster.com/3597N17/\"", + "supplier": "\"McMaster-Carr\"", + "supplierPartNumber": "\"3597N17\"" + }, + "componentId": "da508289-7645-4616-b73c-024f8a9ec311", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Purchased", + "occurrencePaths": [ + "Purchased:1", + "Purchased:2" + ], + "partNumber": "3597N17", + "quantity": 2, + "scope": "component_subtree", + "sha256": "763ae5ee875936b61d6c111761756c6011e1677e2784e451de12c4e12ded851a", + "sourceFile": "C:/Users/Public/adom-crate/_dl_archive/3597N17_Torx Flat Head Screws for Wood.STEP", + "sourceUrl": "https://www.mcmaster.com/3597N17/", + "supplier": "McMaster-Carr", + "supplierPartNumber": "3597N17", + "unitMass": 0.0008925488471013183, + "unitVolume": 330.57364707456236 + } + }, + { + "label": "02-supplier archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 546828, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-supplier-f4225d88.f3d", + "sha256": "c30f73c80969270ea9729bde108ced728fd6743b9c625b87be068386de58412b" + } + }, + { + "label": "Original documents restored", + "status": "PASS", + "evidence": { + "activeCreationId": "c39f00a5-1b9b-45c7-9b12-7e9db43b9385", + "documents": [ + { + "creationId": "c39f00a5-1b9b-45c7-9b12-7e9db43b9385", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + } + }, + { + "label": "Preferences preserved", + "status": "PASS", + "evidence": { + "activeTheme": "darkblue", + "cameraPivot": true, + "gestureNav": true, + "invertScrollZoom": true, + "lengthUnit": "mm", + "modelingOrientation": "zup", + "orbitScheme": "fusion360", + "theme": "device" + } + }, + { + "label": "Runtime configuration and development pin preserved", + "status": "PASS", + "evidence": { + "name": "fusion360", + "devPinned": true, + "paused": false, + "runningVersion": "1.11.9", + "installedVersion": "1.12.0-dev.4", + "entryMismatch": false, + "instanceCount": 1 + } + }, + { + "label": "Actual native runtime identity preserved", + "status": "PASS", + "evidence": { + "image": "adom-fusion-bridge.exe", + "listenerAddresses": [ + "127.0.0.1" + ], + "executablePath": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\adom-fusion-bridge.exe", + "stable": true, + "processCreatedUtc": "2026-10-02T21:28:09.1205440Z", + "host": "ADOM_DREW2", + "health": { + "status": "ok", + "busy": false, + "longOp": null, + "led": "green", + "summary": "Fusion ready", + "tooltip": "Fusion 360 running, AdomBridge add-in connected. All fusion_* verbs available.", + "bridgeVersion": "1.12.0-dev.4", + "fusion": { + "installed": true, + "exe_path": "C:\\Users\\drew\\AppData\\Local\\Autodesk\\webdeploy\\production\\6a0c9611291d45bb9226980209917c3d\\FusionLauncher.exe", + "addins_dir": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins", + "addin_installed": true, + "running": true + }, + "addin": { + "busy": false, + "version": "1.12.0-dev.4", + "pyThreads": 6 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 63444, + "port": 50618 + } + } + ], + "fixtures": [ + { + "name": "01-bracket", + "status": "PASS", + "checks": 21 + }, + { + "name": "01-assembly", + "status": "PASS", + "checks": 18 + }, + { + "name": "01-supplier", + "status": "PASS", + "checks": 11 + }, + { + "name": "02-bracket", + "status": "PASS", + "checks": 21 + }, + { + "name": "02-assembly", + "status": "PASS", + "checks": 18 + }, + { + "name": "02-supplier", + "status": "PASS", + "checks": 11 + } + ], + "visual": { + "status": "PASS", + "reviewer": "Independent orchestrator /root", + "annotations": [ + { + "sha256": "9f6189f217ba40dc6197af7cd16ff4df3df9cdee3bb096769dbc5a2c20d057b8", + "verdict": "PASS", + "notes": "Viewed exact PNG with view_image: one rectangular solid plate and a single circular bore; full object visible, nonblank, no overlapping ghost geometry or error surface. Image establishes appearance only; dimensions and through-depth rely on independent native witnesses." + }, + { + "sha256": "2239949ef5b91fc362fd746ee2e8a81e235d7dc33a48e587501c561a2aee8e01", + "verdict": "PASS", + "notes": "Viewed exact PNG: three separated rectangular solids; two visibly taller matching instances and one shorter independent copy. Every body fully visible; no overlap, blank frame, clipped solid, or error UI. Quantitative placement/volume and component identity come from native witnesses." + }, + { + "sha256": "cd745a1060daef66a92598d16051cfc54c069033eebcce4621eb4592b2445b64", + "verdict": "PASS", + "notes": "Viewed exact PNG: two matching separated countersunk screws with visible modeled threads and tips. Both objects fully visible and plausibly match the supplied McMaster screw CAD. Provenance, quantities, and mass verified separately by native/BOM checks." + } + ], + "scope": "Native model viewport appearance; does not prove application chrome or picker UI." + }, + "limitations": "Representative maintained fixtures, not exhaustive feature/options or application UI coverage." + }, + "artifacts": [ + { + "path": "01-bracket-a8af8265.png", + "sha256": "9f6189f217ba40dc6197af7cd16ff4df3df9cdee3bb096769dbc5a2c20d057b8", + "bytes": 28410, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-bracket-a8af8265.png", + "fixture": "01-bracket", + "shotlog": { + "returncode": 0, + "stdout": "OK: Injected 01-bracket.png (1280x900, orig 1280x900, 27 KB) into channel fusion-mechanical-ralph\n Saved to: /home/adom/screenshots/shotlog/fusion-mechanical-ralph/01-bracket.png\nOK: Ref: #261 (the human can say \"#261\" to mean this shot)\nOK: 1 of 1 viewer(s) ON-SCREEN [webview] \u2014 a human can see this shot.\nOK: Broker: 'Shots: fusion-mechanical-ralph' webview: tab pulled to front (update alerts off) \u2014 surfacing is handled, do NOT open/foreground anything yourself.\n", + "stderr": "Hint: Iterating on variants? Give each shot a handle: --tag heroG. The human then just says \"heroG is the one\".\nHint: You're in Claude Code / a text thread: you CANNOT display images to the human. Reading or capturing a screenshot loads it into YOUR context, not their view \u2014 so NEVER write \"see the screenshot above\" / \"look at this image\". This viewer is the ONLY way they see it: point them to the viewer or a URL.\nHint: Are you sure the human is seeing the shotlog? Is it open in a webview or pup? Have you verified it's truly showing?\n" + } + }, + { + "path": "01-bracket-a8af8265.f3d", + "sha256": "2b4a63fcdd29839c7c84adf20fdf52fbe40e0c7d5f5a5053e742060350b46874", + "bytes": 75834, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-bracket-a8af8265.f3d", + "fixture": "01-bracket" + }, + { + "path": "01-assembly-flat.csv", + "sha256": "5973d81ece9cf3f5cee5d41d9ec9847d01d19f155a0b779353de3d2c898aca99", + "bytes": 381, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-assembly-flat.csv", + "fixture": "01-assembly" + }, + { + "path": "01-assembly-structured.csv", + "sha256": "22febbaafd424d6c28d04165cc11759ba9f1e9d199ab71ed8a4ac311258b9ad9", + "bytes": 580, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-assembly-structured.csv", + "fixture": "01-assembly" + }, + { + "path": "01-assembly-b174192b.png", + "sha256": "2239949ef5b91fc362fd746ee2e8a81e235d7dc33a48e587501c561a2aee8e01", + "bytes": 13874, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-assembly-b174192b.png", + "fixture": "01-assembly", + "shotlog": { + "returncode": 0, + "stdout": "OK: Injected 01-assembly.png (1280x900, orig 1280x900, 13 KB) into channel fusion-mechanical-ralph\n Saved to: /home/adom/screenshots/shotlog/fusion-mechanical-ralph/01-assembly.png\nOK: Ref: #342 (the human can say \"#342\" to mean this shot)\nOK: 1 of 1 viewer(s) ON-SCREEN [webview] \u2014 a human can see this shot.\nOK: Broker: 'Shots: fusion-mechanical-ralph' webview: tab pulled to front (update alerts off) \u2014 surfacing is handled, do NOT open/foreground anything yourself.\n", + "stderr": "Hint: Iterating on variants? Give each shot a handle: --tag heroG. The human then just says \"heroG is the one\".\nHint: You're in Claude Code / a text thread: you CANNOT display images to the human. Reading or capturing a screenshot loads it into YOUR context, not their view \u2014 so NEVER write \"see the screenshot above\" / \"look at this image\". This viewer is the ONLY way they see it: point them to the viewer or a URL.\nHint: Are you sure the human is seeing the shotlog? Is it open in a webview or pup? Have you verified it's truly showing?\n" + } + }, + { + "path": "01-assembly-b174192b.f3d", + "sha256": "442f25873c8bfec108980faf76316c068a7b647d38080f91269837e45ce261cc", + "bytes": 79145, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-assembly-b174192b.f3d", + "fixture": "01-assembly" + }, + { + "path": "01-supplier-flat.csv", + "sha256": "ee62abfa55d556a956e96e0f37cbbc9baf1e6b97c2981832017764a205c09223", + "bytes": 360, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-supplier-flat.csv", + "fixture": "01-supplier" + }, + { + "path": "01-supplier-structured.csv", + "sha256": "b9ad1d507f893a3c4aacc6e006b64b5ebba39813b6d40251c5bf20cd987b678a", + "bytes": 669, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-supplier-structured.csv", + "fixture": "01-supplier" + }, + { + "path": "01-supplier-e283e808.png", + "sha256": "cd745a1060daef66a92598d16051cfc54c069033eebcce4621eb4592b2445b64", + "bytes": 134026, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-supplier-e283e808.png", + "fixture": "01-supplier", + "shotlog": { + "returncode": 0, + "stdout": "OK: Injected 01-supplier.png (1280x900, orig 1280x900, 130 KB) into channel fusion-mechanical-ralph\n Saved to: /home/adom/screenshots/shotlog/fusion-mechanical-ralph/01-supplier.png\nOK: Ref: #399 (the human can say \"#399\" to mean this shot)\nOK: 1 of 1 viewer(s) ON-SCREEN [webview] \u2014 a human can see this shot.\nOK: Broker: 'Shots: fusion-mechanical-ralph' webview: tab pulled to front (update alerts off) \u2014 surfacing is handled, do NOT open/foreground anything yourself.\n", + "stderr": "Hint: Iterating on variants? Give each shot a handle: --tag heroG. The human then just says \"heroG is the one\".\nHint: You're in Claude Code / a text thread: you CANNOT display images to the human. Reading or capturing a screenshot loads it into YOUR context, not their view \u2014 so NEVER write \"see the screenshot above\" / \"look at this image\". This viewer is the ONLY way they see it: point them to the viewer or a URL.\nHint: Are you sure the human is seeing the shotlog? Is it open in a webview or pup? Have you verified it's truly showing?\n" + } + }, + { + "path": "01-supplier-e283e808.f3d", + "sha256": "a328bfce8ce895abf9ea95fcafdbe5f23337894da0fff44241a536662382a5a3", + "bytes": 549766, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/01-supplier-e283e808.f3d", + "fixture": "01-supplier" + }, + { + "path": "02-bracket-fff80f5b.png", + "sha256": "9f6189f217ba40dc6197af7cd16ff4df3df9cdee3bb096769dbc5a2c20d057b8", + "bytes": 28410, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-bracket-fff80f5b.png", + "fixture": "02-bracket", + "shotlog": { + "returncode": 0, + "stdout": "OK: Injected 02-bracket.png (1280x900, orig 1280x900, 27 KB) into channel fusion-mechanical-ralph\n Saved to: /home/adom/screenshots/shotlog/fusion-mechanical-ralph/02-bracket.png\nOK: Ref: #512 (the human can say \"#512\" to mean this shot)\nOK: 1 of 1 viewer(s) ON-SCREEN [webview] \u2014 a human can see this shot.\nOK: Broker: 'Shots: fusion-mechanical-ralph' webview: tab pulled to front (update alerts off) \u2014 surfacing is handled, do NOT open/foreground anything yourself.\n", + "stderr": "Hint: Iterating on variants? Give each shot a handle: --tag heroG. The human then just says \"heroG is the one\".\nHint: You're in Claude Code / a text thread: you CANNOT display images to the human. Reading or capturing a screenshot loads it into YOUR context, not their view \u2014 so NEVER write \"see the screenshot above\" / \"look at this image\". This viewer is the ONLY way they see it: point them to the viewer or a URL.\nHint: Are you sure the human is seeing the shotlog? Is it open in a webview or pup? Have you verified it's truly showing?\n" + } + }, + { + "path": "02-bracket-fff80f5b.f3d", + "sha256": "9c3b5773a7f18c58dc5c32fde38991c3f0e0e7d8859600376a2dd070cabcc1fc", + "bytes": 76038, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-bracket-fff80f5b.f3d", + "fixture": "02-bracket" + }, + { + "path": "02-assembly-flat.csv", + "sha256": "cd6415a257d56dedccef64f25c129d17683a454904b7a5c72cf4b8476a2e2f0e", + "bytes": 381, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-assembly-flat.csv", + "fixture": "02-assembly" + }, + { + "path": "02-assembly-structured.csv", + "sha256": "d47227df78ca2194cb15fc3743f947e7d3ca427952dc84d47e11dab47adc6e58", + "bytes": 580, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-assembly-structured.csv", + "fixture": "02-assembly" + }, + { + "path": "02-assembly-e11a7ee5.png", + "sha256": "2239949ef5b91fc362fd746ee2e8a81e235d7dc33a48e587501c561a2aee8e01", + "bytes": 13874, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-assembly-e11a7ee5.png", + "fixture": "02-assembly", + "shotlog": { + "returncode": 0, + "stdout": "OK: Injected 02-assembly.png (1280x900, orig 1280x900, 13 KB) into channel fusion-mechanical-ralph\n Saved to: /home/adom/screenshots/shotlog/fusion-mechanical-ralph/02-assembly.png\nOK: Ref: #593 (the human can say \"#593\" to mean this shot)\nOK: 1 of 1 viewer(s) ON-SCREEN [webview] \u2014 a human can see this shot.\nOK: Broker: 'Shots: fusion-mechanical-ralph' webview: tab pulled to front (update alerts off) \u2014 surfacing is handled, do NOT open/foreground anything yourself.\n", + "stderr": "Hint: Iterating on variants? Give each shot a handle: --tag heroG. The human then just says \"heroG is the one\".\nHint: You're in Claude Code / a text thread: you CANNOT display images to the human. Reading or capturing a screenshot loads it into YOUR context, not their view \u2014 so NEVER write \"see the screenshot above\" / \"look at this image\". This viewer is the ONLY way they see it: point them to the viewer or a URL.\nHint: Are you sure the human is seeing the shotlog? Is it open in a webview or pup? Have you verified it's truly showing?\n" + } + }, + { + "path": "02-assembly-e11a7ee5.f3d", + "sha256": "5b9c99805d45a65dac214cd07f0879de1325272980b274371d205613efcf5b95", + "bytes": 79035, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-assembly-e11a7ee5.f3d", + "fixture": "02-assembly" + }, + { + "path": "02-supplier-flat.csv", + "sha256": "4e966f7ada51873f1dd9a80b68c2010bcaa03bf988f470de01c71a2f5f1383c7", + "bytes": 360, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-supplier-flat.csv", + "fixture": "02-supplier" + }, + { + "path": "02-supplier-structured.csv", + "sha256": "75369fae4493898c4047a281493d8919c6a184fac328002c4e78f9a6cdd9a875", + "bytes": 669, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-supplier-structured.csv", + "fixture": "02-supplier" + }, + { + "path": "02-supplier-f4225d88.png", + "sha256": "cd745a1060daef66a92598d16051cfc54c069033eebcce4621eb4592b2445b64", + "bytes": 134026, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-supplier-f4225d88.png", + "fixture": "02-supplier", + "shotlog": { + "returncode": 0, + "stdout": "OK: Injected 02-supplier.png (1280x900, orig 1280x900, 130 KB) into channel fusion-mechanical-ralph\n Saved to: /home/adom/screenshots/shotlog/fusion-mechanical-ralph/02-supplier.png\nOK: Ref: #650 (the human can say \"#650\" to mean this shot)\nOK: 1 of 1 viewer(s) ON-SCREEN [webview] \u2014 a human can see this shot.\nOK: Broker: 'Shots: fusion-mechanical-ralph' webview: tab pulled to front (update alerts off) \u2014 surfacing is handled, do NOT open/foreground anything yourself.\n", + "stderr": "Hint: Iterating on variants? Give each shot a handle: --tag heroG. The human then just says \"heroG is the one\".\nHint: You're in Claude Code / a text thread: you CANNOT display images to the human. Reading or capturing a screenshot loads it into YOUR context, not their view \u2014 so NEVER write \"see the screenshot above\" / \"look at this image\". This viewer is the ONLY way they see it: point them to the viewer or a URL.\nHint: Are you sure the human is seeing the shotlog? Is it open in a webview or pup? Have you verified it's truly showing?\n" + } + }, + { + "path": "02-supplier-f4225d88.f3d", + "sha256": "c30f73c80969270ea9729bde108ced728fd6743b9c625b87be068386de58412b", + "bytes": 546828, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T214710Z-b2656e89512c462690aa2fb398f5cf6c/02-supplier-f4225d88.f3d", + "fixture": "02-supplier" + } + ], + "developmentPackage": { + "version": "1.12.0-dev.4", + "path": "/tmp/fusion-mechanical-1.12.0-dev.4-r1.zip", + "fileCount": 51, + "bytes": 4122270, + "sha256": "a067ef978422eed6efb7b88845d5baa190d481de7c1fa6388273bd0e21cf6b4a" + }, + "expectedFailureDiagnostics": [ + { + "run": "cp4-failure-after-new-1", + "native": "FAIL", + "cleanup": "PASS", + "checks": [ + { + "label": "01-bracket archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 31370, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T215332Z-fa30ca1932c1434ca0fb97595a03943e/01-bracket-57a7ba45.f3d", + "sha256": "d6268d1e8c5295a8fe596dd23ee578a6a86be426f0ab6b8f7bc3024047088e4a" + } + }, + { + "label": "Original documents restored", + "status": "PASS", + "evidence": { + "activeCreationId": "c39f00a5-1b9b-45c7-9b12-7e9db43b9385", + "documents": [ + { + "creationId": "c39f00a5-1b9b-45c7-9b12-7e9db43b9385", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + } + }, + { + "label": "Preferences preserved", + "status": "PASS", + "evidence": { + "activeTheme": "darkblue", + "cameraPivot": true, + "gestureNav": true, + "invertScrollZoom": true, + "lengthUnit": "mm", + "modelingOrientation": "zup", + "orbitScheme": "fusion360", + "theme": "device" + } + }, + { + "label": "Runtime configuration and development pin preserved", + "status": "PASS", + "evidence": { + "name": "fusion360", + "devPinned": true, + "paused": false, + "runningVersion": "1.11.9", + "installedVersion": "1.12.0-dev.4", + "entryMismatch": false, + "instanceCount": 1 + } + }, + { + "label": "Actual native runtime identity preserved", + "status": "PASS", + "evidence": { + "image": "adom-fusion-bridge.exe", + "listenerAddresses": [ + "127.0.0.1" + ], + "executablePath": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\adom-fusion-bridge.exe", + "stable": true, + "processCreatedUtc": "2026-10-02T21:28:09.1205440Z", + "host": "ADOM_DREW2", + "health": { + "status": "ok", + "busy": false, + "longOp": null, + "led": "green", + "summary": "Fusion ready", + "tooltip": "Fusion 360 running, AdomBridge add-in connected. All fusion_* verbs available.", + "bridgeVersion": "1.12.0-dev.4", + "fusion": { + "installed": true, + "exe_path": "C:\\Users\\drew\\AppData\\Local\\Autodesk\\webdeploy\\production\\6a0c9611291d45bb9226980209917c3d\\FusionLauncher.exe", + "addins_dir": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins", + "addin_installed": true, + "running": true + }, + "addin": { + "busy": false, + "version": "1.12.0-dev.4", + "pyThreads": 6 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 63444, + "port": 50618 + } + } + ], + "overall": "FAIL", + "interpretation": "Intentional failure remains failed; cleanup assessed separately." + }, + { + "run": "cp4-failure-after-model-1", + "native": "FAIL", + "cleanup": "PASS", + "checks": [ + { + "label": "Bracket sketch is fully constrained", + "status": "PASS", + "evidence": null + }, + { + "label": "Bracket before hole complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + } + }, + { + "label": "Bracket before hole native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45 01-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 40.0, + 20.0, + 8.0 + ] + ], + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "faces": 6, + "mass": 0.01728, + "material": "Aluminum", + "name": "Body1", + "volume": 6400.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-54-47-556", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6400.0, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "8 mm", + "Width": "40 mm", + "d4": "Width", + "d5": "Height", + "d6": "Thickness", + "d7": "0.0 deg" + }, + "physical": { + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "mass": 0.01728, + "volume": 6400.0 + }, + "timelineCount": 2 + } + }, + { + "label": "Bracket before hole independent instance volume", + "status": "PASS", + "evidence": 6400.0 + }, + { + "label": "Bracket before hole native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket before hole public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2560.0, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 20.0, + 10.0, + 4.000000000000001 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "8c20d12c789e47b868a28167f77cc5b821978b8b33a60f291c543e08edc43f91", + "rootComponentId": "6cf2c954-8439-45ea-9c62-0796ecf8b16a", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.01728, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "revision": "8c20d12c789e47b868a28167f77cc5b821978b8b33a60f291c543e08edc43f91" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6400.0 + } + }, + { + "label": "Bracket with mounting hole complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 5, + "unknown": [] + } + }, + { + "label": "Bracket with mounting hole native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45 01-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 40.0, + 20.0, + 8.0 + ] + ], + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "faces": 7, + "mass": 0.016669274388142117, + "material": "Aluminum", + "name": "Body1", + "volume": 6173.805328941526 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-54-47-556", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + }, + { + "curves": 0, + "fullyConstrained": false, + "name": "Hole point", + "profiles": 0 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6173.805328941526, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "8 mm", + "Width": "40 mm", + "d10": "Thickness", + "d11": "6.0 mm", + "d12": "118.0 deg", + "d4": "Width", + "d5": "Height", + "d6": "Thickness", + "d7": "0.0 deg", + "d8": "Thickness" + }, + "physical": { + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "mass": 0.016669274388142117, + "volume": 6173.805328941526 + }, + "timelineCount": 5 + } + }, + { + "label": "Bracket with mounting hole independent instance volume", + "status": "PASS", + "evidence": 6173.805328941526 + }, + { + "label": "Bracket with mounting hole native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket with mounting hole public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2654.2477796076937, + "averageDensity": 2.6999999999999996e-06, + "centerOfMass": [ + 20.000000000011493, + 10.0, + 4.000000000000001 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "be8ad9d8b61d4db3de5e634c2d2664fe3ecb6aaa38a47de58c88a17a81335220", + "rootComponentId": "6cf2c954-8439-45ea-9c62-0796ecf8b16a", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.016669274388142117, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "revision": "be8ad9d8b61d4db3de5e634c2d2664fe3ecb6aaa38a47de58c88a17a81335220" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6173.805328941526 + } + }, + { + "label": "Bracket after parameter edit complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 5, + "unknown": [] + } + }, + { + "label": "Bracket after parameter edit native volume", + "status": "PASS", + "evidence": { + "components": [ + { + "attributes": { + "requestedName": "Ralph 20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45 01-bracket" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 50.0, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "faces": 7, + "mass": 0.026236592985177644, + "material": "Aluminum", + "name": "Body1", + "volume": 9717.256661176903 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "2026-10-02-16-54-47-556", + "sketches": [ + { + "curves": 4, + "fullyConstrained": true, + "name": "Bracket outline", + "profiles": 1 + }, + { + "curves": 0, + "fullyConstrained": false, + "name": "Hole point", + "profiles": 0 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 9717.256661176903, + "occurrences": [], + "parameters": { + "Height": "20 mm", + "Thickness": "10 mm", + "Width": "50 mm", + "d10": "Thickness", + "d11": "6.0 mm", + "d12": "118.0 deg", + "d4": "Width", + "d5": "Height", + "d6": "Thickness", + "d7": "0.0 deg", + "d8": "Thickness" + }, + "physical": { + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "mass": 0.026236592985177644, + "volume": 9717.256661176903 + }, + "timelineCount": 5 + } + }, + { + "label": "Bracket after parameter edit independent instance volume", + "status": "PASS", + "evidence": 9717.256661176903 + }, + { + "label": "Bracket after parameter edit native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Bracket after parameter edit public and native physical properties", + "status": "PASS", + "evidence": { + "area": 3531.946891450771, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 25.14548516556657, + 10.0, + 5.0 + ], + "entity": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "0ee95d3672914fa64475c2f093dba6383dc53ee019286eadf3e99f341edfe3bc", + "rootComponentId": "6cf2c954-8439-45ea-9c62-0796ecf8b16a", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.026236592985177644, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "revision": "0ee95d3672914fa64475c2f093dba6383dc53ee019286eadf3e99f341edfe3bc" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 9717.256661176903 + } + }, + { + "label": "Failed parameter batch confirms recovery", + "status": "PASS", + "evidence": { + "_contribute": "If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.", + "_hint": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_hintDocumentHygiene": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "causeCode": "invalid_expression", + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + }, + { + "isModified": true, + "isSaved": false, + "name": "Untitled", + "needsSave": true, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 1, + "openDocumentCount": 2, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 2020, + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45-332b710b2fc1", + "output": "{\"_contribute\":\"If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.\",\"_hint\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_hintDocumentHygiene\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"causeCode\":\"invalid_expression\",\"documentHygiene\":{\"documents\":[{\"isModified\":false,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":false,\"saveStateKnown\":true},{\"isModified\":true,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":true,\"saveStateKnown\":true}],\"inspectionComplete\":true,\"needsSaveCount\":1,\"openDocumentCount\":2,\"ownership\":\"notInferred\",\"recoveryHealth\":\"notInspected\"},\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45-332b710b2fc1\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"statusVerb\":\"fusion_get_app_state\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73\",\"revision\":\"11ca1bfc503e96943ff3f25ec28af209c4bbff99d9942abd1593334b1839c01b\"},\"timeoutSeconds\":60}", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "status": "error", + "statusVerb": "fusion_get_app_state", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "revision": "11ca1bfc503e96943ff3f25ec28af209c4bbff99d9942abd1593334b1839c01b" + }, + "timeoutSeconds": 60 + } + }, + { + "label": "Failed parameter batch has the intended cause", + "status": "PASS", + "evidence": { + "_contribute": "If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.", + "_hint": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_hintDocumentHygiene": "Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.", + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "causeCode": "invalid_expression", + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + }, + { + "isModified": true, + "isSaved": false, + "name": "Untitled", + "needsSave": true, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 1, + "openDocumentCount": 2, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 2020, + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45-332b710b2fc1", + "output": "{\"_contribute\":\"If this is a bridge defect or a gap, the source is open: adom-wiki repo clone adom/fusion-bridge (the wiki page is the repo; a GitHub mirror is linked from the page). File it with this reply JSON (adom-wiki issue create adom/fusion-bridge) or fix it and send a PR (adom-wiki pr create). The fusion-contributing skill has the steps, including trying your build on your own box behind a dev pin.\",\"_hint\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_hintDocumentHygiene\":\"Document checkpoint: 2 open, 1 need saving (Untitled). Save edited work at milestones and before ending the task. A source export or Document.CopyToDesktop is a separate checkpoint and may leave Fusion isSaved=false/isModified=true; verify the artifact and re-read save state. Close only this task's completed scratch documents by exact identity with fusion_close_document after verifying a current native checkpoint; never bulk-discard other work. If Fusion reports recovery-file failure, checkpoint immediately, then save or close that document; do not just dismiss recovery. Use a task subfolder when saving to cloud.\",\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"causeCode\":\"invalid_expression\",\"documentHygiene\":{\"documents\":[{\"isModified\":false,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":false,\"saveStateKnown\":true},{\"isModified\":true,\"isSaved\":false,\"name\":\"Untitled\",\"needsSave\":true,\"saveStateKnown\":true}],\"inspectionComplete\":true,\"needsSaveCount\":1,\"openDocumentCount\":2,\"ownership\":\"notInferred\",\"recoveryHealth\":\"notInspected\"},\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45-332b710b2fc1\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"statusVerb\":\"fusion_get_app_state\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73\",\"revision\":\"11ca1bfc503e96943ff3f25ec28af209c4bbff99d9942abd1593334b1839c01b\"},\"timeoutSeconds\":60}", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "status": "error", + "statusVerb": "fusion_get_app_state", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "revision": "11ca1bfc503e96943ff3f25ec28af209c4bbff99d9942abd1593334b1839c01b" + }, + "timeoutSeconds": 60 + } + }, + { + "label": "Failed parameter batch restores native geometry", + "status": "PASS", + "evidence": null + }, + { + "label": "Failed operation has a terminal ledger result", + "status": "PASS", + "evidence": { + "_timeoutHint": "ab waits up to 60s 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 `fusion_get_app_state` until it reports done.", + "durationMs": 131, + "error": "", + "operationId": "20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45-332b710b2fc1", + "output": "{\"_timeoutHint\":\"ab waits up to 60s 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 `fusion_get_app_state` until it reports done.\",\"operationId\":\"20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45-332b710b2fc1\",\"result\":{\"causeCode\":\"invalid_expression\",\"error\":\"Invalid expression for Thickness\",\"errorCode\":\"mutation_failed\",\"operationId\":\"20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45-332b710b2fc1\",\"recovery\":{\"strategy\":\"PTransaction.Abort\",\"verified\":true,\"witness\":\"parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits\"},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"success\":false,\"target\":{\"documentId\":\"17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73\",\"revision\":\"11ca1bfc503e96943ff3f25ec28af209c4bbff99d9942abd1593334b1839c01b\"}},\"sessionId\":\"17a1215e-b6d6-47e1-a078-75117baabbab\",\"shell\":\"rust\",\"state\":\"failed\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "result": { + "causeCode": "invalid_expression", + "error": "Invalid expression for Thickness", + "errorCode": "mutation_failed", + "operationId": "20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45-332b710b2fc1", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "parameters, feature state, sketch geometry/constraints, body geometry metrics, component metadata/materials, occurrence transforms/grounding and joint motion/limits" + }, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "success": false, + "target": { + "documentId": "17a1215e-b6d6-47e1-a078-75117baabbab:5c13b372-20f5-449a-a10d-5305033a4b73", + "revision": "11ca1bfc503e96943ff3f25ec28af209c4bbff99d9942abd1593334b1839c01b" + } + }, + "schemaVersion": 1, + "sessionId": "17a1215e-b6d6-47e1-a078-75117baabbab", + "shell": "rust", + "state": "failed", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } + }, + { + "label": "01-bracket archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 75648, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261002T215438Z-26397b09f2484d5ca6b3f45ece85aa45/01-bracket-4940f5cb.f3d", + "sha256": "68aae34da143980fe25a3c6caba7f30dd57cd7426c310209d6a2f5d5eabd2646" + } + }, + { + "label": "Original documents restored", + "status": "PASS", + "evidence": { + "activeCreationId": "c39f00a5-1b9b-45c7-9b12-7e9db43b9385", + "documents": [ + { + "creationId": "c39f00a5-1b9b-45c7-9b12-7e9db43b9385", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + } + }, + { + "label": "Preferences preserved", + "status": "PASS", + "evidence": { + "activeTheme": "darkblue", + "cameraPivot": true, + "gestureNav": true, + "invertScrollZoom": true, + "lengthUnit": "mm", + "modelingOrientation": "zup", + "orbitScheme": "fusion360", + "theme": "device" + } + }, + { + "label": "Runtime configuration and development pin preserved", + "status": "PASS", + "evidence": { + "name": "fusion360", + "devPinned": true, + "paused": false, + "runningVersion": "1.11.9", + "installedVersion": "1.12.0-dev.4", + "entryMismatch": false, + "instanceCount": 1 + } + }, + { + "label": "Actual native runtime identity preserved", + "status": "PASS", + "evidence": { + "image": "adom-fusion-bridge.exe", + "listenerAddresses": [ + "127.0.0.1" + ], + "executablePath": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\adom-fusion-bridge.exe", + "stable": true, + "processCreatedUtc": "2026-10-02T21:28:09.1205440Z", + "host": "ADOM_DREW2", + "health": { + "status": "ok", + "busy": false, + "longOp": null, + "led": "green", + "summary": "Fusion ready", + "tooltip": "Fusion 360 running, AdomBridge add-in connected. All fusion_* verbs available.", + "bridgeVersion": "1.12.0-dev.4", + "fusion": { + "installed": true, + "exe_path": "C:\\Users\\drew\\AppData\\Local\\Autodesk\\webdeploy\\production\\6a0c9611291d45bb9226980209917c3d\\FusionLauncher.exe", + "addins_dir": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins", + "addin_installed": true, + "running": true + }, + "addin": { + "busy": false, + "version": "1.12.0-dev.4", + "pyThreads": 6 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 63444, + "port": 50618 + } + } + ], + "overall": "FAIL", + "interpretation": "Intentional failure remains failed; cleanup assessed separately." + } + ], + "dailyDiscovery": { + "runId": "20261002T215949Z-3bcf3f79020b4612bb2bced15afd6e57", + "target": "adom_drew2", + "counts": { + "SKIP": 51, + "MANUAL": 69, + "PASS": 18, + "NOT_RUN": 47, + "UNVERIFIED": 1 + }, + "results": [ + { + "verb": "fusion_readiness", + "status": "SKIP", + "why": "native transport may auto-start/repair Fusion or create a document; requires an owned campaign" + }, + { + "verb": "fusion_prewarm", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_account", + "status": "SKIP", + "why": "native transport may auto-start/repair Fusion or create a document; requires an owned campaign" + }, + { + "verb": "fusion_claim_seat", + "status": "MANUAL", + "why": "moves the Autodesk seat between machines; suspends another box's Fusion" + }, + { + "verb": "fusion_release_seat", + "status": "MANUAL", + "why": "closes Fusion on the box to free the seat" + }, + { + "verb": "fusion_describe", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_get_app_state", + "status": "SKIP", + "why": "native transport may auto-start/repair Fusion or create a document; requires an owned campaign" + }, + { + "verb": "fusion_search_cloud_files", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_walk_cloud_tree", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_aps_status", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_aps_get_browser", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_aps_search", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_aps_recent", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_aps_browse", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_aps_file_info", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_aps_versions", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_aps_download", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_aps_get", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_uninstall", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_set_seat_takeover", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_aps_create_folder", + "status": "MANUAL", + "why": "needs projectId/parentFolderId of the test workspace" + }, + { + "verb": "fusion_aps_upload", + "status": "MANUAL", + "why": "cloud write; exercised via build flows weekly" + }, + { + "verb": "fusion_aps_set_client_id", + "status": "MANUAL", + "why": "would clobber org auth config" + }, + { + "verb": "fusion_aps_set_browser", + "status": "MANUAL", + "why": "human/fixture workflow; --only does not authorize it" + }, + { + "verb": "fusion_aps_forget_browser", + "status": "MANUAL", + "why": "human/fixture workflow; --only does not authorize it" + }, + { + "verb": "fusion_aps_signin", + "status": "MANUAL", + "why": "opens a browser on the user's machine" + }, + { + "verb": "fusion_start", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_get_preferences", + "status": "SKIP", + "why": "native transport may auto-start/repair Fusion or create a document; requires an owned campaign" + }, + { + "verb": "fusion_set_preference", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_mcp_status", + "status": "SKIP", + "why": "native transport may auto-start/repair Fusion or create a document; requires an owned campaign" + }, + { + "verb": "fusion_mcp_tools", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_mcp_resources", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_mcp_enable", + "status": "MANUAL", + "why": "drives the prefs UI, takes foreground" + }, + { + "verb": "fusion_prefs_open", + "status": "MANUAL", + "why": "opens a dialog on the user's screen" + }, + { + "verb": "fusion_prefs_close", + "status": "MANUAL", + "why": "human/fixture workflow; --only does not authorize it" + }, + { + "verb": "fusion_set_auto_update", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_mech_capabilities", + "status": "SKIP", + "why": "native transport may auto-start/repair Fusion or create a document; requires an owned campaign" + }, + { + "verb": "fusion_mechanical", + "status": "MANUAL", + "why": "typed sketch/feature/assembly/import/joint/material mutations and flat/structured BOM exports require a dedicated scratch-design workflow, runtime transaction probe, current session/target and operation IDs; checkpoint verifier exercises real geometry" + }, + { + "verb": "fusion_mechanical#session_guard", + "status": "SKIP", + "why": "native transport may auto-start/repair Fusion or create a document; requires an owned campaign" + }, + { + "verb": "fusion_mech_operation_status", + "status": "SKIP", + "why": "native transport may auto-start/repair Fusion or create a document; requires an owned campaign" + }, + { + "verb": "fusion_assembly_bom", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_dismiss_blocking_dialogs", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_open_cloud_file", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_show_schematic", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_show_2d_board", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_board_info", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_open_electronics", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_list_text_commands", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_export_source", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_eagle_source", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_board_image", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_execute_text_command", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_electron_run", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_electron_zoom", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_electron_pan", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_detect_layers", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_gerbers", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_bom", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_cpl", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_board_stackup", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_show_3d_board", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_inspect_bodies", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_mcp_call", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_assembly_bom#realboard", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_physical_properties", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_get_design_info", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_get_parameters", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_document_info", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_list_cloud_projects", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_list_cloud_files", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_check_recovery", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_delete_cloud_file#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_delete_cloud_file", + "status": "MANUAL", + "why": "destructive cloud delete; only against files a rehearsal created" + }, + { + "verb": "fusion_create_cloud_folder", + "status": "MANUAL", + "why": "cloud write into the team hub" + }, + { + "verb": "fusion_set_parameter#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_set_parameter", + "status": "MANUAL", + "why": "mutates the active design's parameters" + }, + { + "verb": "fusion_run_modeling_script#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_assembly_bom#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_run_modeling_script", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_electron_select", + "status": "MANUAL", + "why": "selection state is user-visible" + }, + { + "verb": "fusion_open_by_urn", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_aps_open", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_open_design", + "status": "MANUAL", + "why": "local-file open; superseded by cloud flows" + }, + { + "verb": "fusion_open_board", + "status": "MANUAL", + "why": "local .brd open; needs a .brd on the box (make_test_project exercises the same newDesignFromLocal path)" + }, + { + "verb": "fusion_open_schematic", + "status": "MANUAL", + "why": "local .sch open; needs a .sch on the box (make_test_project exercises the same newDesignFromLocal path)" + }, + { + "verb": "fusion_import_electronics", + "status": "MANUAL", + "why": "needs a Fusion-native .fsch/.fbrd/.flbr on the box; creates a NEW unsaved document" + }, + { + "verb": "fusion_close_window#noargs", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_close_document", + "status": "MANUAL", + "why": "human/fixture workflow; --only does not authorize it" + }, + { + "verb": "fusion_close_all_documents", + "status": "MANUAL", + "why": "would close the user's own tabs" + }, + { + "verb": "fusion_export_step", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_stl", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_3mf", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_f3d", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_iges", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_sat", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_cloud_file", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_obj", + "status": "MANUAL", + "why": "build/doc-type dependent (OBJ refused on the 2026-08-14 box); verify quarterly" + }, + { + "verb": "fusion_export_fbx", + "status": "MANUAL", + "why": "build/doc-type dependent (OBJ refused on the 2026-08-14 box); verify quarterly" + }, + { + "verb": "fusion_export_usdz", + "status": "MANUAL", + "why": "build/doc-type dependent (OBJ refused on the 2026-08-14 box); verify quarterly" + }, + { + "verb": "fusion_export_dxf", + "status": "MANUAL", + "why": "build/doc-type dependent (OBJ refused on the 2026-08-14 box); verify quarterly" + }, + { + "verb": "fusion_export_dwg", + "status": "MANUAL", + "why": "build/doc-type dependent (OBJ refused on the 2026-08-14 box); verify quarterly" + }, + { + "verb": "fusion_export_skp", + "status": "MANUAL", + "why": "build/doc-type dependent (OBJ refused on the 2026-08-14 box); verify quarterly" + }, + { + "verb": "fusion_export_optimized_glb", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_fetch_optimized_glb", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_set_design_rules", + "status": "MANUAL", + "why": "mutates the board's DRC rules" + }, + { + "verb": "fusion_open_lbr", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_export_lbr", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_capture_library_views", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_show_library", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_show_symbol", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_show_footprint", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_show_symbol#wrap", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_generate_package", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_show_3d_package", + "status": "MANUAL", + "why": "enters Package3DEnvironment (exit needs Package3DStop + dialog); tour covers it; attach path in release rehearsals" + }, + { + "verb": "fusion_bind_library_3d", + "status": "MANUAL", + "why": "cloud f3d mint per run; release rehearsals (needs signed-in session)" + }, + { + "verb": "fusion_attach_3d_package", + "status": "MANUAL", + "why": "modal Save dialog needs a human eye" + }, + { + "verb": "fusion_make_3d_package", + "status": "MANUAL", + "why": "cloud upload; run in release rehearsals" + }, + { + "verb": "fusion_build_library_3d", + "status": "MANUAL", + "why": "long multi-part build; release rehearsals" + }, + { + "verb": "fusion_cleanup_cloud_files#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_cleanup_cloud_files", + "status": "MANUAL", + "why": "real cleanup takes explicit lineage urns; used by weekly build rehearsals" + }, + { + "verb": "fusion_new_electronics_from_eagle", + "status": "MANUAL", + "why": "drives native dialogs" + }, + { + "verb": "fusion_import_step", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_make_test_project", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_screenshot_fusion", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_state", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_show_project", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_demo#tour", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_demo_progress#unknown", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_stop", + "status": "MANUAL", + "why": "lifecycle/human-wall verbs; manual tier" + }, + { + "verb": "fusion_kill", + "status": "MANUAL", + "why": "lifecycle/human-wall verbs; manual tier" + }, + { + "verb": "fusion_signin", + "status": "MANUAL", + "why": "lifecycle/human-wall verbs; manual tier" + }, + { + "verb": "fusion_signin_2fa", + "status": "MANUAL", + "why": "lifecycle/human-wall verbs; manual tier" + }, + { + "verb": "fusion_demo", + "status": "MANUAL", + "why": "lifecycle/human-wall verbs; manual tier" + }, + { + "verb": "fusion_install_fusion", + "status": "MANUAL", + "why": "lifecycle/human-wall verbs; manual tier" + }, + { + "verb": "fusion_notify_owner", + "status": "MANUAL", + "why": "lifecycle/human-wall verbs; manual tier" + }, + { + "verb": "fusion_open_by_urn_note", + "status": "MANUAL", + "why": "lifecycle/human-wall verbs; manual tier" + }, + { + "verb": "fusion_action_ledger", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_addin_status", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_alerts", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_verb_times", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_live_feed", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_prove_result", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_set_driving_badge", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_set_window_sizing", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_cancel_run", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_preflight_lbr", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_library_parts", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_take_screenshot", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_activate_document", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_library_manager", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_plan_library_import", + "status": "NOT_RUN", + "why": "outside selected tier" + }, + { + "verb": "fusion_create_library", + "status": "MANUAL", + "why": "the five-part drill covers it (fusion_install_library_bundle -> prove)" + }, + { + "verb": "fusion_install_library_bundle", + "status": "MANUAL", + "why": "the five-part drill covers it; needs a bundle zip on the box" + }, + { + "verb": "fusion_managed_library_create", + "status": "MANUAL", + "why": "creates a managed library on the hub (cloud write)" + }, + { + "verb": "fusion_managed_library_link", + "status": "MANUAL", + "why": "drives LIBRARY.IO dialogs against the hub" + }, + { + "verb": "fusion_managed_library_pull", + "status": "MANUAL", + "why": "drives LIBRARY.IO dialogs against the hub" + }, + { + "verb": "fusion_managed_library_push", + "status": "MANUAL", + "why": "drives LIBRARY.IO dialogs; cloud write" + }, + { + "verb": "fusion_managed_library_unlink", + "status": "MANUAL", + "why": "drives LIBRARY.IO dialogs against the hub" + }, + { + "verb": "fusion_reset_workspace", + "status": "MANUAL", + "why": "closes the user's documents" + }, + { + "verb": "fusion_restart_for_addin", + "status": "MANUAL", + "why": "restarts Fusion" + }, + { + "verb": "fusion_save_to_cloud", + "status": "MANUAL", + "why": "cloud write; exercised by the drills" + }, + { + "verb": "fusion_web_signin", + "status": "MANUAL", + "why": "opens a browser on the user's machine" + }, + { + "verb": "fusion_routing_state#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_route_net#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_routing_drc#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_plan_route#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_routing_state", + "status": "MANUAL", + "why": "live routing on a fixture board: demo/routing/run_demo.py is the weekly proof (needs a board open)" + }, + { + "verb": "fusion_route_net", + "status": "MANUAL", + "why": "live routing on a fixture board: demo/routing/run_demo.py is the weekly proof (needs a board open)" + }, + { + "verb": "fusion_routing_drc", + "status": "MANUAL", + "why": "live routing on a fixture board: demo/routing/run_demo.py is the weekly proof (needs a board open)" + }, + { + "verb": "fusion_plan_route", + "status": "MANUAL", + "why": "live routing on a fixture board: demo/routing/run_demo.py is the weekly proof (needs a board open)" + }, + { + "verb": "fusion_apply_fusion_update", + "status": "MANUAL", + "why": "lifecycle, seat or presentation verbs: need a human-visible Fusion state; manual tier" + }, + { + "verb": "fusion_resolve_seat_dialog", + "status": "MANUAL", + "why": "lifecycle, seat or presentation verbs: need a human-visible Fusion state; manual tier" + }, + { + "verb": "fusion_interactive", + "status": "MANUAL", + "why": "lifecycle, seat or presentation verbs: need a human-visible Fusion state; manual tier" + }, + { + "verb": "fusion_narrate", + "status": "MANUAL", + "why": "lifecycle, seat or presentation verbs: need a human-visible Fusion state; manual tier" + }, + { + "verb": "fusion_view", + "status": "MANUAL", + "why": "lifecycle, seat or presentation verbs: need a human-visible Fusion state; manual tier" + }, + { + "verb": "fusion_electronics_query", + "status": "MANUAL", + "why": "lifecycle, seat or presentation verbs: need a human-visible Fusion state; manual tier" + }, + { + "verb": "fusion_schematic#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_schematic#missing", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_schematic", + "status": "MANUAL", + "why": "open a cloud design's schematic / create a blank one: exercised by the weekly tour" + }, + { + "verb": "fusion_make_showcase_project#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_make_showcase_project", + "status": "MANUAL", + "why": "places a library's parts on a fresh sch+brd; exercised on the Adom_ToF library" + }, + { + "verb": "fusion_eagle_import_status#guard", + "status": "PASS", + "why": "" + }, + { + "verb": "fusion_eagle_import_status", + "status": "MANUAL", + "why": "status of a background EAGLE import" + }, + { + "verb": "fusion_show_attributes#guard", + "status": "SKIP", + "why": "requires an owned fixture campaign; legacy name-based workflows are disabled" + }, + { + "verb": "fusion_show_attributes", + "status": "MANUAL", + "why": "opens the device editor for a deviceset and returns its metadata" + }, + { + "verb": "focus_invariance", + "status": "UNVERIFIED", + "why": "No timestamped foreground transition stream with user/action attribution; background behavior is not verified." + } + ] + }, + "backgroundCapture": { + "runId": "20261002T214603Z-e79a937ffe9442499b3f86dad0bbc965", + "status": "CAPTURED_REVIEW_REQUIRED", + "transferred": 1043, + "errors": [], + "visualVerdict": "NOT_REVIEWED", + "stopIssued": false + } +} diff --git a/docs/mechanical-verification/cp5-assembly.png b/docs/mechanical-verification/cp5-assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..84b9226d9614e74df3289eceb4adcc5fb5e3069e GIT binary patch literal 13874 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 U-}KiASQg~5z}xM*D=+@P0FT^pYybcN literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-axes.png b/docs/mechanical-verification/cp5-axes.png new file mode 100644 index 0000000000000000000000000000000000000000..3a73f129aeedfa0cf0c6aa60812cca4ca626cd8e GIT binary patch literal 18027 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

g$_@LL#RM7T~Ns5bD%O&u|dO=6-q6X2>E` z`n5XZ&Z1Ues)P0J>}y#lWS{DPeh*4lnp8@cK(_&9pBn+IhXF^?CRRVZ%NjmxyX(2cwV$TPCHS!QnnxH)$>gsL0= zI&Avo;>7s3k2QIZp>#P|7Vkjlgw31AO}!-B++7ZtOZX!Ld~NPmSps<`-j*U%r8E|L zm=<=yGG&knF8v0iCK=0RjaS|ObrqCq7>JpWTU2#^YET@;O;DIbGv1k!@;d0oPHw83 z6mx1aDU;8SRs|d@4_Gg=bMttzzE0naG6t`!Mi70Py>Monm`@SEOwK7g6*8 zSjO)1U&BHv?S4X$g4z;xgEHHW5Bokwj>Sq+6vkMu9GfGloK z$a$)ek1R6S8?a$vIb)dR$h9LGj-kmbZK}%eYC~ItI#m&BdH|#oVB?Mz3Z&?-cuRN( z!k~Y0pZRG#HReFAI=qhz0^^ytaDidctVw#C@W5L8cIt_iJ8DvdbwK0WD-w*U@X%uFG`%7q<^ggV05FcYjck%)QF*pHPOIH52_{g9Kmj>iA9+okP*T zXx~2I)0%0n>}GaV(cBzb47DGDBWEf|(~U3N!({9PRB3rc?G1n0 zX!$rjB}6{yNnSd8sO~Sl1Ycg(QP!FRRV-QDU@209EjmYzOh4f!;D5Vr8ZG{}Q`2eF&+qRaM1W`wj25x6%6Y;%x&yVgDt56~+MGulspTDEiX# zR{-jRiZ^|rX2hjROF?u$uvuX9blNIBLyd?Cc3M1zk#ak%>4J$!T{GuvBtX<=DB|ge zhsQsAyr_dbNm&u|vrZg0m?FUN$L;Q<0E(RW2Ny;vFN~03w&xy8%n5xKWlz|zOv2(~ zLpgrb5cPjJ!D7?i7eL+#kx1RPr#hnNPhUiI=B883lN>*RLqC7$Gt{673myFeP#0_8 z(xP}xvufH=^Q?fpXZ>e+uUF?V)z%A(b20KBt* zz|?5n#D{^D8@~+I9GNlW|E1)#cR~r5oD@mKYjRs1wJ#lbo274r^=HKXJ|_##IEW_i ze?ldS9{sXzLh(F$$I_7Oz`%4vL5CE<|A-j`?OhEy`0TmQ0ch&h{DuK*+k6=@tM-?X z2=5@u-e5a8zFkbw@pA)vsLubj%Ek15HXy5uF91^6Yu|naBuGg`LI|@Q2pzXMK-eKi zwpw!*K(#F~iE0L*R*5z21X^hghvyKW|f6TWK4yHS0(o*nj~5(5BAEhT1(OP)waiX;;veLU z9q_3KT=Dt|K%Yb6k*?6!7?``RfO9U*Tq)X!>-hbzLjpWrR(w%x1o^{S^ds2IVP}$L zr+@frw_bgbmOR`}ei3ndrUl z5@NmP!8I!n`Q_hY09xW($FIcA6Bh%4tau2$dchx73q2nHqVchzXLNoK_k;XPQTz6`w^`xk*7x=xk zi3|GWVz=WpTa84kHNRi83WBjcE=L}9SOv3=L{VN;h2%b$B=6k04v%Xh$VamYjmIlL75A0M4?2cZf4PHy8FZ zw$^N4M6?>h0Q;3iwX^?>+_hG2Frx9!Nu+n_2_c|-lNy7T;ap@EV`rn zO%N%~XId7T^54)NU(siI%dec%ew(cYkd?Zsa7vt&)r=GSM;ZSwJ$9jc9I1u^$Pnj%$Y*SQ`|Q{_M>Sm4=7&@ z0AQVQS#P3bnrF`hTsx6+tQ1k*baj&zE={Z&pLke|1mgXM@mxRW?2OJo;#s z#!BEw>a}K)9gp@8(vS80hJ5Jv8iHof64X-Z;T%wfW zeRRF`rY_J2)Ao)_uuDwfqwEjsOMH=csp}uC`mQ!t34{I?1)RA?_Bv)ts)iBNiHAk{ zl`C{|bCti)+qn@OP+ogBeN}6G<$snv4i(W%h4sgdt}q6sED#*A;}4J=(aWJH8wNM} zUb9gdx^U&FL$)O%>1B;5{$*Z$S9#wKf8f%R&n|%~?{7||8Gl#fZID)u-22<`YcBwS z>hM0mJ|#Dx^dMj0n$TaN$zDzjJJOj0Z`64C$Rrz&--h2V{|Cz&t08|!J&LGQ60ngu zYEb19n{n6)UPeo4xP2`G$vDVN8UAIqX8GVh^gba?H}Td$?}qayz_m`f{sgvQUK#(# z>K=#T1B&g+0p00Qa^x)UYb1Q^{J;?KZka+P^G|iF@0HhVOy2>=!zoK2wmTc82#19( zq=jiXtb$Wo^e8krYhPCpEwFjU)bN{JjC-78c3~s?#0|%d1{2n>s=tbbUKC^g32W$E z&}8Ft1|a-n%KXJB?{g``d)s^-oShZ;}hCjh{Ep`_fmksn{{X)c|u zk+XW-E=P8hS_;Tl>>}WD{SYBsZTx zH2HhELvJG8f!Q@OL$@qXhkZ5^XXv|uD#&BFy-}OnpuFum`vejM2UpnnfZ_F_TX5cj z34C4u_XDiLlGsubzN-ULLj({0!(fZ#b%nBi8ZrcyZ-m0au~5L2%ovpYI_H@Z;6rOe z<=TRG>N6p>fzo$17%{)@^D>XAAh ze*B}XQ1sn7pFEuiKmpMs(d3^?MA=LKwdxA>Ic<4h*!SWLd{h_-ah$WOR{=#0vV4!7 zcxM#&kBPhf4^pW@u8aByB>qyQhwWI>*}Lq)VLh~WEwE&n$=>$Tn?I|2r&_)H($@K2tU?1Ln1ORNK$ z*+p$uPLTc|iCOzSa!K&60+8deHiNycL^-l_`V!IYV$z`!E61Y_c5ztu{|I7&jVn@l z^dgeESq6@?FRDTD&NHkg73?`l+{n=4SN$&!osJaB8cqyUf1|^Pc0>~P`@RsN=;k~h|9b0nDjH6e*{?w|_k>QeyExdV zNahyxnS}qAYq`jNK&Iy?df9SdLjWiIh9(;w#7{++(k(i3}V~g(?og z3ilZ24^TCFDV)KIcXMWYNW-jyrXDMi2y({#7fr~!rG`jF{&iDo(Q)}W5Nd&Q99D^2 z#jNU!Wz$k#L_p+aK;XLX!Qf9PBSY|_Vnii8@L zTyDv;u4Z7NI(I?6%VA+9x}o-ZsKyExs8PoNaXYs|y#^p;eiMAGdZR;n?RF`z3B;}Q z(b3WDsXqP~M`95P>n9Ku=V1@XGg%$cp0jDS*`yLoLW0rm!jK-Gqo$y?^;_^+kA889s9=215cL&)evLU4|H62Aal`XqsOtOmgf%ccCfgw6 z#pB*~U~1rFj?{|AIu?DUtoXI`%ca2oXI`jEMTYMND1tv($(ln7CxKHC9LiaDn6516 zzKU==Rp!_-MaXy`WSkDXEQ(#V5P=PvVzCO#0bei=B6a6vPg*y>SCalP0>X(%u}IiF zI5^lm-c_=Ahvyu0vK5XWx;ngmsi{6O%^yn!rjG2JfoMcDT|z*ehEDe2H`y0WzPLgu zZWLRvo`v%4J$rV&@ORm-4&AsolfL20fNpe<6PEdc#iZV;yOrCX8x6huoQ5dq?)uSJ z9p2HjNR1n|P{td0x3shq1d%%lpXxyPs?`SL5n~Qz6qOnCjLeZqy%zZv8S~PR@!FmA zO^#;k64?TvN1HCe z^#y?8FXXG5anSyCh!m#|N4V-iQ3jsE-F?t^<7a-afk4pT2WB+hh5_?i0$FRpxH1Xa zvniGfP(04(OYHhLHOP9a9)*zq$ID&|#FJ2m3!EXASRnUb)4!XhiD5#rDu|&0_3ZLJZLnoi%2=*uE?pOb$^;p~UGQ50En})QCJ{=DDIpyG51h2CTb99wuGn z33zrqKt?x{a3mPxKM&FU_g*FMzD9=8S|vvgye8pga7xLi+pzD|xf37@BzeEQtichU zmtoT9W}{xpEQ7uVYL-4Z<7Jhv0~azY>_AuqWDO!bfGIPs3oS{+pef$T$z_qdHL@l* zb5_aHXZmYN_}UmE_yKa@OpxBJ11O_ct$agmNycRfqbq7_wS>ptZ1X&93)k&}kAR5m zY$V_-yYjNWnpe-0M@~&gTPen>XrwDegm+{DFs+9p0}sf@!Dj(U z+60hc49u!3)eKpUpKY75=J1~$$4|3rbf&4Ig;Ean@do|kTc9>4=>;%S3~OGtX)DGB z_Wiw5p9_;k14Yj9@n&!#R z%aHwTOZvY~X6A7F%7X$(ldX3ABhmh+8n~M`tNU9o?{vgx&wHrETmS3`kPo}Oow;8) z{K!ZqRy5_!*(k{nq=xgGO+DZGIK>JJ@l&gp4s+tMf-uenB|S4E6KI)5ui>?=vO^al zl)V;WM(;nh^z+A4CxZmXrHYIa&!lHZl3o2p`&8}h+ zFL;aZJb@2aFJkPZ?jx$a9_l*cB95pRT}fEkU3v?rduGesKXQcnFusAqb59jA4cezi zso=SH2NxJjX{R?0SO;Ha=LNlDIG#O>XPiCyniYWC8c}VkV`q0`Lce>%l%Xoc^xevY znwJM>GShIPkI6^N&+K?@y&?Du#*+XA{^FnOz7O8#;)7%87&cYFhK+^iEvRB6lF50D ziI_xto)mzHFGM}kMe)3qau!>#{Qjf|{!^x1Dnl$}tu(0?erXlup6845>Ozo&`-tu` z52hz-LWvyS`p`s{USRq{T=R2y=S_q3c!IgiP};CU9Fkxy_23r}xsKtC{!W8gWlQ!9 z^^Ue6%#;>P4}=?vvQAw9I}Qp)6iCe@X`2Fg#Dy;b^DgJc#xLfu*uk%uzO7xEY}>Hf zK0&wV#qkB+zzu3x?-`lb3p$sYGvb<(>=Bf#IG3_!C_PlD7%sda$@vrc&SF4j;Hd$-0cYd(iy&fNh&mK)PX*^I%o42)*rh}~E&>cb2(do>pWc+ya%K4h1 z26o4;agVht708_O@NKMfSne!8bHj9v-hRk9AlLouR>GaI%5(hJ znU1>H?tGWJ5O$g7iWC0y*WhI%2hOg3$=P0+bhRmL+~?fLpf4-)QBWd*!LM>42z@)G zonm?QV?++7V&W4)a;QUa;O}jKf`(Kfj~$R#f%Bw_XUv3Q4A1)-PXE64t!*JKX}HDfbLw^ileal)`;;4U4TqaP z=TSLA;n)Ccp3PRI*ZbA9ItQ|j;)Bc%?o*5mnGf+ zkeM2)qYFntHR4Z2ax1o?GLk)12JDj5BB5Bfn=W0yfdi4)uHS~~m?Yn}?)m4WSsOh8 zaqdfi>_?WFXkW(VE?X%IRTeKEz7-=@n-h*-J5_+97ikK{@Wb6iq^n9CQWr^Bh>R3| z1$w@1C*-Ax2;TYuZF2{>*^e7T2v_PiJYmI*%9G}WlhfQ6!XoNJ$dkrc=xNp@Ct*Qc zbc@*Ec8}Dmis1J%%51E#X;|S%aO8AfpT54a!ZOIv2(n;M&kEw>frdW|G6-mLPe_Xp z@h`~tcg?#clN_T3lO-d^`tr95IB#DRbGg!V_q`7gRzK`qIyA&%LE-CFVnyA3?RIhE zg&|YXH`5@y`R`K+U&u&ZKNS5jJD?%}Bk^)6fVpl!75j$oD=mtt<24)Eq2LJRO|5DE zf^k|!L%_{8Zg9n>h1clpL^*G!mfaI7Pg!E!=u?TM?;B8-p;Yr z@7iexD|C2azp)yCvS=ppgGdLYUu%oTN-SyTGNE182(!_n$X>YTqFcguy{};2o&oZz z|29X;S36sZ!}c=}5rxe;G`^4(o>U0_0*CFVK&8;bdu(d#5UNf^r6*g#848ahr=kk7zgA`5(m1MD>K5aem6Cp-}lgTQpz(&DSZ{;xJA}+mbePA z5L49AvR*D*{M$A(D)*p-%%xdXxPR}S%*lu@<8h}sU9!%xq=nG}MvUORnP6XJ^oY>e z1Tl3z#rMVhyQ#vaCFaoh3(cOKka8Na>rlKq8dM#}Rn2HLlB+!eg9!e)?q&`sjv@E2 zKm-HQN4R7t8HjpOk^UEKhUw^}VY;Jor0qOHSQd{+9^LBm{*OZ5<{TOg!!*9E_A9*dqIhv+tXefhHrO0;lA7F<2O% zk25!$F0g-^NBk9YV=`bvK!^!RmA-Ckxh*@xxWW1(GkD^V4{Kn&C4-a`yKtHlwG_%( zMeyKhRUJLYe&uVj6dFFRcyeNnQ;SUUhg>$iLRCceEVwbNU8m03MIJ>8>TjV9picD- zjT_({Ig-Fw_j$2+i)@R5bbk(WJQMr5 z)6)Xt@v-O?3$eF^y;NUXPTu^*vZ0FuslcU}7~(U;{i0PSfa9iL#_$JzZGc`qsr*hI z74l7=;YP9F5xVz-y!l$>B|na2TO+fh$_Tk$&6+XuztXCC+#{Qf%v#Zb?+S*7!{2+z zpR1mX;mkJ|^B;uIB#)VI`Nk;CfAgHGkh8Z|cTe`~Zp%BRq8TdRxj`^D6uJ9?NGu5d z%^#VMuED)7Us!FE{Np&$85f0;QUAzwge}i-^P{doqJ9Ry zx}ziRjyfWo%Wl(JYPg%tihXxM_&YAdsm1I{IIG_Swn=0I5SnhBgN%=bknH)jeStqS z8t1L_SIFCGb9m+WjrZq-&Kg2qHG?+)-Zj>(c}bHwq>`GE--T6S6`W_);@Q?4LtCL< z(nW#_-TL7(qy3#E<#)wxTSJHXMIk|9(Taz;AJc`FqrcP%^uT;(MMKcV zb>G^%7|lCso~~2YnUdvk+9#)s5s3;Qawe}=gM9K5>?5GdtXv-b~@+Yk4^_7rM4g>CJ^}xxdjpa{VX!p2?Eiv7I1O z_v+0Of@h^VlKqK5F|HYSHB$gJ|9Cjx8YCKGRL|Ek__gsr9yvB0YpqNOZSkz4<}C1s z`o+C|l#n#>9PwtUZ#!qEn6I^Eh_jY~6J9J=x4KLl=8smNF!wuPpZ1(_hyALy)j!I% z8U4XI9zmEy*>_)2N6^@lK^`RNzB7p==8`U8ME6U&a3!WYnyUbF4?v z%v;EvXW8{N47P7%PU=K=-(T>xzeau!=fU$p4x#8K=mt0l@cP9-r^FcXpuIB<*aPeySGh#o@aj!RPjg5 z#ni5s_3YlFhas0Ofqd#`pEI|k6L|NVBHc%JJKMMSlf-P2sKXA@k*UkJ9o4Dg=0r!G zo#vlv@fxqX;>2~@P!*u~idOmBloZi^YkB!eW9>|YCw9C|L~^IP9PVQ|3YSlfF{T`V zXOH6}b+e)l-CYPcwl}sW3Qlc$N+B>7Ezb$Mc)5!E^Wh;ck`t^U<@FmLEP<*WJQ&1I z)|s>BAFHU0(({{e<(gagQ{f|L=7?BMa)Bnfc`ZG>%m`&E#XN_l4;Ky;&F~zrx}i5| zVaS^?klq!F-t^0>iu)7d6=HvSQGVzA&bC?)xjgvcK}&u({aN72-TQiUcG&euY)?&d zTXv#v{`R(qEWe-QwmLQ4rU(~OYlk*Hh#DqO#tBCYI*i-IB8Hg%owc&U800Wu$S;9t z_)VAMPL5H%orPUCm#w8hPU2eYlqrAf^5qM?HI$x`9z6Z{$C;;->IEiJ{mn1OsmKdm zUCR|N`64Kx+wK)uW=2D??ChZ9l|8Lck*QpX-9mFuPR#84m)npUpxY~WA5s?uTDuH( z9z|w}4mR1hZ{1Qn-BZ=VqU(?kk;b|QS!Q3AS|M%uFb+4l8PdK#V0m&6Awc9)!`q5#Kr1SIp6T+5OO>KL}taHSAbq;q9F4NgWn(2EBLODtDMJ* z2T3-UbNk#F+T5@xBy(5MuampGN>LS}wN>XB7mIC26CL{R(j)eww4;b4A@BMbS%)fB zG7J|$e{yfJ4peyLQgzq4Y_3a1?P+ndBf{c2v9UUw6?B|NmDK;OED;!aU6g|{=Lx5a zB9whPIjM!1m!~K@av>S@kGZ|9~8NM3Gj5B|BBoEin z#>0q==!LD+==;*?cByHx1vIgs7SVIpfv`{+D+w#;M|y8EP*>KmRMG=b$R0NpTN1~E zR7OJv6OWu?qtlIU?kU#dv>t4EL82>4^%O<}$c~V3T^N4C81p!mv zC0kxyt%mS1suFEjeVL9IkEL~BAS9nhUJ9jlJ>F zBkA`nLSG%}Iz%ck?y?QTQ!C30lU~LAU@VM#$6XlV+pbGg?&H?C&qN)k3Ytr6s`sTy zS62RkWY#w)lLUjAtvFIRM*KnM`!V z0|l|y)Wc>swt-IkVD{{f>zRy&KN!#a6Y~lo?&X|@cf^CN%;oG`mB=9BSgoVS?1SeY zDp>rHmE*hG0{in>XKt-uoxOzn6)&z3%JNfXhVvNKB3ry7Dqn%OU-J?MO}`DA-=2fs zcm=eLS-$3_u%_tnXfEft;L&``ElqMrJ%OP^<|K!DTStt@*B7kFjI-R-Q*0+i86R}a z37^bm8oTOUkYpc%VimcGf%AVOh&d=E$|nDj&*HzoSv4c*62{Ii0kgO zd=We%^ky)+hi`c=tsIX{v^!oax@gHU5_i%LQ~R*OkK!ZirDacyMrS<-s0U3X_9e~6 z3W;{o#+u^kfx+hM8jQ+$SuvAT`Ba6X`TKnh#BTmhW$D7aO=%GJMGiBi+D2hE;Yhfn zb4rql=clrhQG(d2v?JlfslodCeeLHmE^xW;?jU2Q(hlOhlshaQ=Loqh+LPlTFgOHf z_LhT5gx@8a-^)@%+OW$+XXU%6@j}j)fbY#JyBekx(gPq1Tz_O-N?iM^*u0*2E>;uS z@Tkv|o)xW))tWi?=Y@fnG~ccY(^@aBiXub4R41GXrehG8^f%85p0r;LgE@QT{U*`f zS%`Gp@ZG}Eu)bo=)zx<5naYH+sS?xK&7n>&tG^0u72h>ZeTnW69c#7JR?PQq2n#&S z{A{FTX=~&CQ_7&d8@K5(25uE`1g(~!P|`U%{YbUk^~Jki5zkg550`6KB3a!xUU#|; z-ddi@z>A{_TDEJu=g4`|c)Qs|V);{Q$*rE|&0IDYFFrjV6tF9%>JmFg@II$otkMnA zp=3RzZm>FEsxIm~5fY1lzQ1!0FI|4iWHV<^bz0|U=i)P(=R?*p9eq>1Ei9yh#WVfa zGkzwul`1^@FdFCm`oemWK4<`lgDzHT(d6uDAO)MPiuT%hjSO;hqOO9G&BALhoO{o; zOm@8t>if*fGqUK!m!v9LiWK|0x+gz%WR07vW|D4;ts>_bldp4nI-`}v_Eyq4-wjdu zI5@RkBK!lQApJpCZ1vc4f=6^hEj5GO@!{pW9!~hr%TL^kyL)Uir)P9yZuXJ7hQHHB)Q554kX75s1Q)@f012em4ZuuJ)=eQ|V2c|{ zU@HDWJ6PiSrQqD2-aTrmm6n%}+>lZ}<|LX;}5>xChUfBmz!MtG~FE zEZR3C-)~Z4WsL;Yw;vSLax0^zO9N5Lj}A9XyrN>P)CF4@q^)*p#p9fiQzq@rs?!gL z|D-jShw!ZYkNj*?tfdwz4JZHjK_iL;t)jgGsbz3U45auqQTEJL3HB95G22o|JQeW( zbMk(4_hxQcq1I8IUJdz%<0UlPfU9TN(Z!@#j~iMFaS!-N<(L}lThu4rpUd8q>xjW= z!%H%+OK0tj`ml#Dwa!ExiOF0`r#pdSk%_(&9mjux>!J0PHvsH6q)xRQK}NS|k{!*} zs;Oz!zx8m5Q(1X5-||1ks~ye@IXH313o*IUecZs(jnnSQM~xMa`FVh;N^zt=h+m2I}@*2{0PIc*(0n=G2a_16xbp74Ir zJvEj8;bL{P$n&fUy;^uyMSSx-cjlJgtDWgupBDPX`;T3!rm?>AgMt#%)>;Nk*jh}n zB79i=kemokaHMaYx z*fYn*_)^*0h)i!fX~c1DGit9Jx_2jC-_f})zc>HP5MJolMZ7usbX)kBs z@grIbUz=MqFW{1so6CDV1fgYk!un5va4EeT%oljxT<9m8EI|(cW~w|(6P1WhUA#KB zUwxvd=bX#WOf_U?kP7jfc`>KYqV>QB4VlyZRM;rl-PhPRT9vy;_{vw*PFis70F4Vb z1ixdn^WXvu+}9L$=zJN$il&XYLz;Ds9cTJhKe5EgyuxS4s-_gDcZOg7W|+gUj5l3> ztVNYlIZ-}e>ssq}o^h5>1z}=4ZmEb2YI$veV6Eq}%s;!OFv<^rz8Odko&(Kmyn)@r z4Pcn$Tswge(TVuO>!Qjd{(I`$h`3uw;0O^FN zrc@$=M@KgMr5?vuG>vH>H2J+$1=0koFsw9L8)EatBgvu?P@@*la${qqWpb*frLqdA z*?NX2Qrep(9X1ptN!qN9_2dg#XFwTER#I*d?e@Ax{(=(^i(`W4@E1Tct87eoD04<3 zQv3JH;p1Izw^j8|T_Y27+G~g&7;Sm-XoX+^E5dg4uoyJjQ~dfPP!0LNc3P>nI5|Y- zJeSp_XwJzdutA0RdS+5X(iq1ka}Y1MPWl+x^EDq{us2&Ygx#+#?h`3vDU%S~4b$K+M)24pTit7}bK^F24U^dQ_RMIK)Q z7bX(?CLEbNHRPYFNw!Hu5{R8%%H;WwerjY$a1R(%6*adH_bQ>N4e>_uIgfzcyV~)o zE})UG6iUa7Kul%Li|D#RYiLNi_m=i}nyGfqzTg)@%q|DzUp1X&;hvfbWjH-*?|HZk zmy50d{c#3@X~hRvP$;pv@nO0#mK!cEAM;bjSEsQ9Wl*|}7UT@U& znH|*PY0IBPufqec^?S)Khj{ZT3EH1GrV4@*i%AD}i^*${NH0kpPS?0KkRE_!f^@IF zFvi+*b^#Q<7Y@abf9j7L4V&Ln_k|`b7xSC%0?Xn|F63k9d*fMtb!S5aO{7>BHX16jX@wDnQB&_dDknQV|-H;6?mK?Hl z8C0)y>Ij%z1Y@+pu@X@aj!l)uslh@cwM&fzl}3+Pz?mNtQckDk zwKOB-kYAlONbi=r2Hjlyruq8y52F5GAC^AV5s#T}W$6b_8+oxy%6Pg5yAg(g6~}Jt zgy2Z!J=YHb93?{N;E?6OczL?8$7=sb#!1tvUmoPYFXQhrS7sO0mFf%X zu=G$#H%M?zyZHJF-4u1CJL-cuGS2V2E%!cY4oj;peB{M$jeW&b)iWWvl*Lrc6~xjU z8JRp;iVpB~CvShkLPO?KnB3RT2^Cojim#~|u>}bg#hOHhl?gaqtLIm<4 zm{_$iPl~%iIyZYfKPR@KofAUM5d=H3obAd}wmj;Ecznf+(OYk0` z5e}Y;W?ouck^^^=tM-9%0%UNY9}7wcpa-n*_N$m(dedFB1wW3gE~qOZis3*`GxI(o z7_?k~CUtbMA1K}y?H6y}e@$(E)&BDGa?9l8zCqB0MVy$-w1oYBiXYg158N8YoOMG5 zKHK>^ha`$z8pog#S0j;`ek%6ldvFg9eape~(@&*Eg5jJVET-ESYb6dy5_L z@v%*p7C-$dB70@79Zcw=Nw2au)x&tM29x1~Ch#cuS}p3t_3L%^nEdW#DM!ACKF>YXeq(WYk8({XlW< zVDpI|ey^{Blio0l4W&EOV|%a^*t=yeN9sbdUhCoZqEDX)9ttwI^dMy0ZZs-!=_^?; zpL*NNj?%**ayq(EFgKYAx7(yUKq$g~TU0EMH}fY$34%_)pKb-*0#9G>Js&<91V#Y> zN4^cGx(gA2pT?r4^SdN{io$tLNo-_okfNt8V4QU0R+$f~Z8t#EZzvFPv+ZD63%D!N zdsgDm-$&U)w?N0G(+>Nseb|b#+9?g6RL~d?;XsSyN{v(pd=MGeOxr+GmPJ?Qp@Nzx>FD^tp5=@HV21G)~anmpQQ%oAVrI;AGXRhOZW2-EgNFY>afp% z->Kj0D^6EZv4neu{?vntJ>fZG%(iRf-8{^QD>7awAQGvY5%TclfDXSQFs8y^ z%E20RIGAf;uB?ec|J35xSLnyRPJChWG3i6){^!BT!jQ8Uc@Da7^g;V52EBbr*bxfj ziEN#%91Ox$yOS-KZ(oj{$T>4uuYuGv0dk&TuX`=!1wy#P7BjV*Kp8N0{izpXa@QCD z=d~>{h-80d=VE8+fdu)u*xz-~;x%Tx>7j9)u9NmN;DH|U(U6w2%xzB~O<>hd@c@9v zNM>S&64-kcYT;&-uHX)xS)b_&tx)NKPkp!Jwkms`njpM-M{4H?Zzacg< zhAb{)nUv{dq3~w_`UC^jiM}#8sf6$@^y+_%H)roaRmc%wD z%N{VJWy4c=Of;T;?CT`U9B9`%=((DRYo9jl7(3y$BG5v&CAdbYS2^A zIluivnS_7;f(S{dTtvyKUrtmsNCQ_mVO$lm2JcY$%`1jvPdlKJK>DT;69J|Lntog| zlbrJ4n_yQ3*ck+q;h%s)c~k+?U^E}DgPokB)nm{{2>96Ta?AwQ?M*P4&I0M=feVZM zwpYIWqSqGGEj5shmeFdN-HzQj?C`YCcFI*Xwy{Zueo^nY@}PcrWH|UZQulW-^Rue* z6p*7iAV-&g9MxQU zd{h#mS1k{;YBDldNWe0m%5TwtgR*@U4Z=zXWpNC`j3xvtotA!}u)A^FN`1kgD1Evf4{C}rF0P88Tz3nMv01^K zz04ah?9}l_{mY1?i}&juxq1Vwc&NJ)q_6?(BT|Vyz;yOHGV+@Cckd1 zFsBu6`u$EFm_ym;^Rd7L`1cn~C~C8%q+Ps$?bZ-FFgGW|dfDWkEnB7gF z>pj>3>%xCFv4C8_c;`atlOCA*|Ox z)o4U=-Z(J$mNgKsHq~}ntL-Teiob7{frTOfsp|nO%7MN2mHu-(cs)!YQg^E!mY zomv1B`XqY{bVLqj48_F%?EeEz25;o}A~)ZSTO$Zg#xnC%_EnJ^dn|*Vfwy_=SqnX1 z0V}wR|9<4hFB2@PA;9Ec&y_EQ%=J>hgnZF0U^^~Q09RB*JK4w?6Rxx`T^3iTG@^c4 z*k=h;qK%WyT-Rmn6nGs^EWbL4agD6*1f47c+1p3mtug|$nO|Q^8+_YM0MmQL6tp^E zz$onqqg-J13a&JWimp67rw`s6!!8vbYLlejFH_+k!~h3mG3# zO%@Uzl!<(JDBCa&j7-9;;6TuGMJg=+b`cmx$n)7M9d1&Bc5D`uj!R9I)_2eauls>J zrnkF+=EhSf<8N1CAY3Ho=g^x$QA$cZ<1l2yTUZ&5^jA?)v1IUXGB60aozTfUz*pYx zW5IN3)K3JgSyP83xC7Qa09f;!eS^Zh6>ewaK#(QW`GePWU9ilr%1(?6OpqRH`pchxwFg?G2z2+OH($tlIcOQ}Pc!n@ z?e>A_e5cQ_Lj_{J{&#S^>H5BN(B4E740xXl{DPv!WuWWYmjrarZ3jZ5{w0_PO zpRTS*Pl?}>3iN(sgHUfEsd^Gh|G6G9RrSE{b>MH%u3a$0+{GXr?Nouz1q}A%mql}U zQF1Em)SMLa;30#U-de#_xVJ&VBnFb(2Mpp>ke*!J2QaUfgn0oHu;(HX!QutW1p8ND z_zmr#i*fq=_c1P@=ojS36A3ZB*d?(Q8;a339fOYCaN*pfmTF1|n5Di3oAF1N=@N{c zwqCR-4t7(ptN|jiAL*4@y2AzG&K=NWD;VzWa&ZFyMcDqBzswJA3b1W4)Ges+dky+3 zc9jBceEScU%5u@wMYkZekV50P}d0@W&1IW-Xls;EIg1B7^=mEgVi!}= z7kzn>5%!_wGKC{lWEe%AsJ61&4@IJ7`E~|G=kc_fce$5hSkY9V-;14i5@%#?Tj##W z;$3a?{@VjqQNbsWR4NU-g2e=Tu_UyzN$$b&MdbPJcj3Q(dYfGV|L@c0;KTlg+p?YU z&T_%>Xuf=+FCxsTZ>DSC2fg2qlgsH>GYhc~u#tpbgHoYhT|AcQzoRHQ^tQ9xyD@;7 zli!xt%?JlM$*^>A3y%8>HfvKWZ#uH9kh8!g1zmz1@>ny1v`zC9HVU;^$%k!&y&GFfVPE(l-R`#Szi_;c+ zWFuhGiyi1ktT2NWUKbx07T$k|^9VCNb{$0*4LKfveCIs}9pGp}XT;4=%aJKE&DP*$ z*8_+2r1o!U3}A92FSG3D1$m}JQi3R;qjM*A5XJV$?82tu_8r!qMuDogU@$rdMPZl( zmv8#C2Y|QZE*DFRs<&0!&QS33QXhNVQ{hoGA&asDldp6J?G$Hw=0M1cA5c}&IoeVv zUbHvianPfcqn+=!IR?DA^+Ucd--bikZg1x+%C*282PQCI<2>6e)0WwhY{{h{Nl}sW zd^A(=nh!E=4i5&iH`}3$M_(#ImO}Y0yvbg+LAr_ACRfg@X|U6+&32{q6HM)cb|0ja z)sddwwwq*U5#fUN{^`BkWvSW(zY1>W{|;=K+RZ~jar4K?=pxdQAJ_N5A$O@`6hOO( zFcS7%VQyzQN8SI%pbrXCKS{wUxQ-4{1lErt9_4eF_^&<@lsrf z8N&vAW+}7|!Va~p!hpjua6XxX;gN2hA(0OzFyn$+D(O;Hl8gTap4L@wcn!UniiZjY zk)S_xq$nMEnbS1tEW6hm;Q(|j=?~l@-!}Z;P-QVqkr}JR1>=O8VVVzdD20gzVFT3hUfv1WR!uB*R<-gOmd?8W~8?3*fb>&j~_i`>B?(J~_K2SoVnBd(lB18E*Tg+ojHPxW}K zk$e3sM_3YZyE}QZgF$X{FX7srp|K-7f@_3=A4Eti-%pfZIlE)Dg|As$roCn zPyPFpD$~-LICGH^&{Y9t`}kx6N)wUi9$tUg?zZ<=m%i~%e4H$}I{sdA%UO3cxx!l~ zNmz_GiV@7Xa$)N?@Ky~t+p-mzE-Ux^U|!i+%R{_bl_C}b+lko2p0+QN%wCZ7MC99;pUO?a+xEW1YAU*^E!!tE!A{&ClYEP6 zsbTK0UyjC`BOo#*^29OAQ9|t+vxg;{5;*?w7Z>?0*8S9)jF3NtkC zf4|JX>FT^k>AEGRN0R7h?nC$RP3FSOICRxNNWSYD>WbonYX>J~{Ml6L z0TK3U;neM;@>ph)XY;`bT`dZDUu20zKcd{Yw)|AVcCUOH0;2kDYCET}TBpBm{VHaE z6*WZgOi4J$rIFH<0dl6@k)|4thJdDWpnANj(E~~ zE#_a3OOk^um5cD}kf=QMo-&E0RX4`qe#(ij7-349AyCV4Ow4!PpF-=)q4J#F>*Gef zYq?b{YXljcXu8I)4PaK$%atCR4##Vp&*^jHEg?WolA8hYT|pv&yd*UvCSElItcV0_ zeBa>a=B(n_#gmxe@o=!FT$p+zRXqP?)h$6o(MeSdwtQFX>GmW3KKN8QCp2Gn8LicR za&Xa^yCTvxpey7tpqMalL9zXitl&Y@QDke1p>517-4dZgDN^8V_424t7=GY6*5G;F4;syF-~^ zEeD+%dwsfMV*VE+UEisci4i&!;CQPu9l~97H1_vSwiMK`Gxs{Qt-1Q)W%gA0c7Z2f zuJ&=P5O*leFUXuFDN4&}o;M8N&uP=O(4N*oXpv=P^c-|gnr1Gn#U`BK&N@P!5^ogC z(6RF~hdvxz^L&Bwq*mddVKYLB!*@IMU7evH+n_U?$uu&byGCd|}1xZ1kTi^=bQhpYa~7l?iH6z<`25QF(PG8fNKj4RpbD)eeQ9 zdPw5-lU~&q4TPmAr;^|d5x8^zku@+7g3w@5m<2!cJSm|Nbt$&_EEufyoH)E#H)mSD z%o|ODrL;iU-&w}S!Knj=^m)#es!ZZ%c=^Mp-9_bP?*6Uy*)Pp=N0rzLq+8QeC$O3b zMh<@=)oc!&c|1ZF4#Fij9Qu93#~O$?PU^m7J$G8TtDi&*-NslpqXiSEbr_@}vep_X z!{@LzgR~s2EHixB8aNx@-K6g}xW&C&(zMLJ-wb@|LY9#eZ+O*1t`07aJu(}+yGA_N z_{wRcuIY?K6rL2JD@8j#hGi2SHmLPBiLb+a%y$2WBM8g%Dk(Ko9tkq$$9h_maoPA_ zno5cnNrvMjpkiHz78IOD!S1B!FKS43NR4Z8(d`Ok0%LF5(<)>pJ|%y@dQ^Pqooz>< zNVf}JWi_ApNJ7tAhZlXVCLIs#j!w(J{^@WxYb)=`p5P6}+7u{Off)zFo9q7YN;$J)(>q^Q1Q(qy!i2=-sA_Q)3^jb8eK3^wu=$y|3cWBh zCAa2Ppx)oX;e53let*=z;H}EE{oQSx?!r5egcY7{q#7&#-YcrTC)4)EY&)=8e3m9X zDtBXhonbwm`ixi%uM*S4$}59$3;`qHQIZPhcVB$K(x>gq1rE6{$~&pjxMGifBrWKP zd%jFdU8tkUFX6kLaw{(hI#h#74b~1_L+V~1b*`Bd(`gnrkvbDEvr zfIBsZ9A>vF&F{*i`g)B|q{V4GUTH};IT&N~tiGZS1EIkP{qUM`6TWQag-|2xJs3E) zF3Whgprr89TK!@donbflu?6lf6mhM}*UB4;4Y`##?6~M^u`GN$6RF)GO&H*=TPIcN z!$7;z;XRI|R(Eh76t7C}jPF7n9^~TorGmTNOyWiG(sHyX^j+rZR(Ymg*Z{YxY40%j zIc^|mG$>Bl=GaMWM;q52HaD@*zOeE0+2YEy(>9OtaTcc-2to0&L&OhgB3Qa6#xc}nBq6^WI7*SW{3u59PRx2~A283UGVAPs-AKxR%T<1!N> zbcP#v(n5?YXdY?|66wFutK@K|%%8*~ip$(#7W#rxO-}~}r?cvXKjO1-GAICVO*S)BgxCFo$4#b|;Voz?x4$T<_ zLSyi|h-|XfX(7ZF4q(UT5E0MP+N~Lt=ym<1iW^4H5UF!yW_jn4$IZf0T0hT0&(50{ z2dc@`CmI~nN@036fV=DiDAkWAR(USzX5N@DQ|mBIN+R(s%h;`b*(8%V9S)aG9FHKb zbd3huQ9q(bQbFz5@3J%@SKflV8aF&+&WF5zxF28yzTnP4hYkH5R`%3I$L7JzIk8=` zhQYN~ULv9oJMD-_R%M2bT?g-(Ket*7LrxY}CWVNV3g#Go($#&0j*E{N4 z9ZraNV~KPrJkp*=EnM#G8)?DD=9&7$<`;pOHwDpxb&3K*>)v!R$BMjnn}rG_P)w<( ziAM-_dh+5`3{x1x+hWQ)C%t;4jt!t`+Y>~pKYVrLYH$8!6vyE_*gt8zHG>50b!@{p z`b^GwdV=9|4-jeW4;Gdt!oN(ndEb9LG(AnlqG6X@6$$#QL+#c#3JssrGww8X&){^k z&;anv()*M7{NpVT9^Whifi-)Gz`tVE;A%O-3A9bgL*NpoH#dMY)oKm?H@W@Yew=T*EmDX0o@57 z8}DcfE>^#4l-<809tcv8Adav_OI>uXbs1BzkOa_=otR?jdiB4ai_t0n&TId}w{nYp z&`)SyYDsKCu5BGp#Kz1BQD^XY?6f!m1&~b&yQIck6rD^GgVOU@> z!VAkzO3QWo5>mg5z{bo&Gi+x`+4e!x*#=)Ln!ND1pMIu;7OZHzfE&Q)0weJQ6(hqZ)ekX4>TV`e#WY^rUb(NZ%*7o*`Pp z^G4v%1~Yta&wUu{ObkCi;*~WIuMC-b0p(g5Ya2rr)2E&wF|)UI87iqPeGq6-_?wbY z6l5%oc3FR>J_M;UQ-^?Y2Jf8aqrK_DV2qmI(YDC+Q=^bE#}m>cjk zYXE?t7{~-j<@X2to*4r2 zWk(S?SZ~C5_OhpSHx6&WZGo)p+r_dl=#3pVawY2;Ly*}p&0Ort+S|Ij*1oIs%TK*V z(ymf&HdRDed+zrF0XeWvQi^#L%h)SOTaMIW3Fcw}=Q_mokTVy(Y9Z-`xfclXRf6k@ z^lLOEWHK99;*Rt;D)EI zu~DlJ##UYha2}P@yqV$;yVO&_f6~#Gj-;d(V^bJ3M1+wFvPKV$u2d2AOqwXC@M%41mrDZCx6rHhdRhboKC>2XLyZicEm+qmq|m~)!pCWV7p{|HDdGvJ^UizN zEsDm zKS--$Zne0teQjs3=5XCJv2qiU>FyF|2(mcsZ1|(ui7}R|`#m?n-MPx{)3~F=b=D2a zRgaK=0+|ovic!s3k}nHK#ss%AgNkz3kuUsA>Qg#ADo=5x9*Dt}$aMqqNW2NWEwq2a zE#E-^l2eFw0!1}Y!Um+=jEnnIsNY!LSKvH0cST&$6|R!tg^R*daXy%X?dS=-rP|-)D*c2c+7;$O_~z;S`YY zde~UAo${;8Ju8x-Of1&EEkKQENSV7r+*J#FG6PHw6v`w80miyE1d6VXEnHz{y-2V{F=x$C4^tWIwz1lud^YXezSOtv`PATuLiVHpY}H=P)x8DG3f_4=7uj#2?s zW0I(ojoopGij9tZT-H2ft*71W<;fIASpTeAr^r zS5FLL(bCod7HE{s%$3g4lHeElok zWg8|)A3|otx_r>elzS)$F(x8c4B;qf?~H9CNiim|n+@YMr1~&W;yz>Yw*PCEN1XWo dq5qLhHrIwsex~>2GtI=Vu(6ZJoDR}#`ft8oY4-pC literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-curve_break.png b/docs/mechanical-verification/cp5-curve_break.png new file mode 100644 index 0000000000000000000000000000000000000000..9b002f09eb7d43f3b3621743a908848041918165 GIT binary patch literal 41921 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 Y{P?|oW%i~Na(r&dtI1{GF#hv@0d`DuHUIzs literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-curve_extend.png b/docs/mechanical-verification/cp5-curve_extend.png new file mode 100644 index 0000000000000000000000000000000000000000..5af7717cf1842fc8d21575dab0489fb243b31299 GIT binary patch literal 30459 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-curve_split.png b/docs/mechanical-verification/cp5-curve_split.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7024369d1fa2524f41def6653ef903447b4371 GIT binary patch literal 30961 zcmeFaiCa_G+BUvH6s-!j`iTk%Rtu#LP?cE-c2JP1f{GS|SQIKVGEYgAs$W$=MMa5_ z_AsP?LX<*~G1h}t5va^#7!)wf0wG~Y@_W|W*x|hA`mWy}@Sf{BZO_%^&faT1>v`_y zzVEfpkKfqsU-`j?4+w%-X=VA913@f?e_Zs#(k1XW>HoRA2>zyY>Zp~6tu65x{PR-y zFZxfNV<|vd%LB}q?q0~pMK{yMNh-SLjWE-mkhuRIQXHrHW4P_HZdSqc59-mT&^bMz0yc>hvD4*pKPvh08V z{=f6^zj5&Ydmr3PGv_fI1i`d-F~^(z1zXT=(%ay!LP$g28qW83DakQKlv9k~EYQDr z`fA-0#)zzNFZEz>eon{DGfsE>xQV0vo`;Wny1QSE6UN>1_esyrX31POX`(;y+T)%) zPwUOx%u~13{f&oj-CAowmF{ODo^ zrL`=|$t0`JZRAu~>+=WhV*{OO`}66t^3w2`ok2m9$6UU(W54b1e!OUet4cTfXa)L{ zucW5eny-eN~3x^p7t;4 zwhz7eb!1teOYykX4!7dliQ1F{2j}a%`p+(cH|=WXuPcr0JCjOb)m~1zY#bd-S0xNs z%W*zir_y;)qdR14)x+b9&Wv_w&xl{w%hpK$&({yV!-5X$b=ny!DyjY6SCur$f9IZ+ z6L+IJ3VqAEUG8CvIFBAT`z$gK>JK&-cgM2KZ9Kak2TxZd7ISYzh8Rapk5h(r>YlfNYDqznJoIX%8W{uxouOkgTHyoqKkEA(R*S$=O&_0e7-d& z$JgSh(^DGCz3V6tHA+ij8w789loKQ7!?g|{FPL#FYqFLM&h$_IOA?q9rPN=N@tJP+ z&Px8GtZc7;Yb(N^V>J5@%kv5f;?nD@MO`s04chIOPiJRqH&K%VINTe;0sG0p=V=`= zQ`?raDOI_7(ij82%qYcdZeL6^{Ba`u{v~B|levoc*;RR8vhR<3&&rC8!@H@GTen6O zaIW5T)y*mMcxgB?k&u;@HUF9}8=I+>iDWlrv$FYtVUy60=lrA>-z3&Lgj6+b&2z}} zm4+M2;}2TozM5zf>M5wL$PT{z-K4;yr}2x86xv;Z*$1`itI5Sm6U&s6*r`>Nt zoiE=}=Iyj=*%pb_8l>V&qHk7K7j+_Yg~Y9Gg5d{|h1O_*&r@JES`ZglGCfb42b zk7#H3c-O;sGAS!-Bi(StB3$`YH{=kUWn$Wf#eTatQCEKeLB93W!Cy5D+iA^)1`o^2 zuf^?c+_7?fwqsIMU4-b#jphogz}KPepBRas$!^5S-mx62%?>oprp-E|*JN~^g01_M za-K0FqE)g!pKs60rq5RVoG-E{)=06QX_Z~??PWPsB>Vd>^6Qw>%~I*V{`jdk#Skq? z=`#0vIdOAxTRF=_j;^C{&yfDd_>78fvJ&t7Kvw2hMrzcJ(RYbD+J0>D_;7zoL62oX z{-+A)j}{g^SV7Qtu8<$9n3?aSMEL4A&LiOUS)wS|4 zo_9pQNv_-b;9-c~+18Uw>P2l-PU+OCOI2=LN<>=KCH)3eeeoQ9J9>C{l>(!piMmJz{ElVB$WSofc<1mEm*a)o z*TLf$*H#nK4;wXwFTNXOQ&!B$UH-W5CR1lebn0+h%I>kLMd)kvzL4iN|14097Vc?G zQ_M=0!fLzwQmCSa4Az&wg*tO+7BGt7@09Bv`ju}lnK+i6RpM(;6{Q8~_;(x-wfvY~ zk$lfU!thQr{{)RR{lCO`h_~O&{oM3q=EfywCA3S+SsA6XhfU_XPS45LyS-9Iu#V@v ziHLSge$~}?zF}7vJ2IM*ay+X2lTDS6>=XSyA6E1!TAO(hh8?{VbF?VAO zbGG$R@qUUWniY){|0ua3cqfMN7kh*$dFwtR%C~z<4o%wcyj{xNR>L+5IbHPWo40c# zzXv40>egC{7M#&+Nr(*!B#f#o4|W@km#N4p5`PV=mzf_%ALKg>7V!HAVh^&`ps}BC zBGk@5))dxN9ZINZkKUM`KW6b_s4Lwl$}GjsA#You>iKrwDi}#f3Ayf1VeyvN;>8mg zb&BjV?iQ8JDEHYsEH@ZdbQwyRy@5vhxXbendf%eoyPuiNveJ*x7Ea`>@yshQlrOm$ z|A|CnPEK)F4t=?JM1kS__2HGK1k27tFCWn_787&MkVrlIU1ZgawhY%i4LzN zs#z)n7bOgs%b;<~7pmMkvzUys?Je<(^YR3W=)1d}J|z4O+bVYd=92xqB+G4&mFP)6 ztf60&Jo8%5y&Wr6&ZD>E>8>LDPE~KOpy@Vtygotc9z1i&-Y>m$I%(R2Iw>jK9KiW} zFcF0g=j&wzH`eQFWZ&UIZDmKZV%CjQFLLNsfj#-v{$sNbG&p%0XlfYruZg0R-4aIi z(ebo7GQ?h^oftLIo3N?pZ|k>q6VVahGzagdI=yJe%S@vP^S*!I5AKq1)Ysej>$DzK z73!dgX^~f8v>&clE-Jq3HT_C&smmC%rzW}dO*qyyWXoViQPEM}7sO6}=1(ey0`Gp3Dxi0=9o4leT_SN2iZ`JVJBRgT}RT+ZW#kX6+p)I4MN4pypUd6avz zJd7j zr^?dnZ6ju?)+Ci%hK|@pGRK;Z2yuS6vP`bqPQS%c;$`0W8uG&)n}P0EHw^tUq5zw0 zI-9$sT=)M{chc*r};ttKDTOR;*p46w7c5tW?SY z;gik=X4j6InBR_dfcAY;kZ1;Cl-5az~Q`l|z5iwz(y?5}YQxN&geA}q*yyq!}*>PzJsYrhu>P% zU{bAD6BFF~BFBpG#6d!%@bcJ*Gak9pOTuQ#Cu^f@MPK|4l0ZYVxK0^neNj8TT!T-}CCH7VRjr(VvXTex_X4nosE~$aB2Q zv}D)Y9$D*X*nTd@YvGgf;6;56nj9;Vy_0@u$gdY{ocpvdu3eBSPFGj-o0DrkvOnek zdI8!N;th8pL(s2#P1r^4;ur;e(kFBlKrPz6`7un?(^)ctIIouxGm`A=vUklsALM3^ z7Q~$G%g}Xnnf(|5OIuh-MRU9|DzADQ6yZ^l}9NoD^V;NYFkXrTvpXhEi!OJdnVjlfl=y;>(JoL zOGroD8@xhW!tN+S%LC;$OD~zFSfd6!j66D zZU6A$jmVh8%O1(y}iC;Vkj>?IqHVjgx?@dxAJ_ggX^O^ zHD{k>G5vVewPYPEHJ7*GmuG4OL~If!Ud)0@Q>RWDHyBCG?~u3H=YO9SDLuU; zG3>h2q>kNjwIyfwQ@-DSq5jGee{wg9%@i0uD{WD-jatnSDEjyjYgJ@7dMA=l#Q81H zWuDp;yO1(C_m>i_-$J}+Btgos7m7=Qr#C{@7+S-!Nv{`Vx*oHEfB7vrrFol(lipq? zgi0zqxjZRy^kDHb`$G4}l@~qR1G@_~ILk1k5PvOiQJCv7^Q_G)dqz7;Yb@RMTg$+H zFI4HG#Nl;gpX6-yJ&MbAg)Q-WlhdErC#)T?&-|%N)_-B244e?U-9927#;h=K&@HzV ziubmE*kT-Dgpzr!%jqv47it8=*phGP_95|5vil#PhXQ+{WQ?_OS{`u4kmMliBbZ34 z^(x|_nZAS}am{}8>KU1PpR5~4EqL`5GdYm6!QODna>Riinm`nf0pVTGyS<SUp=>^^s9hDv6s@a-_x z1}YMS7sSz>vAWhUy*{D8!`-q}J8d#i_)^hRIdRK~)>eZi2i=z|xrzEr<@LVC8&lp{{#M0`Cgo4IHwVn>Pe5|N{gQY zV>~f?LnvXM@{&5}I(IN)CTC5O^u{osd2gH2oZMCk1BUUYHxWP3PjjwC20~F9bErl| zsRtFMxpz0G3#nxj+3M;|xH$MI%3Fw?QQd3>NRKlA=ta*9d%L5^x^&_47w|ly5Mp8e zdjBmq1gYP_>K(TW9NmYo%s}_G={Z5(uiPc*{R%&ZaU00cf|?XV(Wx>}*tR3OaAxGV z6~L_FAzWJv)nM3K*v*h0_CtD*Y)X0Z3|FK#mFaEK+=mVEN?hi7{6qqVZXA*{=%%iG zc232^@$MeV3V958U=uLOdbC-K_@OIDpa`#}KljT@`TSS*fjyHqocuEL$5I+{te@z8 zgZC0(c?)qGELz|BL%WpQUv<}{mg(ft6MGYXd>>zj^-1hzdX-q^niMB&(DiIz#Ys)E z6LqczENCbC_ag`~NMFrl$@aeqO*e`$#&sw{SCF@*tnUO4u<^A^ zi5}bUXXT=-vr=sV0W`-iQ%REE?VVuNx8_$s88MVFm@HI>O0DEA!V{rszpU#}9i24z zE*7YPdj67aH7?fd#D=YxNA~p?=%I}qz6hehz~^3u>uqcO7+vAyo!~CY%`?5z{S^!i zWtAW9ZCe>@0pl3WHpEhYYZCO#2WCGv9T}H-_j8%2&kFw8HXRvwc3$7Xfg!7X7;w2C}2(Pu98FMplu-&<1ec8&s87aoub5 zAcEg>Worh^Z6iiJOca$eT#x(BEn+&y!p9I5=ZRH?*FC1fW-zL@r8A*hn;3L+xGVFS z>}q=0xz;65NG?uAG7SCKXx0(2RhxXmf*IGL5ELj z{~Cr)?QBHJ%*@iWRti&Y73lYIikX>W%X72IKC0yl1qP?n=N=oC_NlVJV;`gT zY578EA9Kk5k@NLZ;)JOe*&Y2S_A&ks>~rNdOh7))7t9xsFH~3DLP1xjA{cIEMxL5H z9;CX^B$+}SKYjeZ5C2vDEVSY6?TpIS9H#CN8FZmP?P zg4E)v*B@Q03=KYt_xBZTInCiULlWpX-lSCL1qpC10!%pfi~9N+FIWqMK}UJ`&AdCr zs!){A=unM2lm1_Vm;Z#em9=F7er%v9wFmNwx0=>8?K)bt?y$)kBHw zE2u~}5()bAJ~&n9JpVxBkE43{qhL3DSxS^P&IE?%j?;8B_}&<4O$J+Rj#N;$n$YJ16EtFCoEZJ9iP@FsFLO;-`} zvckAbjq!+VK~&bj#thht&=5ODhi9rQN{ulIP`F!8bDXPRMQJ+HPU8W>9?Uqu#xu7N z_23Dz7UiOyE^E+C`arho9?Qu-q1c`Od`0G%R)~YEH0Y8w-7a*@D)KVqmIHWceDq;l zv#L+JYxJwoMMoC8@FD2Jg9^&FAI;mQHAH3%>hcc>`HJHRT^lqubT&-d*Ga}--&oD9 zkC9DrQ~>+AjFCKn1$^>YBeaoGS^XQ?$))Y_OAVRls&G+y)sR#5B%b&9DcJ*sfCWu?c~)?%Hs-`^vyST`J+ZXZY=P)0MnsQTeCEZE{&i-vG}E1T`4f70 zkzG|`kwXD8mSr5ucLZ2l=>A(}rLKdEbZ1K0oTGnv&Rp3vQWU!rRul4RpRY@IjlAR4 zKUX~fkXqd)Lc#=EhMhlC?0U?{@B{AIO)zx41YYn}+fnN>y(F(eKa?NJ!*&89WL6lZ zST!}nba^iz*23*_ntGA%aSwowi7%kBZ&N+n`Q?~aPFc05G1-eVx(*Oaebf&(#!H** zwRhc?79yhOFa+5F2(lx$97qC((e(ukGmDLDfE{HL9DIvZOHPwhppQFp9AZqM z=PMtn>g3TVAfpnU=SpGQS;T)86?Qtu57K_P&|H z8$t9Wy$iNFNl5XOvZL$haN)dDM!Vey+CMJTP};v5&ukpL8A0 zQNvqc*gWRx)&n6`W*Inp<^|f+6RxH^JIqONZOR~4t+NklwQ@;9n$HHVr==>Fxk`<5MwDP z+_$6t5>gneHhoSiK&T>I_PXcX)l3b}4B|W8VWx-GAi#jCn}jWGH+Zvh4a>zIF~Le@ zbMBPx13UjfyPhY8oM>vV|NRrpSVPawW=_0t(%B)^X)Vwe_?A069IYAX_$? zikzlJ+M~W^H!FS7_v;j7Iu2y5}$OqqgG%KL^6Spz#E5 zlAM2l$8y_%S{%gX$WsHCqaT6wF=F0>O4Fin7G9FG7(FuKKU(m2?{3~`_RokCxAd2| zJ}j=gfO<{61M(IO%D=KNs51b=-Y#xl65H3eK=?#C=52#Mf^3tnKyL01S%+%UHGtWL zn>j(<0YE>3sIhV}Qca#xjzbR{A0AGKo|4&TEj!1*JhJTUHhoci;}3VTc}>c_|Y3pGq@IL4CLm#RCeT)W@9~ywOcsWc1YAdDr`T8G4A*hm>2#np%l2w ziJJcAN5K@6B+T^C8{$`Z7C>DiIpKA?U{<(UWUv{g0M%nE?{ZhRt*?){DD8OPhx<6fxck&U`*6haxc$!%t4JYMQFEZ{z#*0aT@s)8vk^DF`p-t3 zstQ2CN1trOH`2K?dtmoY%o-x8$8$14Yw63jK|RzbF)9GVaSrB>rXIp(rB7!`9PCDl0u)mqX%IeUrPv2@k^)ZYb z_ea01cvyd!h&I98upRJqh3aQp^9=>t|Lnr&gW#h_PNFWnd}PTz%nV=aDeSIyYHL3? za&&w)8E;vd7NO7*4=h2&U0eMSL*Zp@0WDk$M;A2VG~VvZUo_!$(S&j3kOQ#p0L^;) zhdsR=aW|Y~b^I0goSZJGpN);f-2~%9z?VK@NZ870u&4h{oo%mnYpp{4aMAcNhfy#8 zMNQs07z~Df3LjkrGmfCOn3l~>6sVb}p6LxOX7BJR_x|EH)~wtR`B1JUu~g3w_ej=A zlljdB1SSng6QSQ3ebfQT>K@4{mVN@C9oXO_=X%^q-_&e{eDfTV)FuY2k;EMtk~N}? zp*6z&#Or$ypstpZHvp}>GV`O{UU<8)#c%f2jcAos8mQSEj>9}o=_Yt)3f0{VWmMp> zaX+q%YvzwZBSrz8pyJ@-y6#If@FbQfS7eTAU7my$+%v4WXF{3)g4PpFw6z{=f|)!G zGs$-Vx(ChV=RLi>DmpvpcOXrT6m}O26g%eCVB`qkD30UGC0R+XnaMM>$(h{aN)E0v z6Ch^M4u@{UV?c0PyK;$5dH8oNTOBCvphCtA`#VW&cSs~tMbv0!6uz2DAfGzMcJ5! zXQ=Oo2_MRTkcy}Zfxly|9Xo3HE9i^r&E8p=D!IsZlV8()A3b#T{{76zcj@ZObCZDb zS&$xRy2p;6es+P$K~ZK1vBP6x72Lxy0CskkqRtM9F;=;v+~#uqZk<1b_aJ|ZoF?Jl z^cUzE;Qc&pKm~evu6T4i5>U^htWz2)Z$a?mGZzJ%$X$>fBni-)eK+Y{qL~hqcscZA zU&s1`c5PG5ggYe4Fj z+11Dpoe;n|OE6C6-P%kjQ0E|j;sjw14gtY%Cu^b&s?eiUJ2r4Ep95m@#(R*0z6LS* zP|=arF#TV(2AFJ)E$+J=t0`FguKVKBE++@qikqW7?p75^_i}$du?hBy9n=kKR8IEv zQ#Xmv&R9Vdvn$WhRl2jXPxm?q;QfDcJHs{*I8UGaliOLaSfH*bBQyFbB~sM+9@){sZQ$13rX! z>a-AH$`Ffw*Ct+6uTe3#2MIMf3qb7)?u^M8Xm8g<6=e(lOFW+8%stDH`9&!MzV zgvLX^om30_c8DjdZtw(|=q=5pMD(lm7ng!qg~!i=!vj*oP8481 z{^-XG5slbtpm2``ka{W>H5+sPDK}JHCRPy}{)@jt@%iAHx+_Zz_iDlq8$ir3STKP( z$Y9|B0TxAEzU-D>G=It@O2i)Bp5Z#=OEV{vEKOfdlbE;u8_KZ+u#KHU(~%}A>3?_seYPSq|!vYjYF)J|+gaa{d4Os$7_5Z0jxLeUr zwJ00m-QZ&@Z$XIlv%Om6#KAjbv!X`!1D0-&=YilbwHDIBO;oI?-VixF|Ib@2%Zw<) zig&@p6T2U;j$rGE?_;nBkYX0+6zr{T(f1&?^}{mSN_wq|HBxQCtJ1!@<;n^+cQ+=L z^u9wsT80wDf|S+Rw}#aL1|D4i(&-Xf`}-QiPzPq4pdW%5oA?Z5$@Mn$l9>|kJBSW; z5pUB8lR*D~Rq!j&W)QAPnAbU!FvgCY{nF%O0vpw!=a(rLexL{!HQ_DIiAC=i;{0dV zoizG<5^1b+n4W7_E_y(ch^FX?{2x%?{R#BlP^E-4U@h5z;~~yKaocd=EDmu)^p5@x z$Yk-y^r9mGU-CWu0q1b5zNi}kvD0J* z8!idMSUT6wd=cJ;{%AMcPtQi`H#Uo*GDNm(z_k9=de3{wTM#Xmz{cZN&5oScY(&lX zo@CVO*t?)}@FxP}f@)fAh&9iu25VJ$H+XC9tOM+r`s8*{Un2;B!mo3%tC7d#f- z`Y1u!9U?szCzk-h!zBqG8hHH@?`_L)b;AUYJ9OQIX)7Xl1~628bHe0eJXVYa*37Z& z=?l~aM^B+HEX^OGvPNCci|&tgJrGL7uCmab$A%#7EJzI%u`t!^y!>W_PGIKT0CqoD zZ1;mC0X|2=P7wVNdSZ-x4L>{|1S>rOJsUvPDPNP4>GaabU10b#lvVv~8F@Ji7$6JO zcXQMsM=|K_q`?9d)M`7ZNfN{jnnjqmwnU5S7s#EKhcHDvUBJo%EDya1?FiwX%B;&z zG{@g6{!MG(9EJ#IQ~-?%3aZe@r14GX^b#tFez+wnk3}ufv9&wbk-4G*_BKH)`-|O? z?no(9#BGuGYG8Lj0#Ag@g7sx*5bMCEhxFyYxlBin2E6NO1@V4F(dV26)Q>mlEywD~ z-dnZ>Y*`J~%OPFZ0>vDxtYJS}b}}Sm<#GtfSFn%--R5wCp>)tQalK8KZ|viVi6osJ zG1s6Z{R%~OL=4^h_%!;WW_M`55tFFg7S97e3%1Jid#Qc^lsYLlbZ-Yvl*n^hkQ>TC zZkUkehp|Tv-WY0Q0P1Gw|x!K$`TILD(=DhqTS_^`lf&ro*d zd7~c;-3J-2@J8fx(jj||jLDj7H^S(afqj$d&R1st^k|5;qBX7A;8*yX*Z9&t%grVu zYVh@|qvP66?XJ9Hk%-2NWFuE<)O84v7WE~PLzioJ-i^L`Z(C+jz~;V|vS9m^)8GMe zR$Y7+Ql_d+SR#?+}3Vl9vh)l?Y|^ z=m`gN4%yTBw2kbbsWNy=o4^@A1e)AVFUS?+8YoUWa{x4byUusH>up<6+N91itwQ?Q zM>l+w_DLAAQafa?2}L-JQv$#oD$rUF5OVCx3PHY4nchbgNtCb0{b|yWqQt;4JkIs(`#quU5i+};7e5mqm8|2IOE_d@vHNpCymM)Um<1Ms9OPMo8Jhq zSL9GlQ5Qm2#xB~KIx#I0l!l#|8z>kN4UOF23nPEQBb`>Zqk@}ws6OHPL!U2sy=^M( zT@{H_(Dz^_SqU|z96F#>>q%&xGa{wlCfepUD7I!Gwj_Qr1q&(#PY%uYG^-lGxh_nY zb&yVtoBHCj8h3s7Ux5D91NH1`guDeorF+fF88$goS6?~DtEOEVa?6B(Hrb!R<{wo* zkHJ#Q0D3zq7|C+C$IZ%lZp;W0TfQivWQu*Z3D%||-%-Hfkty(`cE_R3r1+%CW6&uG zfhAk^+~Y?#UauCUmeftlHvz$xiLmLkx|}8vzyYhm_8Jc(q2{reJH5TtH^Rm;q9)Qp zPZq@_Yr_0ZFGHio;d9Fx59w+-+M4-1`{A;x8@p&G1aKnw00Aro%mood%Mg0Q$NFlS zt`T>%C<)g1k|3owKb+Z#YoRc9neUY+f`99(ApH>mf>-^C{o4#2#*WF=aQwR zkv=MNaGBZDmof(D79M|ramxO==|#vO=9P`Qh4h@y z5`~Sgny3i*4Sy_eK`W5pJEWUgXBMH=*YZ{IKwcbQc%6d6>*?YaCV`gd0)cN+0Pn>bs@spLE@t?OevW~J8#*s6Yu4vZ}hn$ z50Dp$voN$C;tX6v^~#PAXi>9?WT4&kkv5S6#rQ2K$%HEx1Pbcr#@_rxiK2D@OBv2O zV|;7Tn~PSvKI#Zo@beu-v1>%2XZjyF9A`qf*_<*Ga@1wp{i73mpE?2kdOb2GWcOMZ zlq9;V(TbOzesaHIt1kGY9*ry=E{*zE*~*rV4}2PiwvOz>^j_&Qd6-J>DetSZjV{?) z7r}v0FA>+@a9`bCarL-Orvjs_>zoCAOPm4&e%BEfpl@$OmY6=`=(5o|V&GzMJZnP; zB#i=O3!=pe;gv74?>qy;vekfC zaO1V8t}MWP%}3Km+DYbd9u+c1CpDh})#&Lt!0vO;ZysC~KAQ;1OEsrm=Ee9szs`8puVj1C#;HPz243WrQwj{IZdPQB)w8&)X9Bed!@f=p$7q9F zHPcS36*2{i_fT2YL$$5tav>yNGQ>d7?3sZOg9hw?0Z0^Eu|$C)Y&!dI5$2e;BcmwT zw67%rEYjm#Fqq(CptKFmkgL<-G$o!&;(9xZi`+GRHnQmE)_x;62f ztKi^*G~qR!1SQD0ZSA~Z1epZOulpz=@2{GkJS?HaVxq$)j{jVy6oEJzJIqu-DH2`dG{se{=AiGotPNuT(u zVwGIq3RNlCGRo?~6yL3nz?|9^fH}Hu07a7e>m_fzUc8GEq?#w~W}X9``Tk>6&Cv-L zc;7#EJ2MOc>DYpKgcbRR|Ne7KumnC3p(PpKg?}^~e$@GZ*_?Iuo&CT)Y=PBlJGDvY z(#e=lLJ)Nvin{0d#dxe=(H*q??!XbO+XqBbt$2b;>f#qQFVrH28S3wOzyHMYdUp(f z!F8lY^KFbnbvqM1_icV$R&Wr^g1l4|4c(~pLM;jcTZYE3V9OBZIdsfxrEGrI*3JOW zI!y`6Jp$t0vJFa(dF2Pd2vZ}yTk}ffz?Xbp*=H*7p*NxgfxUuMCp0tTV{rTi%6aC- zbPRNs>pasgr2klY!^c3vAVaJKL|%d+yLU_qWKMye=?C)7NscbXiKrNr(@k36`ck|{ zc7h8&R6|Y^ym9&$K=B^v^qh>*7b5t=^Mn2#{3GlAGF)A4gj0dp zt=a-L3XZb-5M@DMa@J!jD#sK>k2nZgg^Wi46MH9vYhCS(X?Y{dY=TyExCY;X--s8F zLUw!rSu%#;kV$58^wmiB?Ugs*-QZT(50oV$OU4|wWH3??Ea}e6!4P`bDqFDMYR2wG zdsjx$Y~{57U2tw$fdLP7DdSBjO@zn5_RE+#v@5~EOs1cbsFA70vJ}l1q_@$y`opI!zkk#@ACr~nD7~+Uv!s0aWB5}(UPkFp35!IQ! zJBU3QAFPhtOc10O0EL@3o~MzV93YZ~-|cK{crwDesN)x%(%at*)u@T|XB43g)-s8{ ze)ui`>lal3to>Lu4_+gGMqLW>XCP3G{25|LJgoFSc%)}g$<%#`q0hS?*La$%Z(j@dPTTmJHAFl304Hk6=&2nlC_~mucyHZU6w+$)#NjuIieVn?vs?{SiH~%oD+$@|AKq zDvpBGJ&9+cKkl4t-ZvJxHSIyS2cRCF9KvSQF+j|2P?4Zh1pl2%Zo=C0cV~-m&xR|K zQ45|!U#P=Rzs-ImI0RV*fgahd-X^XCa&!2}j8!}q<^SLaiBnOw`n-inZyxp~fuHC(Cr2-T!Q#{g%#5;h(IV+b`F}u=> zW)1_mPIv91HFqqzhic6n&OZ|WqMMO@r?S}zz%Ir*&iZ$F0Amn;yc^YUH{(B*C%yA~ALcGnD9hyX<27B~=2DB3J&2`4K zGYuYIzH|eWMUH+nX9+zCKjT zN}mMRkvoDs5{*qKO12{xDrY}RCOEAE1$pamHX`S#%E zKQQpe&*)ghsnU@TZ0glpz(;>T)|0e^d+WvmTtC4VOU}PZBWPg`!gy`8CR$NBDq%nRmc-#vh>rulHyyUSS zK-${@bi{2q`vYDAdt-wKlI7DGCxgK0Q5UbYh!{rnCoz8vGQ{J3*_B|X5;^8=XBP!W z0ofrH0FLp$e_Tr*s6qt>a6V3l7kch`vYZBC(nY0yW?LrfZ7kLRI2#_;XF_}(YH~7S>DX;(%;n6H77Te0>_~_wRpaL+lJY+ zneTS5E#1u;)ppu{`3pOiYMg@TNW0Qrz&VIjB>bK87l*r>!MU4Hmv*TAy7@8uZk=)H zo{;=4>0PM9D_tvZ0iCT5WRW%pAeC{10jop%KIwdVJHUT1{N#8c+%|jyk38+ngqE>j z6V=QxWmM4vtUCI*y zN|%*)kO~Duh6r4u zGD==D3VxzK0P3pCuzGgFVJqPE4j9vPJMH}?o8M~`EAgaGQ2ZCY5(5t ziz?UqwW$8S2tyeCp}>HiHi?8fYdv6gEXyP@fu|PW^jD-tK^7nCMLd<1UoIexf@F0j zQa~xsr9F^1)9>u=JX>9ey6%8(av;okQom#M9y_S`orxM5YD`PfZw0SP_+ATVB9s*H zOYTQNhvnIFWwCB8+lam$H{D_*fd~vMBS1V+yAZJC(O@TIq~oV@ez&0vI7*V)>GFnX zEyVu#VNZDrh_NvMS&dFv9&{@}^03I6rIYTLwz>mt{5NukVTe~zu@aLzS()?$W|Wjs zK@i~8Iy2ERWX6cuhLY{@R`gJ#?-3`*0=r5Vf5o;Pod+UBuEpBs2Mn6pAM|K#19D1H zP7~7mSBJra>TR$XG?S2<&})y>Us-B6Ht2E86179qCV0@vCnpAPCcz7|4;}v83#oGeO*7+~ z$IN~>F?AxeLAk}*3b;og7@%e-rup&u*ZUzFi$TF(Ixj9~sR->8(gMg{==f5CqghlPUw+%O(Tu2fPp3<~8WvcclDnu1h-;y5bgPbo zmb)e+YBV2p=4LVG>!)Z#ifY5aMl?L2r&C`miW^ z0pP#_p<@u;z6d~I;=kzEt0+%A0#oOnuK2|&p1R!EJdpoa!+CLkBwrBV-|y3ijRSrf zL~Hx9;v2nn_Yv*;?~7o^@VUo5v56S>K(&%#$j)w4r3)`V2g1JaF*V{fbB$re0VQ>- z6Oa)cl+t!GY1h$v~cc=;t8`}}GnAux43Nz@$ zf`*F#4v1IdbsL2fDu~gMd;(-3oVqxj^aBt&_QjRIU}O6FmSL+x3$>*He2H;uv6IU`5fJ$GUQIZ@^5W3M7==T` z#uXe2+Lfjmkk10lj-WgArdftZ_Txr-S`K|pKmZtxyscq#gXCo#y#?9;z-zaHF9VW% z&*qG?(M~1`4bUwFU-BaTOrW*TKvY1-O;9Z12&O&+W~3A)u4*;>PLyTC~}f}r6IPF&c!`bf6ojiGLZ0NNf0 zShe&nWQS0=?n2~x$vUh~um#Wu)S#6s$DPfz{>dLaFyh8cz(E4iSz#y7C?k89@qhbqOvaZKmzcj zC{Uk~FLw!@!ZU09%_iGTBb_fTFPeyWVG0$94;5%>OR$0x7jbNA-^g1KfM4X zCqZ-$tIduFtrB$C<&q?)R&Ze`#sI=WCs)wOENF9+?e!-=ZM^(E*gn+?D_7oWVP!WL z+@}6#QRsBrq8v7}=Ls~gNh%I5MYj-LpmEpMpoz;WKy+$2rYV4}|4Uau_g&IQ)K@5w~FVpcaPhW>j<*OqcMwkbL?w%WA<#5(_a-?GX zQaZQpLTvT_)gyM34}C>K9(IC58L+<%&&Z^v-`eJ5xDZ82wH@5S=mxc0$1i*fLedd;T|V47Eib$9@k$T{jiCP{j0Q zcu(9IIhe)Vt+_@PB~OH^fii=SKxT}9tK>H^!9jd_Q{&W=hDkWO8(u!5xUI(3>)Bb5 zYT^E;ZVNIl_Am6@p139*KM*Jgg_;!A3n$O40atTYF(hz^1;T=bn{H4e>y^0ZG*m(*1DH1@znV&~K}OGhOmAZnz^|D4M*D;5>t@ zBLiNq`IbYi6f?ej7*9Fvct*sc3rslSpg-w22vi|00D1}W^G1Bl zMVSVN4~1jgAAf>)Y{5cN%DPu-6Zp>K#RH9cvyeCi7hkZ$o1$wj<}|jb zmWBEh9n+HM)!+ymZ~l|bq4?6jVVBPMUQ(r71D0-bBJmDBmxTcTu8sp`rMCwKwOJml z^q~1S-#d@9xp2k?$QFDbPWK3|!sD|@{s;nsHL14VEXue~3<5IZbJ$!H5Epo=lEtPf~LX;;~EdHgNszUbum2P1OX^2fP=mEZJ=uPY}Of*-tNtR@ZO|z7%@{V z`S=xwOYc_$7Xj}1RHmJ13dt{zw)*N);aH777!OE*P7H5EJy8C71NX-{aGb964yJi& zaLkNr56u!f_zT&(I_1;ez*)&E+>h(W3qxNqK* zId=L&&DJ)XK#9MOA6)kYy$+-ZQFG$Y52#cbhUXj^0BY!ls-+;q2Lhb~ZKwOC+R;pK zoDOZpj#Ct7;Ujo))YO1B1dwG*u`x4D92M9*AdlSWnfB#yXPA-!Qe5)j8VZ!OGe`ka zd=C!TfTj=~xwWqoWZZeZ)BDaDqVhwf;4BfK_rCl9&Vlmt4yoM8Gc+h1S!lUATpX81 zEx7(>=w`<0M#|7N4O3<9@Rpri_v zA?U=WSCNl0g$(hRjRNkiLw#z`(@(d6V}iS6R_^R^9I=F~+JoMpY!pGC>zWCsJi3k? zJ!}e?@z>1X&nd#tuw1kB)gS#yh(cKn8_~8ocftERRrB~)==qWi>IC#1fzTZbj zmB`!*uyV?mq*v!=Em!tpMj{NRb6}kG(q0N!U{+{rY^l1ev%^(m`v=CtK=Ldx2n!rCeU3Xp?5KKY zx!QoR(DFB7A%+WAxV*1KJULu28O`X1hM1d>De1X2y@oUfY}oc+I`h|jvZnX<6tAfeJE{kj+n

Lj>tPJm{0ip&yL1D&hW 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-curve_trim.png b/docs/mechanical-verification/cp5-curve_trim.png new file mode 100644 index 0000000000000000000000000000000000000000..5af7717cf1842fc8d21575dab0489fb243b31299 GIT binary patch literal 30459 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-diagnostics.png b/docs/mechanical-verification/cp5-diagnostics.png new file mode 100644 index 0000000000000000000000000000000000000000..29de29a856721daea6e9bf8b2b54dbeba5258ccc GIT binary patch literal 49349 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-measurements.png b/docs/mechanical-verification/cp5-measurements.png new file mode 100644 index 0000000000000000000000000000000000000000..34fb80b3258201a8eaf923ae59dd2cbfa5fc8d4c GIT binary patch literal 34865 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 literal 0 HcmV?d00001