diff --git a/CHANGELOG.md b/CHANGELOG.md index b0c1fc36e5b3bc40f30dcd5bece58617a9524377..c311c1cf56de8d7cc289f74a7134f7e68dd27cc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the Adom Bridge Fusion 360 bridge, newest first. Canonical: https://wiki.adom.inc/adom/fusion-bridge ยท GitHub backup: `adom-inc/fusion-bridge` +## Unreleased exploded-view planning (2026-10-06) + +- Add read-only `exploded_view_plan` (56 typed operations; 179 public verbs): exact per-instance home transforms, normalized world/parent/local translation directions, simultaneous moves within ordered steps, instructions and component-linked labels. +- Sample finite explode/reassembly timelines deterministically; nested instances inherit each ancestor offset once and reverse playback returns exact home poses. Native source geometry, joint fields and engineering BOM quantities remain unchanged. +- Refuse stale, ambiguous, unsupported configuration, hierarchy, matrix and budget inputs. Native function qualification passed six instances across 60 poses, source/joint/BOM preservation and archive reopening. Installed public routing remains untested. No native movement, graphics preview, trails, storyboard, image/video output or collision-free path claim. Release versions remain unchanged. + ## Unreleased scene inspection (2026-10-06) - Add guarded `render_scene_inspect` (55 typed operations; 179 public verbs) with bounded scene settings, viewport camera and environment observations. Missing runtime data stays explicit and partial. diff --git a/README.md b/README.md index c744da4a5ed0f94560991fbb626cf925cb71e613..3b80640258585f97c4579eaa26b0662a01ff1bc2 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Short version below, full detail in each guide. | [3D view, export and STEP colorization](docs/3d-viewer-and-export.md) | The 3D PCB, the native viewport frame in `fusion_state`, camera motion with `fusion_view`, every export format, web-grade GLB (16 MB to ~465 KB), and recoloring a grey imported STEP. | | [Electronics library manager](docs/electronics-libraries.md) | Symbols, IPC footprints and real 3D packages, generated rather than hand-drawn, explicit 3D `placement`, plus how to verify a part before shipping it. | | [Multi-part library import](docs/MULTIPART_LIBRARY_IMPORT.md) | How a zip of `.lbr` + STEPs becomes a Library Manager library with rendering 3D on every part: cloud `.f3d` urns, per-part minting (and the wrong-footprint trap it avoids), proof, and what the user sees. With screenshots. | -| [Mechanical design](docs/MECHANICAL.md) | Development 1.12: guarded parametric parts, constrained sketches, assemblies/joints, McMaster CAD, material/mass and flat/structured mechanical BOM. A separate source candidate adds guarded scene inspection and detached-camera preparation; rendering and animation remain future work. [Build evidence](docs/build-2026-10-02.md) and [feature/gap inventory](docs/mechanical-comparison/README.md). | +| [Mechanical design](docs/MECHANICAL.md) | Development 1.12: guarded parametric parts, constrained sketches, assemblies/joints, McMaster CAD, material/mass and flat/structured mechanical BOM. Separate source checkpoints add scene inspection, detached cameras and [exploded assembly plans](docs/build-2026-10-06-exploded-plans.md); visible previews, rendering and animation export remain future work. [Build evidence](docs/build-2026-10-02.md) and [feature/gap inventory](docs/mechanical-comparison/README.md). | | [Mechanical BOM and physical properties](docs/mechanical-bom.md) | Kit-aware assembly BOM that matches Fusion's Manage to BOM, and per-part volume/mass for costing. | | [Sign-in, sessions and updates](docs/sign-in-and-updates.md) | Multi-profile Autodesk sign-in, SSO without passwords, one login covering APS, the `needs_signin` short-circuit, `restartPolicy`, and silent auto-updates. | | [Autodesk's Fusion MCP server](docs/fusion-mcp-server.md) | Proxy Autodesk + Anthropic's local MCP server (text-to-CAD, Electronics object model) so a cloud AI can reach it, and turn it on for the user. | diff --git a/addin/AdomBridge/commands/mechanical/__init__.py b/addin/AdomBridge/commands/mechanical/__init__.py index c0a025151e51cb60eee844c6186632619bbe0b1d..1a3641d027e8659b96c543458c2835e1de9a753a 100644 --- a/addin/AdomBridge/commands/mechanical/__init__.py +++ b/addin/AdomBridge/commands/mechanical/__init__.py @@ -13,7 +13,7 @@ from .core import SESSION_ID, UNITS, MechanicalError, active, document_identity, from .operations import OPERATIONS, WRITES from .journal import JournalError, MAX_RECORDS, MAX_DATABASE_BYTES, MAX_RECORD_BYTES, MAX_REQUEST_BYTES, STORAGE_VERSION, canonical, fingerprint from .operation_history import OperationHistory -from . import transactions, sketches, features, assemblies, purchased, bill_of_materials, geometry, sketch_edits, regular_joints, motion_links, configurations, render_scene +from . import transactions, sketches, features, assemblies, purchased, bill_of_materials, geometry, sketch_edits, regular_joints, motion_links, configurations, render_scene, exploded_view for _name, _handler in {**sketches.OPERATIONS, **features.OPERATIONS, **assemblies.OPERATIONS, **geometry.OPERATIONS, **sketch_edits.OPERATIONS, **regular_joints.OPERATIONS, **motion_links.OPERATIONS}.items(): @@ -24,6 +24,7 @@ OPERATIONS.update(geometry.READS) OPERATIONS.update(sketch_edits.READS) OPERATIONS.update(configurations.READS) OPERATIONS.update(render_scene.READS) +OPERATIONS.update(exploded_view.READS) OPERATIONS.update(purchased.OPERATIONS) OPERATIONS.update(bill_of_materials.OPERATIONS) WRITES.update(purchased.WRITES | bill_of_materials.WRITES) diff --git a/addin/AdomBridge/commands/mechanical/exploded_view.py b/addin/AdomBridge/commands/mechanical/exploded_view.py new file mode 100644 index 0000000000000000000000000000000000000000..073849efde0b0c4323ce5c95cf2911aad2c4adf4 --- /dev/null +++ b/addin/AdomBridge/commands/mechanical/exploded_view.py @@ -0,0 +1,220 @@ +"""Read-only exploded assembly plans. Translation math never moves native objects.""" +import json +import math +import threading + +from .core import SESSION_ID, concrete, digest, identity, ref, require, resolve, same, target +from .configurations import provenance, snapshot as configuration_snapshot + +MAX_INSTANCES = 256 +MAX_STEPS = 32 +MAX_MOVES = 128 +MAX_SAMPLES = 64 +MAX_POSES = 4096 +MAX_OUTPUT_BYTES = 2 * 1024 * 1024 +IDENTITY = [1.,0.,0.,0., 0.,1.,0.,0., 0.,0.,1.,0., 0.,0.,0.,1.] + + +def bounded(collection): + count = collection.count + require(type(count) is int and 0 <= count <= MAX_INSTANCES, 'plan_budget', 'Occurrence collection exceeds 256 instances or has an invalid count.') + return [concrete(collection.item(i)) for i in range(count)] + + +def text(value, limit=2048): + require(isinstance(value,str) and len(value)<=limit, 'plan_identity_unavailable', 'Instance metadata is unavailable or exceeds its bound.') + return value + + +def matrix(value): + out = list(value.asArray()) + require(len(out)==16 and all(type(v) in (int,float) and math.isfinite(v) for v in out), + 'plan_frame_invalid', 'Home pose must be a complete finite matrix.') + require(all(abs(out[12+i]-v)<=1e-9 for i,v in enumerate((0,0,0,1))), 'plan_frame_invalid', 'Home pose is not affine.') + axes = [[out[r*4+c] for r in range(3)] for c in range(3)] + require(all(abs(sum(v*v for v in axis)-1)<=1e-6 for axis in axes) + and all(abs(sum(a*b for a,b in zip(axes[i],axes[j])))<=1e-6 for i,j in ((0,1),(0,2),(1,2))), + 'plan_frame_invalid', 'Home pose is not orthonormal; scaled instances are unsupported.') + a,b,c=axes + cross=[a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]] + require(sum(x*y for x,y in zip(cross,c))>1-1e-6, 'plan_frame_invalid', 'Reflected home poses are unsupported.') + for index in (3,7,11): + out[index] *= 10 + require(math.isfinite(out[index]) and abs(out[index])<=1e9, 'plan_frame_invalid', 'Home translation exceeds 1e9 mm.') + return out + + +def capture(design, value): + """Capture the actual root-context tree; never infer parents from names.""" + root = design.rootComponent + candidates = bounded(root.allOccurrences) + by_path = {} + for occurrence in candidates: + require(occurrence is not None and occurrence.isValid and occurrence.objectType=='adsk::fusion::Occurrence', + 'plan_identity_unavailable', 'Invalid occurrence in root-context inventory.') + path=text(occurrence.fullPathName) + require(path and path not in by_path, 'ambiguous_context', 'Every root-context occurrence needs a unique full path.') + by_path[path]=occurrence + rows, seen, handles = [], set(), {} + def walk(occurrence,parent,depth): + require(depth<=32, 'plan_budget', 'Occurrence hierarchy exceeds 32 levels.') + path=text(occurrence.fullPathName) + require(path in by_path and same(occurrence,by_path[path]) and path not in seen, + 'ambiguous_context', 'Child traversal does not identify one exact root-context instance.') + occurrence=by_path[path] + context=concrete(occurrence.assemblyContext) + require((parent is None and context is None) or + (parent is not None and context is not None and text(context.fullPathName)==parent['path'] + and same(context,handles[parent['instanceId']])), + 'invalid_context', 'Occurrence parent context disagrees with the native hierarchy.') + comp=concrete(occurrence.component) + require(comp is not None and comp.isValid and same(comp.parentDesign,design), 'wrong_component', 'Occurrence component belongs to another design.') + comp_id=identity(comp) + instance_id=digest([SESSION_ID,value['documentId'],path,comp_id]) + row={'instanceId':instance_id,'path':path,'occurrence':ref(occurrence,value), + 'parentInstanceId':parent['instanceId'] if parent else None, + 'componentId':comp_id,'component':ref(comp,value),'componentName':text(comp.name,256), + 'partNumber':text(comp.partNumber,256),'homeMatrix':matrix(occurrence.transform2)} + rows.append(row);seen.add(path);handles[instance_id]=occurrence + for child in sorted(bounded(occurrence.childOccurrences),key=lambda item:text(item.fullPathName)): + walk(child,row,depth+1) + for occurrence in sorted(bounded(root.occurrences),key=lambda item:text(item.fullPathName)): + walk(occurrence,None,1) + require(seen==set(by_path), 'invalid_context', 'Native hierarchy did not cover every root-context occurrence.') + # Numbers are presentation labels within this source-bound plan, not BOM quantities. + labels={} + for row in rows: + labels.setdefault(row['componentId'],'C'+str(len(labels)+1).zfill(3)) + row['label']={'item':labels[row['componentId']],'instance':row['path'], + 'componentId':row['componentId'],'partNumber':row['partNumber'], + 'scope':'presentation component label; not an engineering BOM item number'} + root_bodies=root.bRepBodies.count + require(type(root_bodies) is int and 0<=root_bodies<=MAX_INSTANCES,'plan_budget','Root body inventory exceeds its bound.') + root_group={'componentId':identity(root),'component':ref(root,value),'bodyCount':root_bodies, + 'homeMatrix':list(IDENTITY),'selectable':False,'scope':'fixed root-owned direct bodies'} + return {'instances':rows,'rootBodyGroup':root_group}, handles + + +def request_arguments(args): + require(args.get('unit')=='mm', 'invalid_input', 'Exploded planning distances require explicit mm.') + playback=args.get('playback','explode') + require(playback in ('explode','assemble'), 'invalid_input', 'playback must be explode or assemble.') + steps=args.get('steps') + require(isinstance(steps,list) and 1<=len(steps)<=MAX_STEPS,'invalid_input','Supply 1โ€“32 ordered steps.') + total=0.;count=0 + for step in steps: + require(isinstance(step,dict) and set(step)<= {'durationSeconds','moves','title','instruction'} and {'durationSeconds','moves'}<=set(step), + 'invalid_input','Each step requires durationSeconds and moves.') + duration=step['durationSeconds'] + require(type(duration) in (int,float) and math.isfinite(duration) and 0total, + 'invalid_input', 'Step duration is too small to represent after preceding steps.') + total=end + moves=step['moves'];require(isinstance(moves,list) and 1<=len(moves)<=MAX_MOVES,'invalid_input','Each step requires 1โ€“128 moves.') + count+=len(moves) + for move in moves: + require(isinstance(move,dict) and set(move)=={'occurrence','direction','distance','frame'}, 'invalid_input','Move fields must be occurrence, direction, distance and frame.') + require(move['frame'] in ('world','parent','local'),'invalid_input','Unknown translation frame.') + direction=move['direction'];distance=move['distance'] + require(isinstance(direction,list) and len(direction)==3 and all(type(v) in (int,float) and math.isfinite(v) and abs(v)<=1e9 for v in direction), + 'invalid_input','Direction requires three finite bounded numbers.') + require(math.hypot(*direction)>1e-12,'invalid_input','Direction must be nonzero.') + require(type(distance) in (int,float) and math.isfinite(distance) and 0=step['endSeconds'] else (forward-step['startSeconds'])/step['durationSeconds'] + progress.append({'stepIndex':step['index'],'fraction':fraction}) + for move in step['moves']: + for axis in range(3):own[move['instanceId']][axis]+=move['worldTranslation'][axis]*fraction + composed={};poses=[] + for row in snapshot['instances']: + key=row['instanceId'];parent=composed[row['parentInstanceId']] if row['parentInstanceId'] else [0.,0.,0.] + offset=[own[key][axis]+parent[axis] for axis in range(3)];composed[key]=offset + pose=list(row['homeMatrix']) + if forward!=0: + for axis,index in enumerate((3,7,11)):pose[index]+=offset[axis] + require(all(math.isfinite(v) and abs(v)<=2e9 for v in pose),'plan_frame_invalid','Sample pose exceeds finite output bounds.') + poses.append({'instanceId':key,'matrix':pose,'translationFromHome':offset}) + results.append({'timeSeconds':time,'forwardTimeSeconds':forward,'stepProgress':progress,'poses':poses}) + return results + + +def exploded_view_plan(app,args): + require(threading.current_thread() is threading.main_thread(),'wrong_thread','Exploded plan native reads require the main thread.') + require(args.get('sessionId')==SESSION_ID,'session_mismatch','Exploded planning requires the current session.') + wanted=args.get('target') + require(isinstance(wanted,dict) and isinstance(wanted.get('documentId'),str) and isinstance(wanted.get('revision'),str), + 'invalid_input','Exploded planning requires exact target documentId and revision.') + total,times,playback=request_arguments(args) + document,design,value=target(app,args) + flags=(document.isSaved,document.isModified) + require(all(type(v) is bool for v in flags),'plan_state_unavailable','Document flags are unavailable.') + config=configuration_snapshot(design,strict=True) + snapshot,handles=capture(design,value) + steps=compile_steps(design,value,snapshot,handles,args['steps']) + samples=sample_plan(snapshot,steps,times,total,playback) + after,_=capture(design,value) + after_flags=(document.isSaved,document.isModified) + require(after==snapshot and configuration_snapshot(design,strict=True)==config and all(type(v) is bool for v in after_flags) and after_flags==flags, + 'plan_source_changed','Model instance, configuration or document state changed during planning.') + _,_,current=target(app,args) + require(current==value,'plan_source_changed','Model target changed during planning.') + plan={'schemaVersion':1,'sessionId':SESSION_ID,'target':value,'configuration':provenance(config), + 'configurationGraphDigest':digest(config),'units':{'translation':'mm','time':'s'},'space':'root/world', + 'matrixLayout':'row-major; column-vector multiplication; translation indices 3,7,11', + 'framePolicy':'directions normalized; axes fixed at home; parent translations inherited once; explicit child translations add', + 'durationSeconds':total,'steps':steps,**snapshot} + result={'kind':'PRESENTATION_PLAN','planId':digest(plan),'plan':plan,'playback':playback,'samples':samples, + 'modelUnchanged':True,'nativeMoved':False,'graphicsCreated':False,'rendered':False,'storyboardCreated':False, + 'bomQuantities':'not computed or changed; labels link component identities and exact instance paths', + 'limits':['Explicit directions only; no automatic layout, rotation interpolation, collision or physical disassembly proof.', + 'Root-owned direct bodies are a fixed group and cannot be selected as occurrences.', + 'No geometry copies, graphics preview, trails, video, native storyboard or archive-persistence claim.', + 'Plan identity is bound to this session and model revision; no cross-session reference replay.']} + require(len(json.dumps(result,allow_nan=False).encode('utf-8'))<=MAX_OUTPUT_BYTES,'plan_budget','Plan exceeds its 2 MiB output bound.') + return result + + +READS={'exploded_view_plan':exploded_view_plan} diff --git a/addin/AdomBridge/commands/mechanical/schema.json b/addin/AdomBridge/commands/mechanical/schema.json index 3321f00401cb8b4f6bbd2307306bad2c2791cb76..7d281d893f75fcb3337c914dfcf9726da83e4d0c 100644 --- a/addin/AdomBridge/commands/mechanical/schema.json +++ b/addin/AdomBridge/commands/mechanical/schema.json @@ -6560,5 +6560,129 @@ } }, "description": "Guarded main-thread read of current viewport camera, render settings and up to 32 environments. Optional detached world-mm camera is constructed and read back without viewport assignment. Missing fields return PARTIAL; observationComplete covers only bounded available scope. sceneWitnessComplete and renderQualified remain false. No rendering, workspace activation or scene writes." + }, + "exploded_view_plan": { + "type": "object", + "required": [ + "op", + "sessionId", + "target", + "unit", + "steps" + ], + "properties": { + "sessionId": { + "type": "string" + }, + "target": { + "type": "object", + "required": [ + "documentId", + "revision" + ], + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + } + }, + "unit": { + "type": "string", + "enum": [ + "mm" + ] + }, + "steps": { + "type": "array", + "minItems": 1, + "maxItems": 32, + "items": { + "type": "object", + "required": [ + "durationSeconds", + "moves" + ], + "additionalProperties": false, + "properties": { + "title": { + "type": "string" + }, + "durationSeconds": { + "type": "number", + "exclusiveMinimum": 0, + "maximum": 3600 + }, + "moves": { + "type": "array", + "minItems": 1, + "maxItems": 128, + "items": { + "type": "object", + "required": [ + "occurrence", + "direction", + "distance", + "frame" + ], + "additionalProperties": false, + "properties": { + "occurrence": { + "type": "object", + "description": "Exact guarded occurrence reference from inspect; every repeated/nested instance is distinct." + }, + "direction": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "minimum": -1000000000.0, + "maximum": 1000000000.0 + } + }, + "distance": { + "type": "number", + "exclusiveMinimum": 0, + "maximum": 1000000.0 + }, + "frame": { + "type": "string", + "enum": [ + "world", + "parent", + "local" + ] + } + } + } + }, + "instruction": { + "type": "string" + } + } + } + }, + "sampleTimes": { + "type": "array", + "maxItems": 62, + "items": { + "type": "number", + "minimum": 0, + "maximum": 3600 + } + }, + "playback": { + "type": "string", + "enum": [ + "explode", + "assemble" + ] + } + }, + "description": "Read-only source-bound exploded assembly plan. Normalized translation directions in immutable home world/parent/local axes; simultaneous moves within ordered steps. Descendants inherit ancestor translations once, plus own moves. Bounded deterministic sample matrices and exact home reverse endpoint. No native moves, graphics, BOM quantity changes, render/video or storyboard creation. Complete configuration identity required." } } diff --git a/contracts/describe.json b/contracts/describe.json index b3482fde0efa56e3440ad5cfe47110d72e7c7fb5..35269f0db9d709446cb9fe7f2059f9bcf3f291fe 100644 --- a/contracts/describe.json +++ b/contracts/describe.json @@ -2502,6 +2502,130 @@ ], "type": "object" }, + "exploded_view_plan": { + "description": "Read-only source-bound exploded assembly plan. Normalized translation directions in immutable home world/parent/local axes; simultaneous moves within ordered steps. Descendants inherit ancestor translations once, plus own moves. Bounded deterministic sample matrices and exact home reverse endpoint. No native moves, graphics, BOM quantity changes, render/video or storyboard creation. Complete configuration identity required.", + "properties": { + "playback": { + "enum": [ + "explode", + "assemble" + ], + "type": "string" + }, + "sampleTimes": { + "items": { + "maximum": 3600, + "minimum": 0, + "type": "number" + }, + "maxItems": 62, + "type": "array" + }, + "sessionId": { + "type": "string" + }, + "steps": { + "items": { + "additionalProperties": false, + "properties": { + "durationSeconds": { + "exclusiveMinimum": 0, + "maximum": 3600, + "type": "number" + }, + "instruction": { + "type": "string" + }, + "moves": { + "items": { + "additionalProperties": false, + "properties": { + "direction": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "distance": { + "exclusiveMinimum": 0, + "maximum": 1000000.0, + "type": "number" + }, + "frame": { + "enum": [ + "world", + "parent", + "local" + ], + "type": "string" + }, + "occurrence": { + "description": "Exact guarded occurrence reference from inspect; every repeated/nested instance is distinct.", + "type": "object" + } + }, + "required": [ + "occurrence", + "direction", + "distance", + "frame" + ], + "type": "object" + }, + "maxItems": 128, + "minItems": 1, + "type": "array" + }, + "title": { + "type": "string" + } + }, + "required": [ + "durationSeconds", + "moves" + ], + "type": "object" + }, + "maxItems": 32, + "minItems": 1, + "type": "array" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "unit": { + "enum": [ + "mm" + ], + "type": "string" + } + }, + "required": [ + "op", + "sessionId", + "target", + "unit", + "steps" + ], + "type": "object" + }, "export": { "description": "Export entire design using runtime-checked API. Preflight and unique same-filesystem staging preserve the destination on failure; publish only nonempty verified output. Availability differs by Fusion build. STL numeric coordinates use mm.", "properties": { @@ -8730,7 +8854,7 @@ "op": "inspect" }, "input": { - "op": "required enum: inspect|inspect_entity|new_design|parameter_set|parameter_create|health|export|transaction_probe|sketch_create|sketch_geometry|sketch_constraint|sketch_dimension|sketch_project|sketch_edit|plane_create|feature_create|feature_edit|entity_delete|parameter_batch|component_create|occurrence_insert|occurrence_update|occurrence_delete|component_metadata|joint_create|joint_edit|joint_delete|interference|bom|bom_export|cad_import|mcmaster_discover|mcmaster_open|material_list|material_assign|rigid_group_create|rigid_group_edit|rigid_group_delete|assembly_properties|geometry_query|measure|sketch_curve_edit|sketch_offset|construction_axis|sketch_diagnostics|joint_origin_create|joint_origin_edit|joint_origin_delete|regular_joint_create|regular_joint_edit|motion_link_create|motion_link_edit|motion_link_delete|configuration_inspect|render_scene_inspect", + "op": "required enum: inspect|inspect_entity|new_design|parameter_set|parameter_create|health|export|transaction_probe|sketch_create|sketch_geometry|sketch_constraint|sketch_dimension|sketch_project|sketch_edit|plane_create|feature_create|feature_edit|entity_delete|parameter_batch|component_create|occurrence_insert|occurrence_update|occurrence_delete|component_metadata|joint_create|joint_edit|joint_delete|interference|bom|bom_export|cad_import|mcmaster_discover|mcmaster_open|material_list|material_assign|rigid_group_create|rigid_group_edit|rigid_group_delete|assembly_properties|geometry_query|measure|sketch_curve_edit|sketch_offset|construction_axis|sketch_diagnostics|joint_origin_create|joint_origin_edit|joint_origin_delete|regular_joint_create|regular_joint_edit|motion_link_create|motion_link_edit|motion_link_delete|configuration_inspect|render_scene_inspect|exploded_view_plan", "operationId": "required unique write ID; reuse unchanged for retry", "operationSchemas": { "assembly_properties": { @@ -9104,6 +9228,130 @@ ], "type": "object" }, + "exploded_view_plan": { + "description": "Read-only source-bound exploded assembly plan. Normalized translation directions in immutable home world/parent/local axes; simultaneous moves within ordered steps. Descendants inherit ancestor translations once, plus own moves. Bounded deterministic sample matrices and exact home reverse endpoint. No native moves, graphics, BOM quantity changes, render/video or storyboard creation. Complete configuration identity required.", + "properties": { + "playback": { + "enum": [ + "explode", + "assemble" + ], + "type": "string" + }, + "sampleTimes": { + "items": { + "maximum": 3600, + "minimum": 0, + "type": "number" + }, + "maxItems": 62, + "type": "array" + }, + "sessionId": { + "type": "string" + }, + "steps": { + "items": { + "additionalProperties": false, + "properties": { + "durationSeconds": { + "exclusiveMinimum": 0, + "maximum": 3600, + "type": "number" + }, + "instruction": { + "type": "string" + }, + "moves": { + "items": { + "additionalProperties": false, + "properties": { + "direction": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "distance": { + "exclusiveMinimum": 0, + "maximum": 1000000.0, + "type": "number" + }, + "frame": { + "enum": [ + "world", + "parent", + "local" + ], + "type": "string" + }, + "occurrence": { + "description": "Exact guarded occurrence reference from inspect; every repeated/nested instance is distinct.", + "type": "object" + } + }, + "required": [ + "occurrence", + "direction", + "distance", + "frame" + ], + "type": "object" + }, + "maxItems": 128, + "minItems": 1, + "type": "array" + }, + "title": { + "type": "string" + } + }, + "required": [ + "durationSeconds", + "moves" + ], + "type": "object" + }, + "maxItems": 32, + "minItems": 1, + "type": "array" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "unit": { + "enum": [ + "mm" + ], + "type": "string" + } + }, + "required": [ + "op", + "sessionId", + "target", + "unit", + "steps" + ], + "type": "object" + }, "export": { "description": "Export entire design using runtime-checked API. Preflight and unique same-filesystem staging preserve the destination on failure; publish only nonempty verified output. Availability differs by Fusion build. STL numeric coordinates use mm.", "properties": { diff --git a/docs/EXPLODED-VIEWS.md b/docs/EXPLODED-VIEWS.md index ed1d76fbd1c6c2306b0e5cdb4d87b63afe81f890..857a9e8087aacd9ecbb4fc22b128f072df988790 100644 --- a/docs/EXPLODED-VIEWS.md +++ b/docs/EXPLODED-VIEWS.md @@ -1,10 +1,85 @@ -# Planned exploded views and assembly instructions +# Exploded-view plans and planned presentation backends -Exploded assembly views are a core requirement of the next animation checkpoint. -They are planned, not implemented or native-qualified by the mechanical foundation -integration. The first delivery should cover ordered assembly/disassembly steps, -BOM-linked item labels, motion trails, and reversible presentation poses while -preserving the source assembly's joints, grounding, positions and configuration. +The `exploded_view_plan` source candidate provides read-only translation plans, +ordered assembly/disassembly instructions, component-linked instance labels and +finite numeric pose samples. Native module-function qualification passed on +Fusion 2705.1.30; installed public routing remains untested. See the +[checkpoint evidence](build-2026-10-06-exploded-plans.md). It does not create +an exploded viewport, graphics, trails, a storyboard or video. Those presentation +backends remain a core animation requirement, and must preserve the source +assembly's joints, grounding, positions and configuration. + +## Current planning contract + +Call `fusion_mechanical` with this operation, the current `sessionId`, an exact +`target` from inspect, explicit `unit: "mm"`, and one or more ordered `steps`. +Each step supplies `durationSeconds` and `moves`; optional `title` (256 characters) +and `instruction` (1024 characters) describe the assembly action. + +```json +{ + "op": "exploded_view_plan", + "sessionId": "", + "target": {"documentId": "", "revision": ""}, + "unit": "mm", + "steps": [ + { + "title": "Lift the cover", "instruction": "Lift evenly along its home local Z axis.", + "durationSeconds": 2, + "moves": [{"occurrence": "", + "direction": [0, 0, 1], "distance": 20, "frame": "local"}] + } + ], + "sampleTimes": [0.5, 1, 1.5], + "playback": "explode" +} +``` + +The reference placeholder must be replaced by the whole guarded occurrence object; +component names or part numbers cannot select an instance. Directions are normalized +and must be nonzero. Distance is positive; reverse direction with a negative vector +component. Supported frames are `world`, `parent` and `local`, all fixed to the +immutable home orientation of the exact instance. A top-level instance's parent +frame is world. Rotated repeated subassemblies therefore give different world +translation directions for their otherwise identical local parts. + +Moves in one step are simultaneous; ordered steps accumulate their translations +with linear interpolation. Descendants inherit each ancestor's translation exactly +once and add any explicitly selected child translation. The returned root matrix is +the saved home matrix with those world translations added. It never multiplies an +already root-space child transform by its parent a second time. Rotation interpolation, +automatic radial layouts and collision-free disassembly are unsupported. + +`plan.instances` freezes each root-context occurrence's guarded reference, exact +full path, component identity, parent instance ID, part number and row-major home +matrix. Matrix translations are mm at indices 3, 7 and 11. Instance IDs bind session, +document, path and component identity; source references must also resolve by native +API equality. Repeated instances share component labels but have distinct instance +labels and poses. Duplicate part numbers do not merge distinct components. Labels +are presentation identifiers linked to the component grouping used by BOM readback; +they are not authoritative engineering item numbers. Engineering/purchasing quantities +are neither recalculated nor changed. Root-owned direct bodies are returned as a +fixed root group and cannot be selected as occurrences in this slice. + +`planId` hashes the returned immutable plan; each sample includes its time, forward +plan time, per-step progress and instance matrices. `playback: "assemble"` samples +the same plan backwards. Both endpoints are always included; the last assembly +sample returns the exact saved home matrices. Pure sampling does not modify the +home arrays. The plan is bound to one session/model revision and a complete supported +configuration witness; incomplete configurations refuse, and no old-session native +reference replay is enabled. No plan file is written automatically. + +Limits are 256 instances, 32 hierarchy levels, 32 ordered steps, 128 moves in total, +3600 seconds total duration, 62 requested sample times plus the endpoints, 4096 +instance poses and 2 MiB output. Individual moves are limited to 1e6 mm and home +translations to 1e9 mm. Scaled, reflected, nonfinite or malformed native matrices, +ambiguous instances and incomplete parent relationships refuse. Main-thread, session, +document and revision guards precede native reads. A second instance/configuration +snapshot, document flag comparison and target check must remain unchanged; a conflict +refuses without attempting to restore user state. Native acceptance is separate from +offline frame-math and read-only-handler tests. + +## Future presentation backend Use a separate owned presentation scene with copied geometry for the initial automated preview. Move its display nodes rather than source occurrences; do not @@ -42,6 +117,13 @@ user's newer state. Persisted presentation data and native archive reopening nee their own proof; graphics availability alone does not establish persistence. Still rendering, finite requested video export and durable asynchronous job -lifecycle remain separate gates. No render, video, capture loop, continuous feed -or Shotlog upload is enabled by this plan. Follow the +lifecycle remain separate gates. Neither the numeric planning operation nor this +backend proposal enables rendering, video, capture loops, continuous feeds or +Shotlog uploads. Follow the [capture policy](mechanical-verification/CAPTURE-POLICY.md). + + +Planning reads follow the documented [root occurrence inventory](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Component_allOccurrences.htm), +[context-preserving child occurrences](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_childOccurrences.htm), +[assembly context](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_assemblyContext.htm) +and [transform2](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_transform2.htm). diff --git a/docs/MECHANICAL.md b/docs/MECHANICAL.md index f5cdfca60b50c7fda14162dd92b57500f5cb8a63..c0292ae46453f3db788c32a1e63add183bedb88d 100644 --- a/docs/MECHANICAL.md +++ b/docs/MECHANICAL.md @@ -22,6 +22,23 @@ To create a separate design, call `new_design` with the session ID and a unique Existing-document mutations also require `target: {"documentId":"...","revision":"..."}` from inspection. Never fabricate or cache these values across an add-in restart. +## Plan exploded assembly steps + +`exploded_view_plan` returns an immutable source-bound instance/home-pose plan, +ordered translation steps, component-linked labels and finite sampled matrices. +Use current session/target, exact occurrence references, explicit mm distances and +home-fixed `world`, `parent` or `local` directions. Parent motion is inherited once; +explicit child offsets add. `playback: "assemble"` reverses the same timeline and +returns exact home poses at its endpoint. Optional titles and instructions accompany +the step/progress sequence. See [the contract and limits](EXPLODED-VIEWS.md). + +This operation performs native reads and pure pose calculations only. It does not +move occurrences, suppress joints, create graphics, change BOM quantities, create +a storyboard, render images or export video. Native module-function qualification +passed six instances across 60 poses, source/joint/BOM preservation and F3D reopening; +installed public routing remains untested. See [the evidence](build-2026-10-06-exploded-plans.md). +Exploded previews and presentation backends are still planned. + ## Inspect render settings and prepare a detached camera `render_scene_inspect` is a guarded read. Pass the current `sessionId` and exact diff --git a/docs/build-2026-10-06-exploded-plans.md b/docs/build-2026-10-06-exploded-plans.md new file mode 100644 index 0000000000000000000000000000000000000000..f6570f6ba630d3c39a45da5f76dbb966406793b3 --- /dev/null +++ b/docs/build-2026-10-06-exploded-plans.md @@ -0,0 +1,60 @@ +# Exploded assembly plans, October 6, 2026 + +## What was built + +`exploded_view_plan` captures each physical assembly instance's home pose and +returns ordered translation steps with simultaneous moves, assembly instructions, +component-linked labels and finite forward/reverse samples. Parent offsets are +inherited once, while explicit child offsets add independently. World, parent and +local directions use the captured home orientation. Reassembly ends at the exact +original matrices. The operation requires the current session and source revision. + +This is operation 56; the public catalog remains 179 verbs. It builds on the exact +scene-inspection commit `9f51bab1f80a4f5660788ef2174c1649d0cf9d8f` +([PR #12](https://wiki.adom.inc/adom/fusion-bridge/prs/12)), following the corrected +foundation [PR #11](https://wiki.adom.inc/adom/fusion-bridge/prs/11). Merge those +dependencies first. Release versions and the installed development runtime remain +unchanged; this is a source review checkpoint. + +## Verification + +The source suite passed 496 Python tests, including 17 focused planner tests. +Root independently passed the focused tests, static/import checks, a fresh Windows +build with the candidate catalog, and all 27 final native-runner boundary tests. +An independent adversarial calculation verified 840 full 3D poses in 30 scenarios. + +Root executed the exact frozen module in Fusion 2705.1.30 using the existing +pinned development runtime. The fixture included two differently rotated Carrier +instances, four repeated child parts, a fixed root body and a rigid joint in the +shared Carrier definition. All 60 sampled poses across explode and reassemble +playback matched independently calculated matrices. Wrong-session and stale-target +requests returned the required refusals. All 16 native checks passed, including +unchanged model/attachment graphs and public BOM quantities, full F3D graph/BOM +roundtrip, two exact document closures, original-document restoration, and +preserved preferences, development pin and runtime identity. + +The initial campaign failed before invoking the product because the test expected +a root-owned rigid joint. Fusion placed that joint in the shared Carrier +definition. The original failure and successful cleanup remain preserved. The +corrected runner requires the measured exact owner and child members; it rejects +root/Part ownership, mismatched definition links and wrong repeated instances. +The product source did not change between these campaigns. + +## Decisions and next work + +No user decision is required for this source checkpoint. Numeric plans are ready +for review. Visible exploded previews, copied geometry, trails, engineering BOM +item numbering, rendered frames, video and editable native storyboards remain +separate work. The next slice uses independently owned presentation geometry so +source placements and joints remain intact. Plans do not prove collision-free or +physically valid disassembly; rotation interpolation is not included. + +Qualification covers the module function in a temporary unregistered Python +module. Installed public dispatch remains **NOT_RUN**. No screenshots, render +images, continuous capture or Shotlog uploads were requested. All source documents +and test cleanup are accounted for; no test fixture remains open. + +See the [operation contract](EXPLODED-VIEWS.md) and the hash-indexed +[evidence directory](exploded-plan-evidence-2026-10-06/index.json). Full raw call +receipts and the native F3D archive remain under +`research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2`. diff --git a/docs/exploded-plan-evidence-2026-10-06/acceptance.json b/docs/exploded-plan-evidence-2026-10-06/acceptance.json new file mode 100644 index 0000000000000000000000000000000000000000..b54648582ee11b03bd9cfffd0f7348b17a99faef --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/acceptance.json @@ -0,0 +1,36 @@ +{ + "status": "PASS_FUNCTION_NATIVE", + "publicVerbs": 179, + "typedOperations": 56, + "pythonTests": 496, + "rootFocusedTests": 17, + "runnerBoundaryTests": 27, + "independentPoseOracle": { + "scenarios": 30, + "poses": 840 + }, + "nativeChecks": 16, + "nativeInstances": 6, + "nativeSampledPoses": 60, + "sourceSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "nativeBuild": "2705.1.30", + "nativeScope": "module-function-native-api", + "installedPublicRoute": "NOT_RUN", + "visualPreview": "NOT_RUN", + "rendering": "NOT_RUN", + "captures": 0, + "shotlogUploads": 0, + "sourceModelAndJoints": "UNCHANGED", + "publicBom": "UNCHANGED", + "f3dFullModelGraphAndBom": "PASS", + "cleanup": "PASS", + "exactDocumentClosures": 2, + "developmentRuntimeReplaced": false, + "originalFailedEvidencePreserved": true, + "originalFailureWasBeforeProduct": true, + "windowsExecutableSha256": "e8121ac95172c1d9d1ed1463ee8697d78da58a1e0afc83677323286ade7aa753", + "archive": { + "sha256": "0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504", + "bytes": 58578 + } +} diff --git a/docs/exploded-plan-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.json b/docs/exploded-plan-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.json new file mode 100644 index 0000000000000000000000000000000000000000..0bf6e64f37182f8167d8a256017ec502652de534 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.json @@ -0,0 +1,103 @@ +{ + "verdict": "CLEAR_SOURCE_AND_FUNCTION_NATIVE_API", + "productSourceSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "runnerSourceSha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51", + "productSourceReview": { + "path": "/tmp/fusion-roadmap-adversary/exploded-plan/review.json", + "sha256": "c8bb057cb28ab9bb3c87a2a5654f21565b0147d11bb611d17c1edd873c84588d" + }, + "runnerSourceReview": { + "path": "/tmp/fusion-roadmap-adversary/exploded-native-runner/review-r3.json", + "sha256": "c86b02bf48913ecdcb923d9641b0b6982158a02ad87f793015d16ce3aa9ba3f7" + }, + "nativeAcceptance": { + "audit": "PASS", + "classification": "EXPLODED_PLAN_FUNCTION_NATIVE_API_PASS", + "reportSha256": "c5c0450da2fb66af1f6336a00f91f9b19da248b97058b92247a114dad01332bb", + "runnerSha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51", + "productSourceSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "rawCallCount": 70, + "verifiedSourceHashes": 15, + "passedChecks": 16, + "exactGeneratedProbeCalls": 1, + "cases": [ + "explode", + "assemble", + "wrong-session", + "stale-revision" + ], + "independentPosesVerified": 60, + "modelJointWitnessUnchanged": true, + "bomUnchangedAndArchiveRoundtrip": true, + "archiveSha256": "0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504", + "archiveBytes": 58578, + "exactDocumentsClosed": 2, + "originalRestored": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "bridgeProcessPid": 42780, + "captureOrImageArtifacts": 0, + "reviewerHostCalls": 0, + "limitations": [ + "Qualification is frozen module function/native API only; installed public route NOT_RUN.", + "No native occurrence movement, graphics, rendering, storyboard, trail, video or collision-free assembly/disassembly proof.", + "Native attempt1 FAIL remains preserved; its runner owner assumption was corrected, not relabeled as product acceptance." + ] + }, + "originalFailedAttempt": { + "audit": "PASS", + "originalOverall": "FAIL", + "classification": "RUNNER_FIXTURE_OWNER_ASSUMPTION_FAILED_BEFORE_PRODUCT", + "reportSha256": "244acb7213ce92472ca09d7876884177d54b1303164ea519baf0ec2984f3365e", + "rawCallCount": 54, + "verifiedSourceHashes": 13, + "passedChecks": 10, + "productExecuted": false, + "bomQualification": "NOT_RUN", + "observedJointOwner": "shared Carrier definition component 1", + "exactJointMembers": [ + 1, + 2 + ], + "archiveSha256": "ef93db862658a721319d8c215e3c20e83a7d6af8ce053071ad1a2eccc2d91a6d", + "archiveBytes": 58350, + "exactDocumentsClosed": 2, + "originalRestored": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "runtimePid": 42780, + "captureOrImageArtifacts": 0, + "reviewerHostCalls": 0, + "limitation": "This confirms preserved fixture/archive and exact cleanup only; no exploded product qualification was attempted." + }, + "remainingMaterialFindings": [], + "finalAnythingLeft": "Final bounded source/raw-receipt/numerical/native-witness/archive/cleanup pass found no remaining material issue. Evidence and claims are limited to numeric exploded-plan module function qualification; installed route and rendering/graphics remain NOT_RUN.", + "reviewerActions": { + "hostCalls": 0, + "sourceEdits": 0, + "captures": 0, + "shotlogUploads": 0, + "publication": 0 + }, + "preservation": "Original failed native attempt and prior frozen runner revisions preserved unchanged; no failed result relabeled PASS." +} diff --git a/docs/exploded-plan-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.md b/docs/exploded-plan-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.md new file mode 100644 index 0000000000000000000000000000000000000000..6a10c51ca6dab43821311076cd278fb60dcfa86e --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.md @@ -0,0 +1,13 @@ +# Independent exploded-plan acceptance review + +**CLEAR: source and native module-function qualification passed.** No material finding remains after the final bounded review. The installed public operation route has not been tested. + +Frozen product SHA `a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f`; final runner SHA `78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51`. The independent source review exercised 30 deterministic 3D scenarios and 840 matrices. The final native evidence binds 70 raw calls, 15 source hashes, the exact single generated probe, and selections from the saved inspections. + +Native acceptance: 16 checks PASS, cleanup PASS. The six-occurrence fixture contains repeated and nested definitions with rotated parent/local frames and a shared Carrier-owned rigid joint. An independent matrix-composition oracle verifies all 60 poses across explode/assemble samples; reverse playback returns exact captured home matrices. Wrong session and stale revision require the exact refusal codes. Full model/attachment witnesses and public BOM remain unchanged. + +F3D reopen preserves the rich model/joint witness and BOM. The retained archive is 58,578 bytes, SHA `0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504`. Both exact owned documents closed; the original pristine document `cdf1e4ec-a727-4ffe-8975-d10e11191864` was restored. Preferences, development pin and runtime identity checks pass. Zero capture requests and image artifacts were found. Final report SHA `c5c0450da2fb66af1f6336a00f91f9b19da248b97058b92247a114dad01332bb`. + +Earlier findings and failures remain preserved. R1's initial joint-member and repeated-label oracle gaps were fixed. The first native attempt then stopped before invoking the product because r2 assumed root-owned joint storage; native evidence established the shared Carrier owner. R3 binds that exact component through API-equality links and retains exact member checks. The original attempt remains FAIL with independently verified cleanup PASS; it is not counted as product acceptance. + +Qualification covers a numeric presentation plan and immutable pose samples from the frozen module. It does not establish the installed public route, visible exploded graphics, native occurrence movement, trails, rendering, Animation storyboards, video, or collision-free physical assembly/disassembly. The reviewer made no host calls, source edits, captures, Shotlog uploads or publication changes. diff --git a/docs/exploded-plan-evidence-2026-10-06/adversary-native-attempt1-review.json b/docs/exploded-plan-evidence-2026-10-06/adversary-native-attempt1-review.json new file mode 100644 index 0000000000000000000000000000000000000000..a28cd13e8e3a1fb2b3381a28afd5e095465519a6 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/adversary-native-attempt1-review.json @@ -0,0 +1,36 @@ +{ + "audit": "PASS", + "originalOverall": "FAIL", + "classification": "RUNNER_FIXTURE_OWNER_ASSUMPTION_FAILED_BEFORE_PRODUCT", + "reportSha256": "244acb7213ce92472ca09d7876884177d54b1303164ea519baf0ec2984f3365e", + "rawCallCount": 54, + "verifiedSourceHashes": 13, + "passedChecks": 10, + "productExecuted": false, + "bomQualification": "NOT_RUN", + "observedJointOwner": "shared Carrier definition component 1", + "exactJointMembers": [ + 1, + 2 + ], + "archiveSha256": "ef93db862658a721319d8c215e3c20e83a7d6af8ce053071ad1a2eccc2d91a6d", + "archiveBytes": 58350, + "exactDocumentsClosed": 2, + "originalRestored": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "runtimePid": 42780, + "captureOrImageArtifacts": 0, + "reviewerHostCalls": 0, + "limitation": "This confirms preserved fixture/archive and exact cleanup only; no exploded product qualification was attempted." +} diff --git a/docs/exploded-plan-evidence-2026-10-06/adversary-native-attempt2-review.json b/docs/exploded-plan-evidence-2026-10-06/adversary-native-attempt2-review.json new file mode 100644 index 0000000000000000000000000000000000000000..8e15ac7543fb99a2110315f534bb33c3e8b5fe52 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/adversary-native-attempt2-review.json @@ -0,0 +1,44 @@ +{ + "audit": "PASS", + "classification": "EXPLODED_PLAN_FUNCTION_NATIVE_API_PASS", + "reportSha256": "c5c0450da2fb66af1f6336a00f91f9b19da248b97058b92247a114dad01332bb", + "runnerSha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51", + "productSourceSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "rawCallCount": 70, + "verifiedSourceHashes": 15, + "passedChecks": 16, + "exactGeneratedProbeCalls": 1, + "cases": [ + "explode", + "assemble", + "wrong-session", + "stale-revision" + ], + "independentPosesVerified": 60, + "modelJointWitnessUnchanged": true, + "bomUnchangedAndArchiveRoundtrip": true, + "archiveSha256": "0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504", + "archiveBytes": 58578, + "exactDocumentsClosed": 2, + "originalRestored": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "bridgeProcessPid": 42780, + "captureOrImageArtifacts": 0, + "reviewerHostCalls": 0, + "limitations": [ + "Qualification is frozen module function/native API only; installed public route NOT_RUN.", + "No native occurrence movement, graphics, rendering, storyboard, trail, video or collision-free assembly/disassembly proof.", + "Native attempt1 FAIL remains preserved; its runner owner assumption was corrected, not relabeled as product acceptance." + ] +} diff --git a/docs/exploded-plan-evidence-2026-10-06/adversary-runner-r3-review.json b/docs/exploded-plan-evidence-2026-10-06/adversary-runner-r3-review.json new file mode 100644 index 0000000000000000000000000000000000000000..9a24d6e30f9097900193361bd8a4db09aa8a0fc7 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/adversary-runner-r3-review.json @@ -0,0 +1,101 @@ +{ + "verdict": "CLEAR_SOURCE_OFFLINE", + "candidate": "/home/adom/project/research/fusion-roadmap-build-2026-10-02/exploded-view-preparation/native-runner-r3", + "sourceSha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51", + "testSha256": "bff3214a9ad531a0b7aecf8e39b081a9236a34bc2340f4fe2bb8dad51627f39d", + "manifest": { + "status": "SOURCE_FROZEN_NATIVE_PENDING", + "supersedes": "native-runner-r2 (unchanged; original native failure preserved)", + "scopeChange": "Only fixture oracle: measured shared Carrier joint owner with exact member/API-equality links. Product and host behavior unchanged.", + "hostExecutor": "root only after independent review", + "noImages": true, + "installedPublicRoute": "NOT_RUN", + "offlineTests": { + "pass": 27, + "fail": 0, + "logSha256": "04b9714513cea795fa0694c2f9e1b3388f5a9683085330dc3df04948c740b5cf" + }, + "productSourceSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "files": [ + { + "path": "exploded_qualification.py", + "sha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51", + "bytes": 28783 + }, + { + "path": "test_exploded_qualification.py", + "sha256": "bff3214a9ad531a0b7aecf8e39b081a9236a34bc2340f4fe2bb8dad51627f39d", + "bytes": 16474 + }, + { + "path": "NATIVE-RUNNER.md", + "sha256": "df2bb82b2fac96af94e0febb0ee6934d6d8cf3f0f70f7581769ca4f239136f25", + "bytes": 6217 + }, + { + "path": "fixtures/native-initial-witness.json", + "sha256": "41aab34118c2c70b0334a939297fe0a9ba88437a9ce28fd93520407b93c3c649", + "bytes": 26171 + }, + { + "path": "fixtures/provenance.json", + "sha256": "0abde04354abb3fee4c27ee2326587b0162456fd36ec7b59664f0d2dedb94d33", + "bytes": 718 + } + ] + }, + "independentProbe": { + "actual_native_witness": "ACCEPTED", + "root_owner": "REFUSED:Fixture rigid joint is not Carrier-owned", + "part_owner": "REFUSED:Fixture rigid joint is not Carrier-owned", + "wrong_joint_address": "REFUSED:Carrier joint inventory address differs", + "foreign_second_carrier_definition": "REFUSED:Rigid owner is not the actual shared Carrier instance definition", + "wrong_repeated_members": "REFUSED:Rigid joint does not attach exact first-carrier children", + "same_member": "REFUSED:Rigid joint does not attach exact first-carrier children", + "duplicate_graph_address": "REFUSED:Independent occurrence addresses duplicate", + "equivalent_member_inventory_order": "ACCEPTED", + "manifest": "PASS", + "fixture_equals_original_raw": "PASS" + }, + "nativeAttempt1Audit": { + "audit": "PASS", + "originalOverall": "FAIL", + "classification": "RUNNER_FIXTURE_OWNER_ASSUMPTION_FAILED_BEFORE_PRODUCT", + "reportSha256": "244acb7213ce92472ca09d7876884177d54b1303164ea519baf0ec2984f3365e", + "rawCallCount": 54, + "verifiedSourceHashes": 13, + "passedChecks": 10, + "productExecuted": false, + "bomQualification": "NOT_RUN", + "observedJointOwner": "shared Carrier definition component 1", + "exactJointMembers": [ + 1, + 2 + ], + "archiveSha256": "ef93db862658a721319d8c215e3c20e83a7d6af8ce053071ad1a2eccc2d91a6d", + "archiveBytes": 58350, + "exactDocumentsClosed": 2, + "originalRestored": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "runtimePid": 42780, + "captureOrImageArtifacts": 0, + "reviewerHostCalls": 0, + "limitation": "This confirms preserved fixture/archive and exact cleanup only; no exploded product qualification was attempted." + }, + "reviewScope": "Narrow fixture-owner correction and exact native evidence audit; no host, source mutations, capture, Shotlog or publication.", + "interpretation": "The original native attempt failed before product invocation on the unproven root-owner fixture assumption. Native evidence places the healthy rigid joint in shared Carrier definition; r3 binds that exact component through both Carrier instance API-equality links and preserves strict members. Original failure is not converted to product PASS.", + "unchanged": "Product function, source pins, lifecycle, uncertainty retention, archive/cleanup and no-image behavior.", + "finalAnythingLeft": "No additional material finding in final narrow pass. Source/offline clearance only; module-native product qualification remains pending and installed route remains NOT_RUN.", + "hostCallsByReviewer": 0 +} diff --git a/docs/exploded-plan-evidence-2026-10-06/adversary-runner-r3-review.md b/docs/exploded-plan-evidence-2026-10-06/adversary-runner-r3-review.md new file mode 100644 index 0000000000000000000000000000000000000000..0644d61a0d89dacac348ac373bc38d94f4b62476 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/adversary-runner-r3-review.md @@ -0,0 +1,11 @@ +# Exploded runner r3 and first native attempt + +**CLEAR for the narrow r3 source correction.** Runner SHA `78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51`; tests SHA `bff3214a9ad531a0b7aecf8e39b081a9236a34bc2340f4fe2bb8dad51627f39d`. All five manifest hashes and sizes match. + +The first native attempt remains FAIL: the runner required root joint ownership, but Fusion stored the joint in the shared Carrier component. The requested first-Carrier members were correct. That root-owner assumption was part of my r2 source review and was not established natively. No exploded product function call or BOM qualification occurred in the failed attempt. + +The independent audit bound all 54 raw request/response receipts, verified 13 source hashes, regenerated every emitted lifecycle script, checked rich native graph equality across F3D reopen, matched the 58,350-byte archive and SHA, and confirmed two exact closures and restoration of the pristine original document. Cleanup PASS is substantiated. No image artifacts or capture requests occurred. Original report SHA `244acb7213ce92472ca09d7876884177d54b1303164ea519baf0ec2984f3365e` is retained. + +R3 binds joint ownership to the measured Carrier definition and both Carrier instances' independent API-equality component links. It retains exact first-Carrier members. Private probes accept the actual saved witness, reject root/Part ownership, wrong inventory address, wrong shared component link, wrong repeated pair, duplicate member and duplicate address, and accept equivalent member/inventory ordering. The test fixture equals the original raw witness. + +Product code and host/lifecycle behavior are unchanged. The final extra pass found no remaining material issue. Root/verifier report 27 focused tests; only targeted private probes were repeated independently. Native product qualification remains pending, and the installed public route, rendering, graphics and physical disassembly remain unqualified. No host actions were taken by this reviewer. diff --git a/docs/exploded-plan-evidence-2026-10-06/adversary-source-review.json b/docs/exploded-plan-evidence-2026-10-06/adversary-source-review.json new file mode 100644 index 0000000000000000000000000000000000000000..cace5c313873c4859c650422d8b437af210e3ab9 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/adversary-source-review.json @@ -0,0 +1,42 @@ +{ + "verdict": "CLEAR_SOURCE_NATIVE_PENDING", + "moduleSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "manifestSha256": "373b7dc11f09f72b44ae651403d414ad73231f9041b5f8e22f94c480f2968cf1", + "frozenAndWorkingFilesVerified": 12, + "independentFrameOracle": { + "status": "PASS", + "seed": 1978, + "scenarios": 30, + "independentlyComposed3DPoses": 840, + "repeatedDefinitions": true, + "frames": [ + "world", + "parent", + "local" + ], + "reverseHomeExact": true, + "sourcePlanOnly": true + }, + "boundaryFaults": { + "status": "PASS", + "checks": [ + "worker/session/unit/time type failures before target native reads", + "configuration change between snapshots refused", + "foreign wrapper despite matching path/token and oversized inventory refused", + "no attribute setters in new module; native calls reviewed as getters/ref/config reads only", + "56 actual registered/schema operations; prior55 untouched; planner registered read-only" + ] + }, + "finalAnythingLeft": "No actionable source defect found. Exact native identity/context/full-tree coverage guards and fixed-home frame policy are coherent. Three-dimensional independent recursive matrix composition matches sampled root matrices, ancestor motion inherited once, repeated definitions remain distinct, and reverse returns exact home arrays. Root-body group is explicitly fixed; presentation labels do not claim engineering BOM item numbers or quantities. No native setter/render/graphics/capture introduced. Unknown source/configuration state fails closed.", + "primarySources": [ + "https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Component_allOccurrences.htm", + "https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_childOccurrences.htm", + "https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_assemblyContext.htm", + "https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Occurrence_transform2.htm" + ], + "limits": [ + "No native or installed-public-route acceptance by reviewer; native wrapper/context semantics still require finite owned-fixture gate.", + "This is numeric translation planning only; no exploded graphics, storyboard, trails, rotation, collision-free disassembly, rendering or video.", + "No host calls, production edits, image captures or Shotlog actions." + ] +} diff --git a/docs/exploded-plan-evidence-2026-10-06/adversary-source-review.md b/docs/exploded-plan-evidence-2026-10-06/adversary-source-review.md new file mode 100644 index 0000000000000000000000000000000000000000..0bbc8972671d94b3c8dbc113d6c87c8a27d0b865 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/adversary-source-review.md @@ -0,0 +1,13 @@ +Exploded-view planning source: CLEAR; native acceptance pending + +Exact module SHA-256 `a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f`. All12 frozen/working manifest files verified. + +Independent 3D oracle passed30 deterministic scenarios and840 full matrices using recursive parent-local4ร—4 multiplication, noncommuting rotations, repeated definitions, world/parent/local translation frames, ordered/simultaneous moves, and exact reverse-home restoration. This oracle does not reuse the product additive world-offset formula. + +Private boundary checks passed worker/session/unit/time refusal before native target access, changed configuration refusal, foreign wrappers with identical path/token refusal, oversized inventory refusal before enumeration, absence of native attribute setters,56 actual registered/schema operations, read-only registration, and unchanged prior55 schemas. + +Final anything-left pass found no actionable source issue. Full tree/context checks, native equality and presentation-only labels are explicit; root bodies remain fixed and no BOM quantity claim is introduced. + +Limits: source/offline review does not prove actual Fusion wrapper/context semantics or installed public routing. This slice plans numeric translations only and creates no graphics, storyboard, trails, rendering or video. No reviewer host calls, production edits, captures or Shotlog uploads. + +See review.json and adjacent independent matrix/boundary probes for hashes and evidence. diff --git a/docs/exploded-plan-evidence-2026-10-06/index.json b/docs/exploded-plan-evidence-2026-10-06/index.json new file mode 100644 index 0000000000000000000000000000000000000000..7783b2e21ac837d37de72bb026905bd7ac2c47a0 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/index.json @@ -0,0 +1,132 @@ +{ + "status": "PASS_FUNCTION_NATIVE", + "installedPublicRoute": "NOT_RUN", + "captures": 0, + "shotlogUploads": 0, + "files": [ + { + "path": "acceptance.json", + "sha256": "f7531bee5a78fb3b81fe7604092a8ae498e77520c3512649855d15cd0ddcf583", + "bytes": 1103 + }, + { + "path": "adversary-CUMULATIVE-REVIEW.json", + "sha256": "92f904bc36de0241be83a62d12445ff3f673970c6474c101316814d2d02596be", + "bytes": 4197 + }, + { + "path": "adversary-CUMULATIVE-REVIEW.md", + "sha256": "380efd9ac231b97b0acf693a29e797355d93a48df953d99e20576d458e049401", + "bytes": 2489 + }, + { + "path": "adversary-native-attempt1-review.json", + "sha256": "1ecd3babe6def2cc99205312e684f0f6efeaaa61f26708f1cf6e749f3e5f609d", + "bytes": 1161 + }, + { + "path": "adversary-native-attempt2-review.json", + "sha256": "b14e5e7c62deac934a31e2b3cd027350dc8c3c5d24bbc88e5b0de957c0940eb8", + "bytes": 1616 + }, + { + "path": "adversary-runner-r3-review.json", + "sha256": "c86b02bf48913ecdcb923d9641b0b6982158a02ad87f793015d16ce3aa9ba3f7", + "bytes": 4792 + }, + { + "path": "adversary-runner-r3-review.md", + "sha256": "7c6c25298d84d4373b0addc3d48ddd254e7e8d7623ef9abb666d053754772486", + "bytes": 2022 + }, + { + "path": "adversary-source-review.json", + "sha256": "c8bb057cb28ab9bb3c87a2a5654f21565b0147d11bb611d17c1edd873c84588d", + "bytes": 2440 + }, + { + "path": "adversary-source-review.md", + "sha256": "2030e0317bfc77d4200694cfa2011af8a29e1c46a847621093ebaa21223c0129", + "bytes": 1496 + }, + { + "path": "native-original-failure-r1.json", + "sha256": "244acb7213ce92472ca09d7876884177d54b1303164ea519baf0ec2984f3365e", + "bytes": 61718, + "scope": "Immutable original failed campaign; product was not invoked; cleanup passed." + }, + { + "path": "native-product-r2.json", + "sha256": "c5c0450da2fb66af1f6336a00f91f9b19da248b97058b92247a114dad01332bb", + "bytes": 644341, + "scope": "Immutable successful campaign report; module-function-native-api only." + }, + { + "path": "runner-r3/NATIVE-RUNNER.md", + "sha256": "df2bb82b2fac96af94e0febb0ee6934d6d8cf3f0f70f7581769ca4f239136f25", + "bytes": 6217 + }, + { + "path": "runner-r3/exploded_qualification.py", + "sha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51", + "bytes": 28783 + }, + { + "path": "runner-r3/fixtures/native-initial-witness.json", + "sha256": "41aab34118c2c70b0334a939297fe0a9ba88437a9ce28fd93520407b93c3c649", + "bytes": 26171 + }, + { + "path": "runner-r3/fixtures/provenance.json", + "sha256": "0abde04354abb3fee4c27ee2326587b0162456fd36ec7b59664f0d2dedb94d33", + "bytes": 718 + }, + { + "path": "runner-r3/manifest.json", + "sha256": "2cef2f9a6a6208c1e81ec7fe91db5c645a5079a404e638c5e78c670652a3b895", + "bytes": 1453 + }, + { + "path": "runner-r3/test_exploded_qualification.py", + "sha256": "bff3214a9ad531a0b7aecf8e39b081a9236a34bc2340f4fe2bb8dad51627f39d", + "bytes": 16474 + }, + { + "path": "source-manifest-r2.json", + "sha256": "92e118421de1ca87dd332d53c64fbbe99fc632cd392a580b234c4270e2276e20", + "bytes": 2521, + "scope": "Historical freeze before native execution; current native status is acceptance.json." + }, + { + "path": "source-root-validation.json", + "sha256": "cba2135651801fe27ca7177ea6fe375a242b01bde081807b9d06ce48de3a9329", + "bytes": 574, + "scope": "Historical source-only gate with native pending; current native status is acceptance.json." + }, + { + "path": "verifier-audit.py", + "sha256": "6457200cfd48fb142d7a6442fa393ea8b93a768765cb8d051ae29066ee2c85b5", + "bytes": 15852 + }, + { + "path": "verifier-docs-review.json", + "sha256": "dac381d06ae5a71aa44a2e240c72528666fe9bb0f70377ba34cb574491bb2487", + "bytes": 1493 + }, + { + "path": "verifier-native-acceptance.json", + "sha256": "598f29a0bcc988ecbb6750ecacd96b85e6c05bafb2e84f28cd7c975711de4964", + "bytes": 3271 + }, + { + "path": "verifier-native-acceptance.md", + "sha256": "f81a503e52da67f293a0a435d474bbfdf57ddf3e986a4301731227d22a0fe23c", + "bytes": 2145 + }, + { + "path": "windows-build.json", + "sha256": "681f88b0dbe234d225e153d38a7e72cf3680332f7557b52a989231b3fb84ff3d", + "bytes": 46256 + } + ] +} diff --git a/docs/exploded-plan-evidence-2026-10-06/native-original-failure-r1.json b/docs/exploded-plan-evidence-2026-10-06/native-original-failure-r1.json new file mode 100644 index 0000000000000000000000000000000000000000..6cd37cef08cb213103e6c7f41fc19667899fa3ae --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/native-original-failure-r1.json @@ -0,0 +1,2122 @@ +{ + "runId": "20261006T164512Z-bba4be08066841638a13462a604f0779", + "target": "adom_drew2", + "host": "ADOM_DREW2", + "native": "FAIL", + "cleanup": "PASS", + "visual": { + "status": "NOT_REQUESTED", + "reason": "This diagnostic forbids images; no visual acceptance claim." + }, + "overall": "FAIL", + "checks": [ + { + "label": "Exploded source fixture complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 10, + "unknown": [] + } + }, + { + "label": "Exploded source fixture native volume", + "status": "PASS", + "evidence": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-45-26-782", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + } + }, + { + "label": "Exploded source fixture independent instance volume", + "status": "PASS", + "evidence": 10000.0 + }, + { + "label": "Exploded source fixture native instance count", + "status": "PASS", + "evidence": 5 + }, + { + "label": "Exploded source fixture public and native physical properties", + "status": "PASS", + "evidence": { + "area": 4600.0, + "averageDensity": 2.7000000000000004e-06, + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "entity": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:6506e331-9f1e-4ba4-877a-322c9a53d967", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "bc835a54576ea7e4506e9f12d10b890eec5ca737c4ae8ccf92d5db2b95f5ad20", + "rootComponentId": "710ee7be-e709-49d1-af93-e8545db46d94", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.027000000000000003, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:6506e331-9f1e-4ba4-877a-322c9a53d967", + "revision": "bc835a54576ea7e4506e9f12d10b890eec5ca737c4ae8ccf92d5db2b95f5ad20" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 10000.0 + } + }, + { + "label": "F3D preserves full independent model and attachment graph", + "status": "PASS", + "evidence": { + "bytes": 58350, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T164512Z-bba4be08066841638a13462a604f0779/01-exploded_diagnostic-d9af0244.f3d", + "sha256": "ef93db862658a721319d8c215e3c20e83a7d6af8ce053071ad1a2eccc2d91a6d" + } + }, + { + "label": "Original documents restored", + "status": "PASS", + "evidence": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "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.12.0-dev.5", + "installedVersion": "1.12.0-dev.8", + "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-05T21:01:31.6721740Z", + "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.8", + "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.8", + "pyThreads": 4 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 42780, + "port": 50618 + } + } + ], + "artifacts": [ + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/artifacts/01-exploded_diagnostic-d9af0244.f3d", + "sha256": "ef93db862658a721319d8c215e3c20e83a7d6af8ce053071ad1a2eccc2d91a6d", + "bytes": 58350, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T164512Z-bba4be08066841638a13462a604f0779/01-exploded_diagnostic-d9af0244.f3d", + "fixture": "01-exploded_diagnostic" + } + ], + "fixtures": [ + { + "name": "01-exploded_diagnostic", + "status": "FAIL" + } + ], + "requestedFixtures": [ + "01-exploded_diagnostic" + ], + "limitations": [ + "Module function only; no installed route, native graphics, storyboard, images, collision or physically valid disassembly claim.", + "Fixture-specific independent analytic matrices and rigid attachment graph; current-session references are not replayed after reopening." + ], + "diagnosticSources": [ + { + "name": "ralph_jobs.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2" + }, + { + "name": "probe/read_scene_probe.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/probe/read_scene_probe.py", + "sha256": "bc2bcf78675f28151faa4ab0c67276e553792cc0c6c206fad98718219e02814c" + }, + { + "name": "probe/test_read_scene_probe.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/probe/test_read_scene_probe.py", + "sha256": "8df35f06355717a0c8bfd64b66a951a4a349b9257aff0b14ff1db7a02edb8ba4" + }, + { + "name": "probe/READONLY-PROBE.md", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/probe/READONLY-PROBE.md", + "sha256": "01f33dde1a9bfa821b308a91d0889cadce7c6098af73cdcfbe98e66bc527ff41" + }, + { + "name": "witness/ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/witness/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71" + }, + { + "name": "witness/ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/witness/ralph_assemblies.py", + "sha256": "9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903" + }, + { + "name": "product/exploded_view.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/product/exploded_view.py", + "sha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f" + }, + { + "name": "runner/exploded_qualification.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/runner/exploded_qualification.py", + "sha256": "83b099943c06be3d08f9acc4faf05d3b7373e1454bdf3bb818babc015e6a913a" + }, + { + "name": "runner/test_exploded_qualification.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/runner/test_exploded_qualification.py", + "sha256": "3609d9d0abdea7c0b2a8f5a836f974d094a70e8216afceb42fdeb7812d99ff4e" + }, + { + "name": "diagnostic_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/diagnostic-sources-20261006T164512Z-bba4be08066841638a13462a604f0779/diagnostic_scene.py", + "sha256": "bad536a1d0159eb5e2426e5e671510bc3e0178aee80866f477152f43c3b02073" + } + ], + "acceptanceScope": { + "productFunction": "REQUESTED", + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "images": false, + "archiveModelGraph": "PASS" + }, + "probeAttempted": false, + "baseline": { + "state": { + "_hint": "Fusion is clear. The screenshot shows the current surface - this is the verb to render any fusion_show_* result (they open in the background by design).", + "_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.", + "activeDocument": "Untitled", + "addinResponding": true, + "blockingDialogs": [], + "dialogs": [], + "drivingBadge": { + "active": false, + "enabled": true, + "idleShedSeconds": 300, + "lastDrivingVerbAt": 1791303770.4822197, + "lastError": null + }, + "durationMs": 246, + "error": "", + "focusEvents": [], + "hwnd": 4658928, + "mainThreadBusy": null, + "output": "{\"running\":true,\"activeDocument\":\"Untitled\",\"mainThreadBusy\":null,\"blockingDialogs\":[],\"screenshot\":null}", + "rect": { + "bottom": 1549, + "height": 1549, + "left": -11, + "right": 2572, + "top": 0, + "width": 2583 + }, + "running": true, + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60, + "timings": { + "launch": { + "cold": { + "count": 10, + "lastAt": 1791234147, + "p50": 41.1, + "p90": 216.2 + }, + "warm": { + "count": 2, + "lastAt": 1791230617, + "p50": 0.0, + "p90": 1.0 + } + }, + "verb:activate_document": { + "any": { + "count": 3, + "lastAt": 1789145672, + "p50": 3.1, + "p90": 5.6 + } + }, + "verb:addin_status": { + "any": { + "count": 3, + "lastAt": 1788899767, + "p50": 2.0, + "p90": 2.0 + } + }, + "verb:aps_browse": { + "any": { + "count": 4, + "lastAt": 1789143968, + "p50": 1.9, + "p90": 2.3 + } + }, + "verb:aps_file_info": { + "any": { + "count": 10, + "lastAt": 1789144745, + "p50": 34.8, + "p90": 36.2 + } + }, + "verb:aps_get_browser": { + "any": { + "count": 1, + "lastAt": 1787944552, + "p50": 0.0, + "p90": 0.0 + } + }, + "verb:aps_open": { + "any": { + "count": 5, + "lastAt": 1788196241, + "p50": 0.2, + "p90": 37.2 + } + }, + "verb:aps_search": { + "any": { + "count": 10, + "lastAt": 1789684900, + "p50": 35.7, + "p90": 65.6 + } + }, + "verb:aps_signin": { + "any": { + "count": 2, + "lastAt": 1787949063, + "p50": 0.4, + "p90": 1.1 + } + }, + "verb:aps_status": { + "any": { + "count": 10, + "lastAt": 1788899782, + "p50": 0.0, + "p90": 0.0 + } + }, + "verb:assembly_bom": { + "any": { + "count": 3, + "lastAt": 1790955710, + "p50": 0.1, + "p90": 0.6 + } + }, + "verb:check_dialogs": { + "any": { + "count": 1, + "lastAt": 1788195388, + "p50": 1.4, + "p90": 1.4 + } + }, + "verb:close_document": { + "any": { + "count": 9, + "lastAt": 1789145809, + "p50": 6.7, + "p90": 46.1 + } + }, + "verb:describe": { + "any": { + "count": 3, + "lastAt": 1789144008, + "p50": 0.0, + "p90": 0.0 + } + }, + "verb:document_info": { + "any": { + "count": 10, + "lastAt": 1791303733, + "p50": 0.1, + "p90": 0.1 + } + }, + "verb:eagle_import_status": { + "any": { + "count": 1, + "lastAt": 1790978404, + "p50": 1.8, + "p90": 1.8 + } + }, + "verb:electron_run": { + "any": { + "count": 10, + "lastAt": 1788456727, + "p50": 6.3, + "p90": 13.3 + } + }, + "verb:export_cloud_file": { + "any": { + "count": 4, + "lastAt": 1789685179, + "p50": 223.4, + "p90": 290.3 + } + }, + "verb:export_eagle_source": { + "any": { + "count": 10, + "lastAt": 1788456713, + "p50": 1.7, + "p90": 2.2 + } + }, + "verb:export_f3d": { + "any": { + "count": 2, + "lastAt": 1790955227, + "p50": 3.7, + "p90": 4.4 + } + }, + "verb:export_obj": { + "any": { + "count": 2, + "lastAt": 1787944913, + "p50": 0.7, + "p90": 0.7 + } + }, + "verb:export_step": { + "any": { + "count": 10, + "lastAt": 1788456783, + "p50": 5.5, + "p90": 7.9 + } + }, + "verb:get_app_state": { + "any": { + "count": 10, + "lastAt": 1791234147, + "p50": 1.3, + "p90": 3.6 + } + }, + "verb:get_design_info": { + "any": { + "count": 5, + "lastAt": 1788900070, + "p50": 5.2, + "p90": 10.8 + } + }, + "verb:help": { + "any": { + "count": 1, + "lastAt": 1788194522, + "p50": 1.0, + "p90": 1.0 + } + }, + "verb:kill": { + "any": { + "count": 1, + "lastAt": 1787833443, + "p50": 66.9, + "p90": 66.9 + } + }, + "verb:list_cloud_files": { + "any": { + "count": 1, + "lastAt": 1787832975, + "p50": 15.8, + "p90": 15.8 + } + }, + "verb:mcp_call": { + "any": { + "count": 5, + "lastAt": 1788455586, + "p50": 0.0, + "p90": 1.8 + } + }, + "verb:mech_capabilities": { + "any": { + "count": 10, + "lastAt": 1791303735, + "p50": 0.1, + "p90": 0.1 + } + }, + "verb:mech_operation_status": { + "any": { + "count": 10, + "lastAt": 1791229196, + "p50": 0.1, + "p90": 0.1 + } + }, + "verb:mechanical": { + "any": { + "count": 10, + "lastAt": 1791303751, + "p50": 0.8, + "p90": 1.0 + } + }, + "verb:open_by_urn": { + "any": { + "count": 10, + "lastAt": 1789144985, + "p50": 43.4, + "p90": 59.1 + } + }, + "verb:open_cloud_file": { + "any": { + "count": 8, + "lastAt": 1789666231, + "p50": 24.2, + "p90": 87.5 + } + }, + "verb:open_design": { + "any": { + "count": 3, + "lastAt": 1790955721, + "p50": 5.9, + "p90": 6.1 + } + }, + "verb:open_lbr": { + "any": { + "count": 2, + "lastAt": 1788195396, + "p50": 2.7, + "p90": 5.0 + } + }, + "verb:physical_properties": { + "any": { + "count": 3, + "lastAt": 1790955710, + "p50": 0.1, + "p90": 0.2 + } + }, + "verb:readiness": { + "any": { + "count": 5, + "lastAt": 1788900108, + "p50": 14.9, + "p90": 56.9 + } + }, + "verb:restart_for_addin": { + "any": { + "count": 10, + "lastAt": 1791234174, + "p50": 0.0, + "p90": 125.2 + } + }, + "verb:run_modeling_script": { + "any": { + "count": 10, + "lastAt": 1791303772, + "p50": 1.7, + "p90": 2.0 + } + }, + "verb:search_cloud_files": { + "any": { + "count": 3, + "lastAt": 1789143642, + "p50": 0.0, + "p90": 0.4 + } + }, + "verb:show_2d_board": { + "any": { + "count": 2, + "lastAt": 1788456656, + "p50": 26.6, + "p90": 34.9 + } + }, + "verb:show_3d_board": { + "any": { + "count": 6, + "lastAt": 1788456760, + "p50": 10.2, + "p90": 19.6 + } + }, + "verb:signin": { + "any": { + "count": 1, + "lastAt": 1788899909, + "p50": 56.1, + "p90": 56.1 + } + }, + "verb:start": { + "any": { + "count": 7, + "lastAt": 1791230617, + "p50": 57.4, + "p90": 64.9 + } + }, + "verb:status": { + "any": { + "count": 2, + "lastAt": 1788194217, + "p50": 0.8, + "p90": 1.0 + } + }, + "verb:stop": { + "any": { + "count": 1, + "lastAt": 1787831926, + "p50": 19.7, + "p90": 19.7 + } + }, + "verb:window_info": { + "any": { + "count": 10, + "lastAt": 1788899841, + "p50": 7.2, + "p90": 10.9 + } + } + }, + "timingsSentence": "on this machine Fusion starts in cold 41s, warm 0s (measured)", + "title": "Untitled - Autodesk Fusion " + }, + "addin": { + "_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.", + "addinStale": false, + "addinVersion": "1.12.0-dev.8", + "busy": false, + "durationMs": 70, + "error": "", + "expectedAddinVersion": "1.12.0-dev.8", + "output": "{\"busy\":false,\"version\":\"1.12.0-dev.8\",\"pyThreads\":4,\"addinVersion\":\"1.12.0-dev.8\",\"expectedAddinVersion\":\"1.12.0-dev.8\",\"addinStale\":false}", + "pyThreads": 4, + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60, + "version": "1.12.0-dev.8" + }, + "runtime": { + "name": "fusion360", + "devPinned": true, + "paused": false, + "runningVersion": "1.12.0-dev.5", + "installedVersion": "1.12.0-dev.8", + "entryMismatch": false, + "instanceCount": 1 + }, + "liveIdentity": { + "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-05T21:01:31.6721740Z", + "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.8", + "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.8", + "pyThreads": 4 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 42780, + "port": 50618 + }, + "preferences": { + "activeTheme": "darkblue", + "cameraPivot": true, + "gestureNav": true, + "invertScrollZoom": true, + "lengthUnit": "mm", + "modelingOrientation": "zup", + "orbitScheme": "fusion360", + "theme": "device" + }, + "native": { + "activeCommand": "SelectCommand", + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "activeProductType": "DesignProductType", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "fusionVersion": "2705.1.30", + "host": "adom_drew2", + "platform": "Windows", + "temporaryDirectory": "C:/Users/drew/AppData/Local/Temp" + } + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "failure": { + "type": "ValueError", + "message": "Fixture rigid joint is not root-owned", + "fixture": "01-exploded_diagnostic" + }, + "cleanupEvidence": [ + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:6506e331-9f1e-4ba4-877a-322c9a53d967", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:6506e331-9f1e-4ba4-877a-322c9a53d967", + "success": true + } + }, + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:a750bb93-1ba6-4782-8a0c-2b699ce95586", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:a750bb93-1ba6-4782-8a0c-2b699ce95586", + "success": true + } + } + ], + "cleanupLatest": { + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:6506e331-9f1e-4ba4-877a-322c9a53d967": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:6506e331-9f1e-4ba4-877a-322c9a53d967", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:6506e331-9f1e-4ba4-877a-322c9a53d967", + "success": true + } + }, + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:a750bb93-1ba6-4782-8a0c-2b699ce95586": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:a750bb93-1ba6-4782-8a0c-2b699ce95586", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:a750bb93-1ba6-4782-8a0c-2b699ce95586", + "success": true + } + } + }, + "finalRuntimeIdentity": { + "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-05T21:01:31.6721740Z", + "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.8", + "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.8", + "pyThreads": 4 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 42780, + "port": 50618 + }, + "finalHost": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + }, + "counts": { + "PASS": 10, + "FAIL": 0 + } +} diff --git a/docs/exploded-plan-evidence-2026-10-06/native-product-r2.json b/docs/exploded-plan-evidence-2026-10-06/native-product-r2.json new file mode 100644 index 0000000000000000000000000000000000000000..da22e109bfcdac8e30836f6fbcc0d899d56e5675 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/native-product-r2.json @@ -0,0 +1,20074 @@ +{ + "runId": "20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c", + "target": "adom_drew2", + "host": "ADOM_DREW2", + "native": "PASS", + "cleanup": "PASS", + "visual": { + "status": "NOT_REQUESTED", + "reason": "This diagnostic forbids images; no visual acceptance claim." + }, + "overall": "PASS_DIAGNOSTIC", + "checks": [ + { + "label": "Exploded source fixture complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 10, + "unknown": [] + } + }, + { + "label": "Exploded source fixture native volume", + "status": "PASS", + "evidence": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + } + }, + { + "label": "Exploded source fixture independent instance volume", + "status": "PASS", + "evidence": 10000.0 + }, + { + "label": "Exploded source fixture native instance count", + "status": "PASS", + "evidence": 5 + }, + { + "label": "Exploded source fixture public and native physical properties", + "status": "PASS", + "evidence": { + "area": 4600.0, + "averageDensity": 2.7000000000000004e-06, + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "entity": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "rootComponentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.027000000000000003, + "materialBasis": "Fusion assigned/default material; supplier provenance does not certify modeled material density", + "scope": "component_subtree", + "space": "component", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 10000.0 + } + }, + { + "label": "Native fixture has expected hierarchy, physical homes and rigid graph", + "status": "PASS", + "evidence": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + } + }, + { + "label": "Whole independent model and attachment graph unchanged", + "status": "PASS", + "evidence": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + } + }, + { + "label": "Public BOM definitions, tree and physical totals unchanged", + "status": "PASS", + "evidence": { + "calculationAccuracy": "high", + "complete": true, + "configuration": { + "configured": false, + "graphComplete": true, + "isConfiguration": false, + "rowId": null, + "rowName": null, + "scope": "current active configuration only", + "tableId": null + }, + "configurationSuppression": [], + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 2, + "componentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "rootComponentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Untitled" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "EX-ROOT" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + }, + "parentPath": "", + "path": "Carrier:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + }, + "parentPath": "Carrier:1", + "path": "Carrier:1+Part:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PsQ1CMQxEJSbJApbsxElsMcRnhdjJFx01s7ACY9AhxqBnAkS+fo+uOZ/eST4MHGKggFMUZTrakxIuh9fy/SzH++l5vj5u70nEkErI0rKk6NBrQ2BVBRURMHH1RLKi5Z0sXLaDINtKwJkaNJmd7jYKlp7ZeeO6jpVMGqxWEjCNCoI0wCqq984piv7/ybH2PlxAkjZgywO0pAqjJmuZIsbq28YfhITh/u8AAAA=" + }, + "parentPath": "Carrier:1", + "path": "Carrier:1+Part:2" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OwQlCMQyGwUmyQCDta9oEh3iukLSvePPsLK7gGN7EMbw7gRjxLoGf8PPxJQQFMiSgmJQltvRrKpx2j/X9WvfXw/14vl2eQWRYKrAYy5I7jmaERVVRRQRduvYlySTnsAQ5N27JUscmswfphDI5QgpX4+aW2/9btZKSiiKNGobmA52K4TIydZPNU+vf3z8PgI1qxwAAAA==" + }, + "parentPath": "", + "path": "Carrier:2" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPwQlCMRBEwUrSwMJmk83uYhHfFpLND948W4stWIY3sQzvViDm8wuQgWEY3mEGQw4UYsCpSDpT3JsSLofX8v0sx/vpeb4+bu9JUEglsFbWRA5dKkI2MzBVhaZunqIObLyTY2WJNTqIDp9kQ9DB0zRzqSytkmxcljEqWgZiNMhEHbSNDlFyEcOmOv5scpTeV1fQZBVy4xWsJIFVUqscCUl8+/gDo47s4u8AAAA=" + }, + "parentPath": "Carrier:2", + "path": "Carrier:2+Part:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + }, + "parentPath": "Carrier:2", + "path": "Carrier:2+Part:2" + } + ], + "partCount": 2, + "parts": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "componentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "occurrencePaths": [ + "" + ], + "partNumber": "EX-ROOT", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0162, + "unitVolume": 6000.0 + }, + { + "attributes": {}, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "occurrencePaths": [ + "Carrier:1+Part:1", + "Carrier:1+Part:2", + "Carrier:2+Part:1", + "Carrier:2+Part:2" + ], + "partNumber": "EX-PART", + "quantity": 4, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + } + ], + "physical": { + "bodyInstances": 5, + "mass": 0.027000000000000003, + "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": 10000.0 + }, + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "totalPurchasingInstances": 5, + "units": { + "mass": "kg", + "volume": "mm3" + } + } + }, + { + "label": "Explode, reverse, frame, inheritance and exact refusal oracles", + "status": "PASS", + "evidence": { + "scope": "module-function-native-api", + "cases": [ + { + "playback": "explode", + "instances": 6, + "samples": 5, + "posesVerified": 30, + "scope": "module-function-native-api" + }, + { + "playback": "assemble", + "instances": 6, + "samples": 5, + "posesVerified": 30, + "scope": "module-function-native-api" + }, + { + "case": "wrong-session", + "refusal": "session_mismatch" + }, + { + "case": "stale-revision", + "refusal": "stale_revision" + } + ], + "installedPublicRoute": "NOT_RUN", + "images": false + } + }, + { + "label": "F3D preserves full independent model and attachment graph", + "status": "PASS", + "evidence": { + "bytes": 58578, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/01-exploded_diagnostic-4431f3d4.f3d", + "sha256": "0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504" + } + }, + { + "label": "Reopened F3D preserves BOM quantities, hierarchy and physical totals", + "status": "PASS", + "evidence": { + "calculationAccuracy": "high", + "complete": true, + "configuration": { + "configured": false, + "graphComplete": true, + "isConfiguration": false, + "rowId": null, + "rowName": null, + "scope": "current active configuration only", + "tableId": null + }, + "configurationSuppression": [], + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 2, + "componentId": "9dd45d00-4587-45c5-b8c4-cb7f881d941c", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "rootComponentId": "9dd45d00-4587-45c5-b8c4-cb7f881d941c", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Untitled" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Untitled", + "partNumber": "EX-ROOT" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "9e1b5476-1fec-4e40-bfeb-dbdbcc8e5df5", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + }, + "parentPath": "", + "path": "Carrier:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "b2c68e7d-3344-4fbe-ad1e-8585b66d0cf0", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + }, + "parentPath": "Carrier:1", + "path": "Carrier:1+Part:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "b2c68e7d-3344-4fbe-ad1e-8585b66d0cf0", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:2", + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PsQ1CMQxEJSbJApbsxElsMcRnhdjJFx01s7ACY9AhxqBnAkS+fo+uOZ/eST4MHGKggFMUZTrakxIuh9fy/SzH++l5vj5u70nEkErI0rKk6NBrQ2BVBRURMHH1RLKi5Z0sXLaDINtKwJkaNJmd7jYKlp7ZeeO6jpVMGqxWEjCNCoI0wCqq984piv7/ybH2PlxAkjZgywO0pAqjJmuZIsbq28YfhITh/u8AAAA=" + }, + "parentPath": "Carrier:1", + "path": "Carrier:1+Part:2" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "9e1b5476-1fec-4e40-bfeb-dbdbcc8e5df5", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2", + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OwQlCMQyGwUmyQCDta9oEh3iukLSvePPsLK7gGN7EMbw7gRjxLoGf8PPxJQQFMiSgmJQltvRrKpx2j/X9WvfXw/14vl2eQWRYKrAYy5I7jmaERVVRRQRduvYlySTnsAQ5N27JUscmswfphDI5QgpX4+aW2/9btZKSiiKNGobmA52K4TIydZPNU+vf3z8PgI1qxwAAAA==" + }, + "parentPath": "", + "path": "Carrier:2" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "b2c68e7d-3344-4fbe-ad1e-8585b66d0cf0", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:1", + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPwQlCMRBEwUrSwMJmk83uYhHfFpLND948W4stWIY3sQzvViDm8wuQgWEY3mEGQw4UYsCpSDpT3JsSLofX8v0sx/vpeb4+bu9JUEglsFbWRA5dKkI2MzBVhaZunqIObLyTY2WJNTqIDp9kQ9DB0zRzqSytkmxcljEqWgZiNMhEHbSNDlFyEcOmOv5scpTeV1fQZBVy4xWsJIFVUqscCUl8+/gDo47s4u8AAAA=" + }, + "parentPath": "Carrier:2", + "path": "Carrier:2+Part:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "b2c68e7d-3344-4fbe-ad1e-8585b66d0cf0", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + }, + "parentPath": "Carrier:2", + "path": "Carrier:2+Part:2" + } + ], + "partCount": 2, + "parts": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "componentId": "9dd45d00-4587-45c5-b8c4-cb7f881d941c", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Untitled", + "occurrencePaths": [ + "" + ], + "partNumber": "EX-ROOT", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0162, + "unitVolume": 6000.0 + }, + { + "attributes": {}, + "componentId": "b2c68e7d-3344-4fbe-ad1e-8585b66d0cf0", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "occurrencePaths": [ + "Carrier:1+Part:1", + "Carrier:1+Part:2", + "Carrier:2+Part:1", + "Carrier:2+Part:2" + ], + "partNumber": "EX-PART", + "quantity": 4, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + } + ], + "physical": { + "bodyInstances": 5, + "mass": 0.027000000000000003, + "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": 10000.0 + }, + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "revision": "28a5d914df42603db9703acdb730a48e7a50f59c057615be93a67d1bd637ebc4" + }, + "totalPurchasingInstances": 5, + "units": { + "mass": "kg", + "volume": "mm3" + } + } + }, + { + "label": "Original documents restored", + "status": "PASS", + "evidence": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "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.12.0-dev.5", + "installedVersion": "1.12.0-dev.8", + "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-05T21:01:31.6721740Z", + "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.8", + "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.8", + "pyThreads": 4 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 42780, + "port": 50618 + } + }, + { + "label": "Exact one source/reopen pair and one retained F3D artifact", + "status": "PASS", + "evidence": { + "documentIds": [ + "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df" + ], + "artifacts": [ + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/artifacts/01-exploded_diagnostic-4431f3d4.f3d", + "sha256": "0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504", + "bytes": 58578, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/01-exploded_diagnostic-4431f3d4.f3d", + "fixture": "01-exploded_diagnostic" + } + ], + "cleanupLatest": { + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "success": true + } + }, + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "success": true + } + } + } + } + } + ], + "artifacts": [ + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/artifacts/01-exploded_diagnostic-4431f3d4.f3d", + "sha256": "0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504", + "bytes": 58578, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/01-exploded_diagnostic-4431f3d4.f3d", + "fixture": "01-exploded_diagnostic" + } + ], + "fixtures": [ + { + "name": "01-exploded_diagnostic", + "status": "PASS", + "checks": 11 + } + ], + "requestedFixtures": [ + "01-exploded_diagnostic" + ], + "limitations": [ + "Module function only; no installed route, native graphics, storyboard, images, collision or physically valid disassembly claim.", + "Fixture-specific independent analytic matrices and rigid attachment graph; current-session references are not replayed after reopening." + ], + "diagnosticSources": [ + { + "name": "ralph_jobs.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2" + }, + { + "name": "probe/read_scene_probe.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/probe/read_scene_probe.py", + "sha256": "bc2bcf78675f28151faa4ab0c67276e553792cc0c6c206fad98718219e02814c" + }, + { + "name": "probe/test_read_scene_probe.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/probe/test_read_scene_probe.py", + "sha256": "8df35f06355717a0c8bfd64b66a951a4a349b9257aff0b14ff1db7a02edb8ba4" + }, + { + "name": "probe/READONLY-PROBE.md", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/probe/READONLY-PROBE.md", + "sha256": "01f33dde1a9bfa821b308a91d0889cadce7c6098af73cdcfbe98e66bc527ff41" + }, + { + "name": "witness/ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/witness/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71" + }, + { + "name": "witness/ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/witness/ralph_assemblies.py", + "sha256": "9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903" + }, + { + "name": "product/exploded_view.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/product/exploded_view.py", + "sha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f" + }, + { + "name": "runner/exploded_qualification.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/runner/exploded_qualification.py", + "sha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51" + }, + { + "name": "runner/test_exploded_qualification.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/runner/test_exploded_qualification.py", + "sha256": "bff3214a9ad531a0b7aecf8e39b081a9236a34bc2340f4fe2bb8dad51627f39d" + }, + { + "name": "runner/fixtures/native-initial-witness.json", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/runner/fixtures/native-initial-witness.json", + "sha256": "41aab34118c2c70b0334a939297fe0a9ba88437a9ce28fd93520407b93c3c649" + }, + { + "name": "runner/fixtures/provenance.json", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/runner/fixtures/provenance.json", + "sha256": "0abde04354abb3fee4c27ee2326587b0162456fd36ec7b59664f0d2dedb94d33" + }, + { + "name": "diagnostic_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/diagnostic-sources-20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/diagnostic_scene.py", + "sha256": "bad536a1d0159eb5e2426e5e671510bc3e0178aee80866f477152f43c3b02073" + } + ], + "acceptanceScope": { + "productFunction": "PASS", + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "images": false, + "archiveModelGraph": "PASS" + }, + "probeAttempted": true, + "baseline": { + "state": { + "_hint": "Fusion is clear. The screenshot shows the current surface - this is the verb to render any fusion_show_* result (they open in the background by design).", + "_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.", + "activeDocument": "Untitled", + "addinResponding": true, + "blockingDialogs": [], + "dialogs": [], + "drivingBadge": { + "active": false, + "enabled": true, + "idleShedSeconds": 300, + "lastDrivingVerbAt": 1791305168.4733202, + "lastError": null + }, + "durationMs": 244, + "error": "", + "focusEvents": [], + "hwnd": 4658928, + "mainThreadBusy": null, + "output": "{\"running\":true,\"activeDocument\":\"Untitled\",\"mainThreadBusy\":null,\"blockingDialogs\":[],\"screenshot\":null}", + "rect": { + "bottom": -31961, + "height": 39, + "left": -32000, + "right": -31763, + "top": -32000, + "width": 237 + }, + "running": true, + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60, + "timings": { + "launch": { + "cold": { + "count": 10, + "lastAt": 1791234147, + "p50": 41.1, + "p90": 216.2 + }, + "warm": { + "count": 2, + "lastAt": 1791230617, + "p50": 0.0, + "p90": 1.0 + } + }, + "verb:activate_document": { + "any": { + "count": 3, + "lastAt": 1789145672, + "p50": 3.1, + "p90": 5.6 + } + }, + "verb:addin_status": { + "any": { + "count": 3, + "lastAt": 1788899767, + "p50": 2.0, + "p90": 2.0 + } + }, + "verb:aps_browse": { + "any": { + "count": 4, + "lastAt": 1789143968, + "p50": 1.9, + "p90": 2.3 + } + }, + "verb:aps_file_info": { + "any": { + "count": 10, + "lastAt": 1789144745, + "p50": 34.8, + "p90": 36.2 + } + }, + "verb:aps_get_browser": { + "any": { + "count": 1, + "lastAt": 1787944552, + "p50": 0.0, + "p90": 0.0 + } + }, + "verb:aps_open": { + "any": { + "count": 5, + "lastAt": 1788196241, + "p50": 0.2, + "p90": 37.2 + } + }, + "verb:aps_search": { + "any": { + "count": 10, + "lastAt": 1789684900, + "p50": 35.7, + "p90": 65.6 + } + }, + "verb:aps_signin": { + "any": { + "count": 2, + "lastAt": 1787949063, + "p50": 0.4, + "p90": 1.1 + } + }, + "verb:aps_status": { + "any": { + "count": 10, + "lastAt": 1788899782, + "p50": 0.0, + "p90": 0.0 + } + }, + "verb:assembly_bom": { + "any": { + "count": 3, + "lastAt": 1790955710, + "p50": 0.1, + "p90": 0.6 + } + }, + "verb:check_dialogs": { + "any": { + "count": 1, + "lastAt": 1788195388, + "p50": 1.4, + "p90": 1.4 + } + }, + "verb:close_document": { + "any": { + "count": 9, + "lastAt": 1789145809, + "p50": 6.7, + "p90": 46.1 + } + }, + "verb:describe": { + "any": { + "count": 3, + "lastAt": 1789144008, + "p50": 0.0, + "p90": 0.0 + } + }, + "verb:document_info": { + "any": { + "count": 10, + "lastAt": 1791305117, + "p50": 0.1, + "p90": 0.1 + } + }, + "verb:eagle_import_status": { + "any": { + "count": 1, + "lastAt": 1790978404, + "p50": 1.8, + "p90": 1.8 + } + }, + "verb:electron_run": { + "any": { + "count": 10, + "lastAt": 1788456727, + "p50": 6.3, + "p90": 13.3 + } + }, + "verb:export_cloud_file": { + "any": { + "count": 4, + "lastAt": 1789685179, + "p50": 223.4, + "p90": 290.3 + } + }, + "verb:export_eagle_source": { + "any": { + "count": 10, + "lastAt": 1788456713, + "p50": 1.7, + "p90": 2.2 + } + }, + "verb:export_f3d": { + "any": { + "count": 2, + "lastAt": 1790955227, + "p50": 3.7, + "p90": 4.4 + } + }, + "verb:export_obj": { + "any": { + "count": 2, + "lastAt": 1787944913, + "p50": 0.7, + "p90": 0.7 + } + }, + "verb:export_step": { + "any": { + "count": 10, + "lastAt": 1788456783, + "p50": 5.5, + "p90": 7.9 + } + }, + "verb:get_app_state": { + "any": { + "count": 10, + "lastAt": 1791305439, + "p50": 1.3, + "p90": 3.6 + } + }, + "verb:get_design_info": { + "any": { + "count": 5, + "lastAt": 1788900070, + "p50": 5.2, + "p90": 10.8 + } + }, + "verb:help": { + "any": { + "count": 1, + "lastAt": 1788194522, + "p50": 1.0, + "p90": 1.0 + } + }, + "verb:kill": { + "any": { + "count": 1, + "lastAt": 1787833443, + "p50": 66.9, + "p90": 66.9 + } + }, + "verb:list_cloud_files": { + "any": { + "count": 1, + "lastAt": 1787832975, + "p50": 15.8, + "p90": 15.8 + } + }, + "verb:mcp_call": { + "any": { + "count": 5, + "lastAt": 1788455586, + "p50": 0.0, + "p90": 1.8 + } + }, + "verb:mech_capabilities": { + "any": { + "count": 10, + "lastAt": 1791305119, + "p50": 0.1, + "p90": 0.1 + } + }, + "verb:mech_operation_status": { + "any": { + "count": 10, + "lastAt": 1791229196, + "p50": 0.1, + "p90": 0.1 + } + }, + "verb:mechanical": { + "any": { + "count": 10, + "lastAt": 1791305152, + "p50": 0.8, + "p90": 1.0 + } + }, + "verb:open_by_urn": { + "any": { + "count": 10, + "lastAt": 1789144985, + "p50": 43.4, + "p90": 59.1 + } + }, + "verb:open_cloud_file": { + "any": { + "count": 8, + "lastAt": 1789666231, + "p50": 24.2, + "p90": 87.5 + } + }, + "verb:open_design": { + "any": { + "count": 3, + "lastAt": 1790955721, + "p50": 5.9, + "p90": 6.1 + } + }, + "verb:open_lbr": { + "any": { + "count": 2, + "lastAt": 1788195396, + "p50": 2.7, + "p90": 5.0 + } + }, + "verb:physical_properties": { + "any": { + "count": 3, + "lastAt": 1790955710, + "p50": 0.1, + "p90": 0.2 + } + }, + "verb:readiness": { + "any": { + "count": 5, + "lastAt": 1788900108, + "p50": 14.9, + "p90": 56.9 + } + }, + "verb:restart_for_addin": { + "any": { + "count": 10, + "lastAt": 1791234174, + "p50": 0.0, + "p90": 125.2 + } + }, + "verb:run_modeling_script": { + "any": { + "count": 10, + "lastAt": 1791305170, + "p50": 1.8, + "p90": 2.1 + } + }, + "verb:search_cloud_files": { + "any": { + "count": 3, + "lastAt": 1789143642, + "p50": 0.0, + "p90": 0.4 + } + }, + "verb:show_2d_board": { + "any": { + "count": 2, + "lastAt": 1788456656, + "p50": 26.6, + "p90": 34.9 + } + }, + "verb:show_3d_board": { + "any": { + "count": 6, + "lastAt": 1788456760, + "p50": 10.2, + "p90": 19.6 + } + }, + "verb:signin": { + "any": { + "count": 1, + "lastAt": 1788899909, + "p50": 56.1, + "p90": 56.1 + } + }, + "verb:start": { + "any": { + "count": 7, + "lastAt": 1791230617, + "p50": 57.4, + "p90": 64.9 + } + }, + "verb:status": { + "any": { + "count": 2, + "lastAt": 1788194217, + "p50": 0.8, + "p90": 1.0 + } + }, + "verb:stop": { + "any": { + "count": 1, + "lastAt": 1787831926, + "p50": 19.7, + "p90": 19.7 + } + }, + "verb:window_info": { + "any": { + "count": 10, + "lastAt": 1788899841, + "p50": 7.2, + "p90": 10.9 + } + } + }, + "timingsSentence": "on this machine Fusion starts in cold 41s, warm 0s (measured)", + "title": "Untitled - Autodesk Fusion " + }, + "addin": { + "_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.", + "addinStale": false, + "addinVersion": "1.12.0-dev.8", + "busy": false, + "durationMs": 63, + "error": "", + "expectedAddinVersion": "1.12.0-dev.8", + "output": "{\"busy\":false,\"version\":\"1.12.0-dev.8\",\"pyThreads\":4,\"addinVersion\":\"1.12.0-dev.8\",\"expectedAddinVersion\":\"1.12.0-dev.8\",\"addinStale\":false}", + "pyThreads": 4, + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60, + "version": "1.12.0-dev.8" + }, + "runtime": { + "name": "fusion360", + "devPinned": true, + "paused": false, + "runningVersion": "1.12.0-dev.5", + "installedVersion": "1.12.0-dev.8", + "entryMismatch": false, + "instanceCount": 1 + }, + "liveIdentity": { + "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-05T21:01:31.6721740Z", + "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.8", + "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.8", + "pyThreads": 4 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 42780, + "port": 50618 + }, + "preferences": { + "activeTheme": "darkblue", + "cameraPivot": true, + "gestureNav": true, + "invertScrollZoom": true, + "lengthUnit": "mm", + "modelingOrientation": "zup", + "orbitScheme": "fusion360", + "theme": "device" + }, + "native": { + "activeCommand": "SelectCommand", + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "activeProductType": "DesignProductType", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "fusionVersion": "2705.1.30", + "host": "adom_drew2", + "platform": "Windows", + "temporaryDirectory": "C:/Users/drew/AppData/Local/Temp" + } + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "bomBefore": { + "calculationAccuracy": "high", + "complete": true, + "configuration": { + "configured": false, + "graphComplete": true, + "isConfiguration": false, + "rowId": null, + "rowName": null, + "scope": "current active configuration only", + "tableId": null + }, + "configurationSuppression": [], + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 2, + "componentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "rootComponentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Untitled" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "EX-ROOT" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + }, + "parentPath": "", + "path": "Carrier:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + }, + "parentPath": "Carrier:1", + "path": "Carrier:1+Part:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PsQ1CMQxEJSbJApbsxElsMcRnhdjJFx01s7ACY9AhxqBnAkS+fo+uOZ/eST4MHGKggFMUZTrakxIuh9fy/SzH++l5vj5u70nEkErI0rKk6NBrQ2BVBRURMHH1RLKi5Z0sXLaDINtKwJkaNJmd7jYKlp7ZeeO6jpVMGqxWEjCNCoI0wCqq984piv7/ybH2PlxAkjZgywO0pAqjJmuZIsbq28YfhITh/u8AAAA=" + }, + "parentPath": "Carrier:1", + "path": "Carrier:1+Part:2" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OwQlCMQyGwUmyQCDta9oEh3iukLSvePPsLK7gGN7EMbw7gRjxLoGf8PPxJQQFMiSgmJQltvRrKpx2j/X9WvfXw/14vl2eQWRYKrAYy5I7jmaERVVRRQRduvYlySTnsAQ5N27JUscmswfphDI5QgpX4+aW2/9btZKSiiKNGobmA52K4TIydZPNU+vf3z8PgI1qxwAAAA==" + }, + "parentPath": "", + "path": "Carrier:2" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPwQlCMRBEwUrSwMJmk83uYhHfFpLND948W4stWIY3sQzvViDm8wuQgWEY3mEGQw4UYsCpSDpT3JsSLofX8v0sx/vpeb4+bu9JUEglsFbWRA5dKkI2MzBVhaZunqIObLyTY2WJNTqIDp9kQ9DB0zRzqSytkmxcljEqWgZiNMhEHbSNDlFyEcOmOv5scpTeV1fQZBVy4xWsJIFVUqscCUl8+/gDo47s4u8AAAA=" + }, + "parentPath": "Carrier:2", + "path": "Carrier:2+Part:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + }, + "parentPath": "Carrier:2", + "path": "Carrier:2+Part:2" + } + ], + "partCount": 2, + "parts": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "componentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "occurrencePaths": [ + "" + ], + "partNumber": "EX-ROOT", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0162, + "unitVolume": 6000.0 + }, + { + "attributes": {}, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "occurrencePaths": [ + "Carrier:1+Part:1", + "Carrier:1+Part:2", + "Carrier:2+Part:1", + "Carrier:2+Part:2" + ], + "partNumber": "EX-PART", + "quantity": 4, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + } + ], + "physical": { + "bodyInstances": 5, + "mass": 0.027000000000000003, + "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": 10000.0 + }, + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "totalPurchasingInstances": 5, + "units": { + "mass": "kg", + "volume": "mm3" + } + }, + "productProbe": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "productQualification": { + "cases": [ + { + "after": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + }, + "args": { + "op": "exploded_view_plan", + "playback": "explode", + "sampleTimes": [ + 1, + 2, + 3 + ], + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "steps": [ + { + "durationSeconds": 2, + "instruction": "Simultaneous independent translations", + "moves": [ + { + "direction": [ + 2, + 0, + 0 + ], + "distance": 30, + "frame": "world", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + } + }, + { + "direction": [ + 3, + 0, + 0 + ], + "distance": 10, + "frame": "parent", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + } + } + ], + "title": "Separate carrier and first part" + }, + { + "durationSeconds": 2, + "instruction": "Local and repeated-parent directions", + "moves": [ + { + "direction": [ + 4, + 0, + 0 + ], + "distance": 20, + "frame": "local", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + } + }, + { + "direction": [ + 0, + 5, + 0 + ], + "distance": 5, + "frame": "parent", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + } + } + ], + "title": "Separate selected children" + } + ], + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "unit": "mm" + }, + "before": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + }, + "case": "explode", + "data": { + "bomQuantities": "not computed or changed; labels link component identities and exact instance paths", + "graphicsCreated": false, + "kind": "PRESENTATION_PLAN", + "limits": [ + "Explicit directions only; no automatic layout, rotation interpolation, collision or physical disassembly proof.", + "Root-owned direct bodies are a fixed group and cannot be selected as occurrences.", + "No geometry copies, graphics preview, trails, video, native storyboard or archive-persistence claim.", + "Plan identity is bound to this session and model revision; no cross-session reference replay." + ], + "modelUnchanged": true, + "nativeMoved": false, + "plan": { + "configuration": { + "configured": false, + "graphComplete": true, + "isConfiguration": false, + "rowId": null, + "rowName": null, + "scope": "current active configuration only", + "tableId": null + }, + "configurationGraphDigest": "060a92ad6fc9185adecdac25632d7ed9b1a1c3d5606f1c174cfd3776f3b0d111", + "durationSeconds": 4.0, + "framePolicy": "directions normalized; axes fixed at home; parent translations inherited once; explicit child translations add", + "instances": [ + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentName": "Carrier", + "homeMatrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "label": { + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "instance": "Carrier:1", + "item": "C001", + "partNumber": "2026-10-06-09-53-47-592", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + }, + "parentInstanceId": null, + "partNumber": "2026-10-06-09-53-47-592", + "path": "Carrier:1" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentName": "Part", + "homeMatrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "label": { + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "instance": "Carrier:1+Part:1", + "item": "C002", + "partNumber": "EX-PART", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + }, + "parentInstanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "partNumber": "EX-PART", + "path": "Carrier:1+Part:1" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentName": "Part", + "homeMatrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "label": { + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "instance": "Carrier:1+Part:2", + "item": "C002", + "partNumber": "EX-PART", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PsQ1CMQxEJSbJApbsxElsMcRnhdjJFx01s7ACY9AhxqBnAkS+fo+uOZ/eST4MHGKggFMUZTrakxIuh9fy/SzH++l5vj5u70nEkErI0rKk6NBrQ2BVBRURMHH1RLKi5Z0sXLaDINtKwJkaNJmd7jYKlp7ZeeO6jpVMGqxWEjCNCoI0wCqq984piv7/ybH2PlxAkjZgywO0pAqjJmuZIsbq28YfhITh/u8AAAA=" + }, + "parentInstanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "partNumber": "EX-PART", + "path": "Carrier:1+Part:2" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentName": "Carrier", + "homeMatrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "label": { + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "instance": "Carrier:2", + "item": "C001", + "partNumber": "2026-10-06-09-53-47-592", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OwQlCMQyGwUmyQCDta9oEh3iukLSvePPsLK7gGN7EMbw7gRjxLoGf8PPxJQQFMiSgmJQltvRrKpx2j/X9WvfXw/14vl2eQWRYKrAYy5I7jmaERVVRRQRduvYlySTnsAQ5N27JUscmswfphDI5QgpX4+aW2/9btZKSiiKNGobmA52K4TIydZPNU+vf3z8PgI1qxwAAAA==" + }, + "parentInstanceId": null, + "partNumber": "2026-10-06-09-53-47-592", + "path": "Carrier:2" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentName": "Part", + "homeMatrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "label": { + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "instance": "Carrier:2+Part:1", + "item": "C002", + "partNumber": "EX-PART", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPwQlCMRBEwUrSwMJmk83uYhHfFpLND948W4stWIY3sQzvViDm8wuQgWEY3mEGQw4UYsCpSDpT3JsSLofX8v0sx/vpeb4+bu9JUEglsFbWRA5dKkI2MzBVhaZunqIObLyTY2WJNTqIDp9kQ9DB0zRzqSytkmxcljEqWgZiNMhEHbSNDlFyEcOmOv5scpTeV1fQZBVy4xWsJIFVUqscCUl8+/gDo47s4u8AAAA=" + }, + "parentInstanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "partNumber": "EX-PART", + "path": "Carrier:2+Part:1" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentName": "Part", + "homeMatrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "label": { + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "instance": "Carrier:2+Part:2", + "item": "C002", + "partNumber": "EX-PART", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + }, + "parentInstanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "partNumber": "EX-PART", + "path": "Carrier:2+Part:2" + } + ], + "matrixLayout": "row-major; column-vector multiplication; translation indices 3,7,11", + "rootBodyGroup": { + "bodyCount": 1, + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "rootComponentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "componentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "homeMatrix": [ + 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 + ], + "scope": "fixed root-owned direct bodies", + "selectable": false + }, + "schemaVersion": 1, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "space": "root/world", + "steps": [ + { + "durationSeconds": 2, + "endSeconds": 2.0, + "index": 0, + "instruction": "Simultaneous independent translations", + "moves": [ + { + "direction": [ + 1.0, + 0.0, + 0.0 + ], + "distance": 30, + "frame": "world", + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "worldTranslation": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "direction": [ + 1.0, + 0.0, + 0.0 + ], + "distance": 10, + "frame": "parent", + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "worldTranslation": [ + -2.220446049250313e-15, + 10.000000000000002, + 0.0 + ] + } + ], + "startSeconds": 0.0, + "title": "Separate carrier and first part" + }, + { + "durationSeconds": 2, + "endSeconds": 4.0, + "index": 1, + "instruction": "Local and repeated-parent directions", + "moves": [ + { + "direction": [ + 1.0, + 0.0, + 0.0 + ], + "distance": 20, + "frame": "local", + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "worldTranslation": [ + -20.000000000000007, + -8.881784197001254e-15, + 0.0 + ] + }, + { + "direction": [ + 0.0, + 1.0, + 0.0 + ], + "distance": 5, + "frame": "parent", + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "worldTranslation": [ + -6.123233995736767e-16, + -5.0, + 0.0 + ] + } + ], + "startSeconds": 2.0, + "title": "Separate selected children" + } + ], + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "units": { + "time": "s", + "translation": "mm" + } + }, + "planId": "97915f387b01a48add532ab601b4bd325ba5dbceb2619253c86a41d76450c917", + "playback": "explode", + "rendered": false, + "samples": [ + { + "forwardTimeSeconds": 0.0, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 0.0, + "stepIndex": 0 + }, + { + "fraction": 0.0, + "stepIndex": 1 + } + ], + "timeSeconds": 0.0 + }, + { + "forwardTimeSeconds": 1, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 55.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 15.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 55.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 25.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 14.999999999999998, + 5.000000000000001, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 35.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 15.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 0.5, + "stepIndex": 0 + }, + { + "fraction": 0.0, + "stepIndex": 1 + } + ], + "timeSeconds": 1 + }, + { + "forwardTimeSeconds": 2, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 70.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 70.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 29.999999999999996, + 10.000000000000002, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 50.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 1.0, + "stepIndex": 0 + }, + { + "fraction": 0.0, + "stepIndex": 1 + } + ], + "timeSeconds": 2 + }, + { + "forwardTimeSeconds": 3, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 70.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 59.99999999999999, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 29.999999999999996, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 19.999999999999993, + 9.999999999999996, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 50.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 27.5, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + -3.0616169978683836e-16, + -2.5, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 1.0, + "stepIndex": 0 + }, + { + "fraction": 0.5, + "stepIndex": 1 + } + ], + "timeSeconds": 3 + }, + { + "forwardTimeSeconds": 4.0, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 70.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 49.999999999999986, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 29.999999999999993, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 9.99999999999999, + 9.999999999999991, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 50.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 25.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + -6.123233995736767e-16, + -5.0, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 1.0, + "stepIndex": 0 + }, + { + "fraction": 1.0, + "stepIndex": 1 + } + ], + "timeSeconds": 4.0 + } + ], + "storyboardCreated": false + }, + "independentStateUnchanged": true, + "success": true + }, + { + "after": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + }, + "args": { + "op": "exploded_view_plan", + "playback": "assemble", + "sampleTimes": [ + 1, + 2, + 3 + ], + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "steps": [ + { + "durationSeconds": 2, + "instruction": "Simultaneous independent translations", + "moves": [ + { + "direction": [ + 2, + 0, + 0 + ], + "distance": 30, + "frame": "world", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + } + }, + { + "direction": [ + 3, + 0, + 0 + ], + "distance": 10, + "frame": "parent", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + } + } + ], + "title": "Separate carrier and first part" + }, + { + "durationSeconds": 2, + "instruction": "Local and repeated-parent directions", + "moves": [ + { + "direction": [ + 4, + 0, + 0 + ], + "distance": 20, + "frame": "local", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + } + }, + { + "direction": [ + 0, + 5, + 0 + ], + "distance": 5, + "frame": "parent", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + } + } + ], + "title": "Separate selected children" + } + ], + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "unit": "mm" + }, + "before": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + }, + "case": "assemble", + "data": { + "bomQuantities": "not computed or changed; labels link component identities and exact instance paths", + "graphicsCreated": false, + "kind": "PRESENTATION_PLAN", + "limits": [ + "Explicit directions only; no automatic layout, rotation interpolation, collision or physical disassembly proof.", + "Root-owned direct bodies are a fixed group and cannot be selected as occurrences.", + "No geometry copies, graphics preview, trails, video, native storyboard or archive-persistence claim.", + "Plan identity is bound to this session and model revision; no cross-session reference replay." + ], + "modelUnchanged": true, + "nativeMoved": false, + "plan": { + "configuration": { + "configured": false, + "graphComplete": true, + "isConfiguration": false, + "rowId": null, + "rowName": null, + "scope": "current active configuration only", + "tableId": null + }, + "configurationGraphDigest": "060a92ad6fc9185adecdac25632d7ed9b1a1c3d5606f1c174cfd3776f3b0d111", + "durationSeconds": 4.0, + "framePolicy": "directions normalized; axes fixed at home; parent translations inherited once; explicit child translations add", + "instances": [ + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentName": "Carrier", + "homeMatrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "label": { + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "instance": "Carrier:1", + "item": "C001", + "partNumber": "2026-10-06-09-53-47-592", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + }, + "parentInstanceId": null, + "partNumber": "2026-10-06-09-53-47-592", + "path": "Carrier:1" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentName": "Part", + "homeMatrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "label": { + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "instance": "Carrier:1+Part:1", + "item": "C002", + "partNumber": "EX-PART", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + }, + "parentInstanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "partNumber": "EX-PART", + "path": "Carrier:1+Part:1" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentName": "Part", + "homeMatrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "label": { + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "instance": "Carrier:1+Part:2", + "item": "C002", + "partNumber": "EX-PART", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PsQ1CMQxEJSbJApbsxElsMcRnhdjJFx01s7ACY9AhxqBnAkS+fo+uOZ/eST4MHGKggFMUZTrakxIuh9fy/SzH++l5vj5u70nEkErI0rKk6NBrQ2BVBRURMHH1RLKi5Z0sXLaDINtKwJkaNJmd7jYKlp7ZeeO6jpVMGqxWEjCNCoI0wCqq984piv7/ybH2PlxAkjZgywO0pAqjJmuZIsbq28YfhITh/u8AAAA=" + }, + "parentInstanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "partNumber": "EX-PART", + "path": "Carrier:1+Part:2" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentName": "Carrier", + "homeMatrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "label": { + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "instance": "Carrier:2", + "item": "C001", + "partNumber": "2026-10-06-09-53-47-592", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OwQlCMQyGwUmyQCDta9oEh3iukLSvePPsLK7gGN7EMbw7gRjxLoGf8PPxJQQFMiSgmJQltvRrKpx2j/X9WvfXw/14vl2eQWRYKrAYy5I7jmaERVVRRQRduvYlySTnsAQ5N27JUscmswfphDI5QgpX4+aW2/9btZKSiiKNGobmA52K4TIydZPNU+vf3z8PgI1qxwAAAA==" + }, + "parentInstanceId": null, + "partNumber": "2026-10-06-09-53-47-592", + "path": "Carrier:2" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentName": "Part", + "homeMatrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "label": { + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "instance": "Carrier:2+Part:1", + "item": "C002", + "partNumber": "EX-PART", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPwQlCMRBEwUrSwMJmk83uYhHfFpLND948W4stWIY3sQzvViDm8wuQgWEY3mEGQw4UYsCpSDpT3JsSLofX8v0sx/vpeb4+bu9JUEglsFbWRA5dKkI2MzBVhaZunqIObLyTY2WJNTqIDp9kQ9DB0zRzqSytkmxcljEqWgZiNMhEHbSNDlFyEcOmOv5scpTeV1fQZBVy4xWsJIFVUqscCUl8+/gDo47s4u8AAAA=" + }, + "parentInstanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "partNumber": "EX-PART", + "path": "Carrier:2+Part:1" + }, + { + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentName": "Part", + "homeMatrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "label": { + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "instance": "Carrier:2+Part:2", + "item": "C002", + "partNumber": "EX-PART", + "scope": "presentation component label; not an engineering BOM item number" + }, + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + }, + "parentInstanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "partNumber": "EX-PART", + "path": "Carrier:2+Part:2" + } + ], + "matrixLayout": "row-major; column-vector multiplication; translation indices 3,7,11", + "rootBodyGroup": { + "bodyCount": 1, + "component": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "rootComponentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "componentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "homeMatrix": [ + 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 + ], + "scope": "fixed root-owned direct bodies", + "selectable": false + }, + "schemaVersion": 1, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "space": "root/world", + "steps": [ + { + "durationSeconds": 2, + "endSeconds": 2.0, + "index": 0, + "instruction": "Simultaneous independent translations", + "moves": [ + { + "direction": [ + 1.0, + 0.0, + 0.0 + ], + "distance": 30, + "frame": "world", + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "worldTranslation": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "direction": [ + 1.0, + 0.0, + 0.0 + ], + "distance": 10, + "frame": "parent", + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "worldTranslation": [ + -2.220446049250313e-15, + 10.000000000000002, + 0.0 + ] + } + ], + "startSeconds": 0.0, + "title": "Separate carrier and first part" + }, + { + "durationSeconds": 2, + "endSeconds": 4.0, + "index": 1, + "instruction": "Local and repeated-parent directions", + "moves": [ + { + "direction": [ + 1.0, + 0.0, + 0.0 + ], + "distance": 20, + "frame": "local", + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "worldTranslation": [ + -20.000000000000007, + -8.881784197001254e-15, + 0.0 + ] + }, + { + "direction": [ + 0.0, + 1.0, + 0.0 + ], + "distance": 5, + "frame": "parent", + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "worldTranslation": [ + -6.123233995736767e-16, + -5.0, + 0.0 + ] + } + ], + "startSeconds": 2.0, + "title": "Separate selected children" + } + ], + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "units": { + "time": "s", + "translation": "mm" + } + }, + "planId": "97915f387b01a48add532ab601b4bd325ba5dbceb2619253c86a41d76450c917", + "playback": "assemble", + "rendered": false, + "samples": [ + { + "forwardTimeSeconds": 4.0, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 70.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 49.999999999999986, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 29.999999999999993, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 9.99999999999999, + 9.999999999999991, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 50.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 25.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + -6.123233995736767e-16, + -5.0, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 1.0, + "stepIndex": 0 + }, + { + "fraction": 1.0, + "stepIndex": 1 + } + ], + "timeSeconds": 0.0 + }, + { + "forwardTimeSeconds": 3.0, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 70.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 59.99999999999999, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 29.999999999999996, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 19.999999999999993, + 9.999999999999996, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 50.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 27.5, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + -3.0616169978683836e-16, + -2.5, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 1.0, + "stepIndex": 0 + }, + { + "fraction": 0.5, + "stepIndex": 1 + } + ], + "timeSeconds": 1 + }, + { + "forwardTimeSeconds": 2.0, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 70.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 70.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 29.999999999999996, + 10.000000000000002, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 50.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 30.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 1.0, + "stepIndex": 0 + }, + { + "fraction": 0.0, + "stepIndex": 1 + } + ], + "timeSeconds": 2 + }, + { + "forwardTimeSeconds": 1.0, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 55.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 15.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 55.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 25.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 14.999999999999998, + 5.000000000000001, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 35.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 15.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 0.5, + "stepIndex": 0 + }, + { + "fraction": 0.0, + "stepIndex": 1 + } + ], + "timeSeconds": 3 + }, + { + "forwardTimeSeconds": 0.0, + "poses": [ + { + "instanceId": "e16ee58bff4dfef629df404f42584f298b65485ab69264fbb0670846dc89befd", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "e782c11eecc545cd6e843d400272fec119cc1fd9f5425d57682fbb6eac352aec", + "matrix": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "20d70398280bb877f235ec6577549355cdaa2d665a1c36894775f1cab74d15fa", + "matrix": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "942ad4dd22de44212e9821c52857bad8900a78e0f000403b40d46e493607ff31", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "4083f80655c42f972d1f7c76873b865f7bcdf56a26ae97c2bb4858fe2041b6ae", + "matrix": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "instanceId": "7ebe6f9180643c1ea6e89cb61bb52219e480e1c3c636f03927e0c9154ebcc196", + "matrix": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "translationFromHome": [ + 0.0, + 0.0, + 0.0 + ] + } + ], + "stepProgress": [ + { + "fraction": 0.0, + "stepIndex": 0 + }, + { + "fraction": 0.0, + "stepIndex": 1 + } + ], + "timeSeconds": 4.0 + } + ], + "storyboardCreated": false + }, + "independentStateUnchanged": true, + "success": true + }, + { + "after": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + }, + "args": { + "op": "exploded_view_plan", + "sampleTimes": [ + 1, + 2, + 3 + ], + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c-wrong", + "steps": [ + { + "durationSeconds": 2, + "instruction": "Simultaneous independent translations", + "moves": [ + { + "direction": [ + 2, + 0, + 0 + ], + "distance": 30, + "frame": "world", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + } + }, + { + "direction": [ + 3, + 0, + 0 + ], + "distance": 10, + "frame": "parent", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + } + } + ], + "title": "Separate carrier and first part" + }, + { + "durationSeconds": 2, + "instruction": "Local and repeated-parent directions", + "moves": [ + { + "direction": [ + 4, + 0, + 0 + ], + "distance": 20, + "frame": "local", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + } + }, + { + "direction": [ + 0, + 5, + 0 + ], + "distance": 5, + "frame": "parent", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + } + } + ], + "title": "Separate selected children" + } + ], + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "unit": "mm" + }, + "before": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + }, + "case": "wrong-session", + "error": "Exploded planning requires the current session.", + "errorCode": "session_mismatch", + "errorType": "MechanicalError", + "independentStateUnchanged": true, + "success": false + }, + { + "after": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + }, + "args": { + "op": "exploded_view_plan", + "sampleTimes": [ + 1, + 2, + 3 + ], + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "steps": [ + { + "durationSeconds": 2, + "instruction": "Simultaneous independent translations", + "moves": [ + { + "direction": [ + 2, + 0, + 0 + ], + "distance": 30, + "frame": "world", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + } + }, + { + "direction": [ + 3, + 0, + 0 + ], + "distance": 10, + "frame": "parent", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + } + } + ], + "title": "Separate carrier and first part" + }, + { + "durationSeconds": 2, + "instruction": "Local and repeated-parent directions", + "moves": [ + { + "direction": [ + 4, + 0, + 0 + ], + "distance": 20, + "frame": "local", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + } + }, + { + "direction": [ + 0, + 5, + 0 + ], + "distance": 5, + "frame": "parent", + "occurrence": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + } + } + ], + "title": "Separate selected children" + } + ], + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa-wrong" + }, + "unit": "mm" + }, + "before": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + }, + "case": "stale-revision", + "error": "The model changed; inspect it before a new operation.", + "errorCode": "stale_revision", + "errorType": "MechanicalError", + "independentStateUnchanged": true, + "success": false + } + ], + "configSha256": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "coreSha256": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "finalTarget": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "images": false, + "initialTarget": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "scope": "module-function-native-api", + "sourceSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f" + }, + "success": true, + "witness": { + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 + } + }, + "bomAfter": { + "calculationAccuracy": "high", + "complete": true, + "configuration": { + "configured": false, + "graphComplete": true, + "isConfiguration": false, + "rowId": null, + "rowName": null, + "scope": "current active configuration only", + "tableId": null + }, + "configurationSuppression": [], + "excluded": [], + "identityScope": "running add-in session; supplier metadata persists in native archives", + "instances": [ + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 2, + "componentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "rootComponentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "depth": 0, + "metadata": { + "attributes": { + "requestedName": "Untitled" + }, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "EX-ROOT" + }, + "occurrenceRef": null, + "parentPath": null, + "path": "" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4VOwQ0CMQyTmCQLREraNJeIIY4V2vRO/HgzCyswBj/EGPxvAkRPDID8cSzbMYFAAgYa4GSD8U9RuBxe82ebj/fT83x93N7DkSArFKvFcgrsUyUUd0c3M2wWHpltpVZGy3Cq6H4wlrYySuGK1UamR1uUtBeJP79UycnNkboGytQ6NpKKuSeKakvjKfbtX5U8DkzHAAAA" + }, + "parentPath": "", + "path": "Carrier:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPyw0CMQxEJSpJA5Zsx05sUcTSQj4bceNMLbRAGdwQZXCnAkRWWwCay3j0RvJgkMCBAk4R23S0JylcDq/l+1mO99PzfH3c3pPgEFNQK2qRG/RcEMTdwc0MqjVvkWxg1Z1MkraDQOsgEKUCxWant7omTF2lycZJHqOgC7CigzB3sDo6UJaUHavZ+PNTw9z72gwsegGpuoKnmGHNsRYlRs5t2/gDTpd/We8AAAA=" + }, + "parentPath": "Carrier:1", + "path": "Carrier:1+Part:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:1+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PsQ1CMQxEJSbJApbsxElsMcRnhdjJFx01s7ACY9AhxqBnAkS+fo+uOZ/eST4MHGKggFMUZTrakxIuh9fy/SzH++l5vj5u70nEkErI0rKk6NBrQ2BVBRURMHH1RLKi5Z0sXLaDINtKwJkaNJmd7jYKlp7ZeeO6jpVMGqxWEjCNCoI0wCqq984piv7/ybH2PlxAkjZgywO0pAqjJmuZIsbq28YfhITh/u8AAAA=" + }, + "parentPath": "Carrier:1", + "path": "Carrier:1+Part:2" + }, + { + "asPurchased": false, + "bodyCount": 0, + "childCount": 2, + "componentId": "1a47e65f-de15-467d-a45b-b43118e1dfb9", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEAdwEAAAAAAAAAAAAA" + }, + "depth": 1, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Carrier", + "partNumber": "2026-10-06-09-53-47-592" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32OwQlCMQyGwUmyQCDta9oEh3iukLSvePPsLK7gGN7EMbw7gRjxLoGf8PPxJQQFMiSgmJQltvRrKpx2j/X9WvfXw/14vl2eQWRYKrAYy5I7jmaERVVRRQRduvYlySTnsAQ5N27JUscmswfphDI5QgpX4+aW2/9btZKSiiKNGobmA52K4TIydZPNU+vf3z8PgI1qxwAAAA==" + }, + "parentPath": "", + "path": "Carrier:2" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:1", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/4WPwQlCMRBEwUrSwMJmk83uYhHfFpLND948W4stWIY3sQzvViDm8wuQgWEY3mEGQw4UYsCpSDpT3JsSLofX8v0sx/vpeb4+bu9JUEglsFbWRA5dKkI2MzBVhaZunqIObLyTY2WJNTqIDp9kQ9DB0zRzqSytkmxcljEqWgZiNMhEHbSNDlFyEcOmOv5scpTeV1fQZBVy4xWsJIFVUqscCUl8+/gDo47s4u8AAAA=" + }, + "parentPath": "Carrier:2", + "path": "Carrier:2+Part:1" + }, + { + "asPurchased": false, + "bodyCount": 1, + "childCount": 0, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "componentRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAEA3wEAAAAAAAAAAAAA" + }, + "depth": 2, + "metadata": { + "attributes": {}, + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "partNumber": "EX-PART" + }, + "occurrenceRef": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "objectType": "adsk::fusion::Occurrence", + "occurrencePath": "Carrier:2+Part:2", + "occurrenceToken": null, + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/32PwYlDMQxEIZW4AYFkW5ZEisi2YMk2ue15a9kWtoy9LSkj91QQ1p/cw8AwDO8wg6mmnCjhFmXdiV5NS5+n2+X5uJx/Pv6uX7/f903kVFpi7awlBwzpCNXMwFQVXMOikC50fpFrslCnANEVm3QEXbxNK7fO4j3LwQ2bi1w7LG8FKk0BRZrgghZj1JLV3m8KlDFmKGixDtV5grUiMKV4Z8qYJY6P/2mdckXvAAAA" + }, + "parentPath": "Carrier:2", + "path": "Carrier:2+Part:2" + } + ], + "partCount": 2, + "parts": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "componentId": "29d8bf49-5ffd-4d9d-869d-b725d613eccb", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "occurrencePaths": [ + "" + ], + "partNumber": "EX-ROOT", + "quantity": 1, + "scope": "direct_component_bodies", + "unitMass": 0.0162, + "unitVolume": 6000.0 + }, + { + "attributes": {}, + "componentId": "f6f214d9-1206-42ce-839d-f5a87b1e4496", + "description": "", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "Part", + "occurrencePaths": [ + "Carrier:1+Part:1", + "Carrier:1+Part:2", + "Carrier:2+Part:1", + "Carrier:2+Part:2" + ], + "partNumber": "EX-PART", + "quantity": 4, + "scope": "direct_component_bodies", + "unitMass": 0.0026999999999999997, + "unitVolume": 1000.0 + } + ], + "physical": { + "bodyInstances": 5, + "mass": 0.027000000000000003, + "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": 10000.0 + }, + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "revision": "ab7de3a06292e4dc2606b8282ec48fa21e68be4ad707a4c08137b30a3b1ec8aa" + }, + "totalPurchasingInstances": 5, + "units": { + "mass": "kg", + "volume": "mm3" + } + }, + "qualification": { + "scope": "module-function-native-api", + "cases": [ + { + "playback": "explode", + "instances": 6, + "samples": 5, + "posesVerified": 30, + "scope": "module-function-native-api" + }, + { + "playback": "assemble", + "instances": 6, + "samples": 5, + "posesVerified": 30, + "scope": "module-function-native-api" + }, + { + "case": "wrong-session", + "refusal": "session_mismatch" + }, + { + "case": "stale-revision", + "refusal": "stale_revision" + } + ], + "installedPublicRoute": "NOT_RUN", + "images": false + }, + "cleanupEvidence": [ + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "success": true + } + }, + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "success": true + } + } + ], + "cleanupLatest": { + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "success": true + } + }, + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "success": true + } + } + }, + "finalRuntimeIdentity": { + "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-05T21:01:31.6721740Z", + "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.8", + "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.8", + "pyThreads": 4 + }, + "shell": "rust", + "needsSignin": false, + "licensingDialog": false, + "windowTitle": "Untitled - Autodesk Fusion ", + "windowFactsDegraded": false, + "windowFactsError": null, + "exePort": 50618 + }, + "pid": 42780, + "port": 50618 + }, + "finalHost": { + "activeCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "documents": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + }, + "counts": { + "PASS": 16, + "FAIL": 0 + } +} diff --git a/docs/exploded-plan-evidence-2026-10-06/runner-r3/NATIVE-RUNNER.md b/docs/exploded-plan-evidence-2026-10-06/runner-r3/NATIVE-RUNNER.md new file mode 100644 index 0000000000000000000000000000000000000000..522eab7a78338f5ce01c02abf8a16965934c38cb --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/runner-r3/NATIVE-RUNNER.md @@ -0,0 +1,39 @@ +# Exploded-plan native qualification runner + +Status: SOURCE_ONLY (r3; r1/r2 and the original native failure retained unchanged); native execution and installed public route NOT_RUN. Root owns the host and is the only executor after independent review. The default command prints a plan and does not load harness/native sources. + +```sh +python3 -B exploded_qualification.py plan +python3 -B -m unittest -v test_exploded_qualification +``` + +The explicit run interface requires all source and host identities. Example arguments for this workspace, to be refreshed by root before execution: + +```sh +python3 -B exploded_qualification.py run \ + --harness-evidence /home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-ordinary-1 \ + --probe-dir /home/adom/project/research/fusion-roadmap-build-2026-10-02/cp9-render-preparation/readonly-r2 \ + --diagnostic /home/adom/project/research/fusion-roadmap-build-2026-10-02/cp9-render-preparation/diagnostic-r1/diagnostic_scene.py \ + --witness-dir /home/adom/project/research/fusion-roadmap-build-2026-10-02/pr10-current-integration/published-readback/tests \ + --product /home/adom/project/research/fusion-roadmap-build-2026-10-02/exploded-view-preparation/product-source-r2/addin/AdomBridge/commands/mechanical/exploded_view.py \ + --product-sha a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f \ + --target adom_drew2 --host-name ADOM_DREW2 \ + --expect-bridge 1.12.0-dev.8 --expect-addin 1.12.0-dev.8 \ + --evidence /home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2 +``` + +No runtime installation, restart, registry registration, workspace activation, camera changes, screenshot, render, or Shotlog path is introduced. The accepted diagnostic base refuses capture and non-F3D artifacts; this subclass also rejects capture before script construction. The temporary product module is compiled in memory with the serving package only to resolve two byte-verified dependencies. It is never added to `sys.modules` or the public operation registry. Result scope stays `module-function-native-api`; installed route remains `NOT_RUN`. + +The owned fixture has a 20ร—30ร—10 mm root box plus four 10 mm cubes in a twice-instanced Carrier subassembly. Carrier roots have independently known Rz90 and Rz180 poses, and one shared child has Rz90 local rotation. There are six occurrences, three component definitions, five physical bodies and 10,000 mmยณ native volume. One rigid as-built joint connects the two first-parent children. Native qualification measured its ownership in the shared Carrier definition (independent component address 1), even though creation was requested through the root API. The oracle requires that exact Carrier definition, bound to both Carrier occurrence component links, and its exact joint inventory address; a root or Part owner is refused. Its native API-equality inventory addresses must bind exactly to those two children; wrong repeated-parent members and duplicate members refuse. Both repeated Carriers must retain the same presentation item label. + +Two ordered two-second steps test simultaneous parent world translation plus child parent translation, followed by child local translation and a selected repeated-parent child translation. Hard-coded analytic world matrices and displacement tables verify all six instances at five times in each playback direction (60 poses). The reverse endpoint must equal the exact captured home matrix, beyond numeric tolerance. Unique instance IDs, exact guarded refs, parent relationships, repeated-definition labels, fixed root-owned bodies, direction normalization, world deltas, step progress, grouping, and instructions are checked. Wrong-session and stale-revision cases require their exact semantic refusal codes. + +The already reviewed everyday and assembly witness strings are extracted only from exact hash-pinned published sources. They extend every native lifecycle action, including archive comparison and close verification, with independent geometry/constraint/dimension/attachment/pose readback. No product scene or exploded-readback helpers are imported into that witness. Each product call records before/after witnesses. The public BOM is compared unchanged, and F3D reopen must preserve the full witness plus BOM quantities/tree/physical totals. Acceptance also requires exactly one source/reopen pair and one retained F3D artifact. + +Inherited cleanup runs in `finally`, closes only exact registry-owned objects with verified native archives, and compares original document inventory, preferences, development pin, expected versions, process/path/listener identity and active original document. Ambiguous native dispatch retains documents instead of replaying or guessing cleanup. This runner has no automated interruption-recovery mode; retain its ownership/evidence and use a separately reviewed recovery with the same rich witness if required. + +Offline boundary tests include actual generated ownership-prefix execution with mock native objects, exact camel-case document ID mapping, foreign-owner refusal, source/dependency hashes, nonfinite/oversized reports, corrupt transforms/units/labels/context, duplicate instances/poses, doubled inheritance, missing child movement, wrong ordering/progress, wrong expected errors and image refusal. These tests do not establish actual Fusion compatibility. The emitted mocked-identity source in offline tests is never submitted to a host. + +R2 preserves r1 and corrects two adversary oracle findings. New negative tests use coherent rehashed faulty plans so stale hashes cannot conceal missing geometry/identity assertions. + +R3 corrects only the fixture ownership assumption, based on the preserved native-1 failure (cleanup PASS, product probe not attempted). `fixtures/native-initial-witness.json` is the exact parsed saved witness, with report and extraction hashes in `fixtures/provenance.json`. Tests accept that measured owner/member graph and reject other owners, mislabeled definition links, wrong joint inventory addresses, second-Carrier members and duplicate members. Product source is unchanged. The original FAIL is not converted into product acceptance. diff --git a/docs/exploded-plan-evidence-2026-10-06/runner-r3/exploded_qualification.py b/docs/exploded-plan-evidence-2026-10-06/runner-r3/exploded_qualification.py new file mode 100644 index 0000000000000000000000000000000000000000..120474524b1ae9637b12698294fa103f895811e5 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/runner-r3/exploded_qualification.py @@ -0,0 +1,322 @@ +#!/usr/bin/env python3 +"""No-image owned native qualification of a frozen exploded-plan module. + +Default plan is offline. Root alone runs the explicit host mode after review. +This never installs/registers the product module or qualifies its public route. +""" +import argparse, ast, hashlib, importlib.util, json, math +from pathlib import Path +import signal, sys, uuid + +DIAGNOSTIC_SHA='bad536a1d0159eb5e2426e5e671510bc3e0178aee80866f477152f43c3b02073' +CORE_SHA='9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a' +CONFIG_SHA='f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0' +WITNESS_FILES={'ralph_everyday.py':'b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71', + 'ralph_assemblies.py':'9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903'} +MAX_RESULT_BYTES=1024*1024 +ROLES=('carrier1','a1','b1','carrier2','a2','b2') +PATHS=dict(zip(ROLES,('Carrier:1','Carrier:1+Part:1','Carrier:1+Part:2','Carrier:2','Carrier:2+Part:1','Carrier:2+Part:2'))) +PARENTS={'carrier1':None,'a1':'carrier1','b1':'carrier1','carrier2':None,'a2':'carrier2','b2':'carrier2'} +# Analytic matrices, independent of candidate math and native readback. +HOMES={ + 'carrier1':[0,-1,0,40, 1,0,0,10, 0,0,1,0, 0,0,0,1], + 'a1':[-1,0,0,40, 0,-1,0,20, 0,0,1,0, 0,0,0,1], + 'b1':[0,-1,0,20, 1,0,0,10, 0,0,1,0, 0,0,0,1], + 'carrier2':[-1,0,0,-30, 0,-1,0,50, 0,0,1,0, 0,0,0,1], + 'a2':[0,1,0,-40, -1,0,0,50, 0,0,1,0, 0,0,0,1], + 'b2':[-1,0,0,-30, 0,-1,0,30, 0,0,1,0, 0,0,0,1]} +OFFSETS={ + 0:{}, + 1:{'carrier1':[15,0,0],'a1':[15,5,0],'b1':[15,0,0]}, + 2:{'carrier1':[30,0,0],'a1':[30,10,0],'b1':[30,0,0]}, + 3:{'carrier1':[30,0,0],'a1':[20,10,0],'b1':[30,0,0],'b2':[0,-2.5,0]}, + 4:{'carrier1':[30,0,0],'a1':[10,10,0],'b1':[30,0,0],'b2':[0,-5,0]}} + + +def need(value,message): + if not value:raise ValueError(message) + +def sha(data):return hashlib.sha256(data).hexdigest() + +def close(a,b): + if isinstance(b,dict):return isinstance(a,dict) and set(a)==set(b) and all(close(a[k],v) for k,v in b.items()) + if isinstance(b,list):return isinstance(a,list) and len(a)==len(b) and all(close(x,y) for x,y in zip(a,b)) + if type(b) in (int,float):return type(a) in (int,float) and math.isfinite(a) and math.isclose(a,b,rel_tol=1e-9,abs_tol=1e-7) + return type(a) is type(b) and a==b + +def steps(refs): + def move(role,frame,direction,distance):return dict(occurrence=refs[role],frame=frame,direction=direction,distance=distance) + return [dict(title='Separate carrier and first part',instruction='Simultaneous independent translations',durationSeconds=2, + moves=[move('carrier1','world',[2,0,0],30),move('a1','parent',[3,0,0],10)]), + dict(title='Separate selected children',instruction='Local and repeated-parent directions',durationSeconds=2, + moves=[move('a1','local',[4,0,0],20),move('b2','parent',[0,5,0],5)])] + +def case_requests(session,target,refs): + common=dict(op='exploded_view_plan',sessionId=session,target=target,unit='mm',steps=steps(refs),sampleTimes=[1,2,3]) + return [('explode',{**common,'playback':'explode'},None),('assemble',{**common,'playback':'assemble'},None), + ('wrong-session',{**common,'sessionId':session+'-wrong'},'session_mismatch'), + ('stale-revision',{**common,'target':{**target,'revision':target['revision']+'-wrong'}},'stale_revision')] + +def fixture_roles(native): + rows=native['occurrences'];need(len(rows)==6 and len({r['path'] for r in rows})==6,'Fixture requires six distinct native occurrences') + lookup={r['path']:r for r in rows};need(set(lookup)==set(PATHS.values()),'Native fixture paths differ') + for role,path in PATHS.items():need(close(lookup[path]['transform'],HOMES[role]),'Independent home pose differs: '+role) + need(close(native['physical']['volume'],10000) and close(native['instanceVolume'],10000) and native['instanceCount']==5,'Native body totals differ') + graph=native['assemblies'];joints=[j for component in graph['components'] for j in component['asbuilt']] + need(len(joints)==1 and joints[0]['name']=='Fixture rigid' and joints[0]['motion']['type']=='RigidJointMotion' + and joints[0]['health']==0 and joints[0]['suppressed'] is False,'Independent rigid joint differs') + components=graph['components'] + need(len(components)==3 and {comp['name'] for comp in components}=={'','Carrier','Part'},'Independent fixture component definitions differ') + carriers=[(i,comp) for i,comp in enumerate(components) if comp['name']=='Carrier'] + # Native qualification measured the shared Carrier definition as owner, + # even though the input was submitted through the root asBuiltJoints API. + need(len(carriers)==1 and carriers[0][1]['asbuilt']==joints,'Fixture rigid joint is not Carrier-owned') + carrier_index=carriers[0][0] + joint=joints[0];need(joint['node']=={'node':['asbuilt',carrier_index,0],'context':None},'Carrier joint inventory address differs') + graph_rows=graph['occurrences'];need(len(graph_rows)==6 and len({r['path'] for r in graph_rows})==6,'Independent joint occurrence inventory differs') + graph_lookup={r['path']:r for r in graph_rows};need(set(graph_lookup)==set(PATHS.values()),'Independent joint occurrence paths differ') + need(len({json.dumps(r['node'],sort_keys=True) for r in graph_rows})==6,'Independent occurrence addresses duplicate') + for role,path in PATHS.items():need(close(graph_lookup[path]['transform'],HOMES[role]),'Independent attachment pose differs: '+role) + carrier_link={'node':['component',carrier_index],'context':None} + need(all(graph_lookup[PATHS[role]]['component']==carrier_link for role in ('carrier1','carrier2')), + 'Rigid owner is not the actual shared Carrier instance definition') + first,second=graph_lookup[PATHS['a1']]['node'],graph_lookup[PATHS['b1']]['node'] + need(joint['one']!=joint['two'] and ((joint['one']==first and joint['two']==second) or (joint['one']==second and joint['two']==first)), + 'Rigid joint does not attach exact first-carrier children') + need(not any(comp[key] for comp in graph['components'] for key in ('joints','origins','links')),'Unexpected attachment graph') + need(graph['pendingSnapshot'] is False and graph['timelineMarker']==native['timelineCount'],'Native timeline is not settled') + return lookup + +def normalized_bom(bom): + need(bom.get('complete') is True and not bom.get('excluded'),'BOM incomplete or unexpectedly excluded') + parts=bom['parts'];need(len(parts)==2 and len({p['partNumber'] for p in parts})==2,'BOM definitions duplicate or missing') + need({p['partNumber']:p['quantity'] for p in parts}=={'EX-ROOT':1,'EX-PART':4},'BOM quantities differ') + need(close(bom['physical']['volume'],10000) and bom['physical']['bodyInstances']==5,'BOM physical total differs') + instances=bom['instances'];need(len(instances)==7 and len({i['path'] for i in instances})==7,'BOM instance tree differs') + return {'parts':sorted([{k:p[k] for k in ('partNumber','quantity','scope','unitMass','unitVolume','occurrencePaths')} for p in parts],key=lambda p:p['partNumber']), + 'instances':sorted([{k:r[k] for k in ('path','parentPath','depth','bodyCount','childCount','asPurchased')} for r in instances],key=lambda r:r['path']), + 'physical':bom['physical'],'units':bom['units'],'accuracy':bom['calculationAccuracy']} + +def qualify_plan(data,session,target,refs,playback): + need(data['kind']=='PRESENTATION_PLAN' and data['modelUnchanged'] is True and all(data[k] is False for k in ('nativeMoved','graphicsCreated','rendered','storyboardCreated')),'Unexpected product effects/scope') + plan=data['plan'];need(plan['sessionId']==session and plan['target']==target and plan['units']=={'translation':'mm','time':'s'} and plan['space']=='root/world','Plan identity/frame differs') + need(plan['durationSeconds']==4 and data['playback']==playback,'Playback/duration differs') + rows=plan['instances'];need(len(rows)==6 and len({r['instanceId'] for r in rows})==6 and len({r['path'] for r in rows})==6,'Instance inventory not bijective') + lookup={r['path']:r for r in rows};need(set(lookup)==set(PATHS.values()),'Plan paths differ from native fixture') + roles={role:lookup[path] for role,path in PATHS.items()};ids={role:r['instanceId'] for role,r in roles.items()} + for role,row in roles.items(): + need(close(row['homeMatrix'],HOMES[role]) and row['occurrence']==refs[role],'Home pose or exact guarded reference differs: '+role) + need(row['parentInstanceId']==(ids[PARENTS[role]] if PARENTS[role] else None),'Parent mapping differs: '+role) + need(row['label']['componentId']==row['componentId'] and row['label']['instance']==row['path'],'Presentation label identity differs') + need(roles['carrier1']['componentId']==roles['carrier2']['componentId'],'Repeated carrier definition split') + need(len({roles[k]['componentId'] for k in ('a1','b1','a2','b2')})==1 and roles['a1']['componentId']!=roles['carrier1']['componentId'],'Repeated child definitions differ') + need(len({roles[k]['label']['item'] for k in ('a1','b1','a2','b2')})==1 and roles['a1']['label']['item']!=roles['carrier1']['label']['item'],'Repeated component labels differ') + need(roles['carrier1']['label']['item']==roles['carrier2']['label']['item'],'Repeated carrier labels differ') + root=plan['rootBodyGroup'];need(root['bodyCount']==1 and root['selectable'] is False and close(root['homeMatrix'],[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),'Root direct body group differs') + expected_steps=steps(refs);world=[[(30,0,0),(0,10,0)],[(-20,0,0),(0,-5,0)]];move_roles=[['carrier1','a1'],['a1','b2']] + need(len(plan['steps'])==2,'Step count differs') + for index,(actual,wanted) in enumerate(zip(plan['steps'],expected_steps)): + need(actual['index']==index and actual['startSeconds']==2*index and actual['endSeconds']==2*(index+1) and actual['durationSeconds']==2,'Step timing differs') + need(actual['title']==wanted['title'] and actual['instruction']==wanted['instruction'] and len(actual['moves'])==2,'Step instructions/grouping differ') + for j,move in enumerate(actual['moves']): + expected=wanted['moves'][j];direction=[0,1,0] if index==1 and j==1 else [1,0,0] + need(move['instanceId']==ids[move_roles[index][j]] and move['frame']==expected['frame'] and move['distance']==expected['distance'] and close(move['direction'],direction) and close(move['worldTranslation'],list(world[index][j])),'Compiled frame/direction/translation differs') + need(len(data['samples'])==5,'Missing or extra samples') + for t,sample in enumerate(data['samples']): + forward=t if playback=='explode' else 4-t + need(sample['timeSeconds']==t and sample['forwardTimeSeconds']==forward,'Sample time/order differs') + fractions={0:[0,0],1:[.5,0],2:[1,0],3:[1,.5],4:[1,1]}[forward] + need(close(sample['stepProgress'],[{'stepIndex':i,'fraction':v} for i,v in enumerate(fractions)]),'Ordered progress differs') + poses=sample['poses'];need(len(poses)==6 and len({p['instanceId'] for p in poses})==6 and {p['instanceId'] for p in poses}==set(ids.values()),'Sample instance inventory differs') + by_id={r['instanceId']:r for r in poses} + for role,key in ids.items(): + offset=OFFSETS[forward].get(role,[0,0,0]);matrix=list(HOMES[role]) + for i,v in zip((3,7,11),offset):matrix[i]+=v + need(close(by_id[key]['matrix'],matrix) and close(by_id[key]['translationFromHome'],offset),'Independent sample oracle differs: '+role+' t='+str(t)) + if forward==0:need(by_id[key]['matrix']==roles[role]['homeMatrix'],'Home endpoint not exact') + need(data['planId']==sha(json.dumps(plan,sort_keys=True,separators=(',',':'),allow_nan=False).encode()),'Plan identity does not match immutable plan') + return {'playback':playback,'instances':6,'samples':5,'posesVerified':30,'scope':'module-function-native-api'} + +def load_diagnostic(path): + path=Path(path).resolve();need(sha(path.read_bytes())==DIAGNOSTIC_SHA,'Reviewed diagnostic runner differs') + spec=importlib.util.spec_from_file_location('accepted_exploded_diagnostic',path);module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module);return module + +def witness_source(folder): + result=[];files={} + for name,expected in WITNESS_FILES.items(): + path=Path(folder)/name;raw=path.read_bytes();need(sha(raw)==expected,'Reviewed independent witness changed: '+name) + tree=ast.parse(raw);symbol='EXTRA_WITNESS' if name=='ralph_everyday.py' else 'ASSEMBLY_WITNESS' + nodes=[n.value for n in tree.body if isinstance(n,ast.Assign) and any(isinstance(t,ast.Name) and t.id==symbol for t in n.targets)] + need(len(nodes)==1,'Witness source binding missing');result.append(ast.literal_eval(nodes[0]));files['witness/'+name]=path + return '\n'.join(result),files + +def enriched(factory,extension,action,**identity): + script=factory(action,**identity);marker="\nrequire(platform.node().lower()" + need(script.count(marker)==1,'Maintained native witness injection point differs') + return script.replace(marker,'\n'+extension+marker,1) + +def owned_program(factory,extension,source,source_sha,refs,**identity): + need(sha(source.encode())==source_sha,'Frozen product source differs') + native_identity=dict(identity) + native_identity['documentId']=native_identity.pop('document_id') + script=enriched(factory,extension,'witness',**native_identity) + payload=dict(source=source,sha256=source_sha,coreSha256=CORE_SHA,configSha256=CONFIG_SHA,refs=refs) + return script+'\nPRODUCT = json.loads('+repr(json.dumps(payload))+')\n'+r''' +import threading, types, importlib +from pathlib import Path +require(threading.current_thread() is threading.main_thread(), 'Exploded qualification requires main thread') +require(app.activeDocument == row['object'], 'Owned product fixture is not active') +require(hashlib.sha256(PRODUCT['source'].encode()).hexdigest() == PRODUCT['sha256'], 'Frozen source hash differs') +require(hashlib.sha256(Path(core.__file__).read_bytes()).hexdigest() == PRODUCT['coreSha256'], 'Serving core source differs') +config = importlib.import_module(core.__package__ + '.configurations') +require(hashlib.sha256(Path(config.__file__).read_bytes()).hexdigest() == PRODUCT['configSha256'], 'Serving configuration dependency differs') +candidate = types.ModuleType(core.__package__ + '.exploded_view_native_qualification') +candidate.__package__ = core.__package__ +exec(compile(PRODUCT['source'], '', 'exec'), candidate.__dict__) +initial_target = core.current_target(app) +require(initial_target['documentId'] == REQUEST['documentId'], 'Product target is not owned') +''' + +# Plain-data case requests are appended separately to keep request identity explicit. +def execute_program(factory,extension,source,source_sha,refs,session,target,**identity): + requests=case_requests(session,target,refs) + script=owned_program(factory,extension,source,source_sha,refs,**identity) + return script+'\nCASES = json.loads('+repr(json.dumps(requests))+')\n'+r''' +require(initial_target == CASES[0][1]['target'], 'Fixture target changed before qualification') +qualified=[] +for label, arguments, expected_error in CASES: + before=witness(document) + try: + output=candidate.exploded_view_plan(app,arguments) + item={'case':label,'args':arguments,'success':True,'data':output} + except Exception as error: + item={'case':label,'args':arguments,'success':False,'errorCode':getattr(error,'code',None), + 'errorType':type(error).__name__,'error':str(error)[:2048]} + after=witness(document) + item.update(before=before,after=after,independentStateUnchanged=same(before,after)) + qualified.append(item) + if not same(before,after) or (item['success'] != (expected_error is None)) or (expected_error is not None and item.get('errorCode') != expected_error): + break +result['productQualification']={'scope':'module-function-native-api','installedPublicRoute':'NOT_RUN', + 'images':False,'rendering':'NOT_RUN','sourceSha256':PRODUCT['sha256'],'coreSha256':PRODUCT['coreSha256'], + 'configSha256':PRODUCT['configSha256'],'initialTarget':initial_target,'finalTarget':core.current_target(app),'cases':qualified} +require(len(json.dumps(result,allow_nan=False).encode()) <= 1024*1024, 'Qualification output exceeds bound') +''' + +def qualify(value,source_sha,session,target,refs): + need(len(json.dumps(value,allow_nan=False).encode())<=MAX_RESULT_BYTES,'Qualification output exceeds bound') + need(value.get('success') is True and value.get('documentId')==target['documentId'],'Owned result identity differs') + q=value['productQualification'];need(q['sourceSha256']==source_sha and q['coreSha256']==CORE_SHA and q['configSha256']==CONFIG_SHA,'Native source provenance differs') + need(q['scope']=='module-function-native-api' and q['installedPublicRoute']=='NOT_RUN' and q['images'] is False and q['rendering']=='NOT_RUN','Qualification scope expanded') + need(q['initialTarget']==q['finalTarget']==target,'Product target changed') + expected=case_requests(session,target,refs);need(len(q['cases'])==4,'Qualification case count differs');results=[] + for row,(label,args,error) in zip(q['cases'],expected): + need(row['case']==label and row['args']==args,'Qualification request identity differs') + need(row['independentStateUnchanged'] is True and close(row['before'],row['after']),'Independent model/joint witness changed') + fixture_roles(row['before']);fixture_roles(row['after']) + if error is None: + need(row['success'] is True,'Product failed: '+label+' '+str(row.get('error',''))) + results.append(qualify_plan(row['data'],session,target,refs,label)) + else: + need(row['success'] is False and row.get('errorCode')==error,'Wrong expected refusal: '+label) + results.append({'case':label,'refusal':error}) + need(q['cases'][0]['data']['planId']==q['cases'][1]['data']['planId'],'Playback changed immutable plan identity') + return {'scope':'module-function-native-api','cases':results,'installedPublicRoute':'NOT_RUN','images':False} + + +def campaign_type(diagnostic,modules,files,extension,source,source_sha): + base=diagnostic.campaign_type(modules,None,files);support=modules['ralph_support'] + class ExplodedQualification(base): + def __init__(self,args,client=None): + super().__init__(args,client) + self.report['acceptanceScope']={'productFunction':'REQUESTED','installedPublicRoute':'NOT_RUN','rendering':'NOT_RUN','images':False,'archiveModelGraph':'REQUESTED'} + self.report['limitations']=['Module function only; no installed route, native graphics, storyboard, images, collision or physically valid disassembly claim.','Fixture-specific independent analytic matrices and rigid attachment graph; current-session references are not replayed after reopening.'] + def native(self,action,**values): + if action=='capture':raise RuntimeError('Images forbidden') + if self.ambiguous:raise RuntimeError('Unresolved operation prevents native actions') + script=enriched(support.native_script,extension,action,run_id=self.id,host=self.args.host_name,session_id=self.session,**values) + response=self.call('fusion_run_modeling_script',{'script':script},mutating=action in {'begin','register','activate','close','checkpoint','restore'}) + result=response['data']['result'];need(result.get('success') is True,'Native adapter returned no explicit success');return result + def occurrence(self,path): + rows=[r for r in self.inspect()['occurrences'] if r['path']==path];need(len(rows)==1,'Exact fixture occurrence absent/ambiguous');return rows[0] + def exploded_diagnostic(self): + need(not self.report['probeAttempted'],'Product probe is never replayed') + self.document_id=None + data=self.mechanical('new_design',write=True,name='Untitled',box={'width':20,'height':30,'depth':10}) + self.document_id=data['target']['documentId'];self.target=data['target'];self.owned.manifest.setdefault('pendingRegistrations',{})[self.document_id]=data;self.owned.persist() + self.bind_document(self.native('register',documentId=self.document_id,role=self.fixture));del self.owned.manifest['pendingRegistrations'][self.document_id];self.owned.persist();self.inspect() + self.mechanical('component_metadata',write=True,changes={'partNumber':'EX-ROOT'}) + self.mechanical('component_create',write=True,name='Carrier',transform={'position':[40,10,0],'axis':[0,0,1],'angle':90}) + self.mechanical('component_create',write=True,name='Part',parent=self.component('Carrier')['ref'],transform={'position':[10,0,0],'axis':[0,0,1],'angle':90}) + self.create_sketch('Part section',[{'type':'rectangle','start':[0,0],'end':[10,10]}],component=self.component('Part')['ref']) + sk=self.sketch('Part section');component=self.component('Part') + self.mechanical('feature_create',write=True,type='extrude',name='Part depth',component=component['ref'],profiles=[{**sk['profiles'][0]['ref'],**self.target}],distance=10) + self.mechanical('component_metadata',write=True,component=self.component('Part')['ref'],changes={'partNumber':'EX-PART'}) + self.mechanical('occurrence_insert',write=True,component=self.component('Part')['ref'],parent=self.component('Carrier')['ref'],transform={'position':[0,20,0]}) + self.mechanical('occurrence_insert',write=True,component=self.component('Carrier')['ref'],transform={'position':[-30,50,0],'axis':[0,0,1],'angle':180}) + self.mechanical('joint_create',write=True,name='Fixture rigid',type='rigid',occurrenceOne=self.occurrence(PATHS['a1'])['ref'],occurrenceTwo=self.occurrence(PATHS['b1'])['ref']) + before=self.measured('Exploded source fixture',10000,5);fixture_roles(before) + self.inspect();bom_before=self.mechanical('bom');self.report['bomBefore']=bom_before;self.bom_normalized=normalized_bom(bom_before) + self.check('Native fixture has expected hierarchy, physical homes and rigid graph',True,before) + refs={role:self.occurrence(path)['ref'] for role,path in PATHS.items()};self.inspect();target=dict(self.target) + # Every selection was obtained at the same revision; never overwrite stale refs. + need(all(r['documentId']==target['documentId'] and r['revision']==target['revision'] for r in refs.values()),'Fixture refs changed during preparation') + program=execute_program(support.native_script,extension,source,source_sha,refs,self.session,target,run_id=self.id,host=self.args.host_name,session_id=self.session,document_id=self.document_id) + (self.directory/'native-exploded-probe.py').write_text(program);self.report['probeAttempted']=True;self.persist() + value=self.call('fusion_run_modeling_script',{'script':program},mutating=True)['data']['result'];self.report['productProbe']=value;self.persist() + after=self.witness();self.check('Whole independent model and attachment graph unchanged',support.equivalent(before,after),after) + self.inspect();bom_after=self.mechanical('bom');self.report['bomAfter']=bom_after + self.check('Public BOM definitions, tree and physical totals unchanged',support.equivalent(bom_before,bom_after),bom_after) + self.report['qualification']=qualify(value,source_sha,self.session,target,refs) + self.check('Explode, reverse, frame, inheritance and exact refusal oracles',True,self.report['qualification']);self.report['acceptanceScope']['productFunction']='PASS' + def checkpoint(self,capture=False): + if capture is not False:raise RuntimeError('Images forbidden') + self.inspect();path=self.owned.manifest['hostScratch']+'/'+self.fixture+'-'+uuid.uuid4().hex[:8]+'.f3d' + self.mechanical('export',write=True,format='f3d',outputPath=path) + result=self.native('checkpoint',documentId=self.document_id,path=path) + self.check('F3D preserves full independent model and attachment graph',support.equivalent(result['before'],result['after']),result['archive']) + for row in (result['source'],result['reopened']):self.bind_document(row) + self.save_artifact(self.native('file',path=path),'native-archive') + if hasattr(self,'bom_normalized'): + saved_id,saved_target=self.document_id,self.target + try: + self.document_id=result['reopened']['documentId'];self.inspect();reopened=self.mechanical('bom') + self.check('Reopened F3D preserves BOM quantities, hierarchy and physical totals',support.equivalent(self.bom_normalized,normalized_bom(reopened)),reopened) + finally:self.document_id,self.target=saved_id,saved_target + self.native('close',documentId=result['reopened']['documentId']);self.native('activate',documentId=self.document_id) + self.report['acceptanceScope']['archiveModelGraph']='PASS' + def run(self): + code=super().run() + if self.report.get('overall')=='PASS_DIAGNOSTIC': + try: + docs=self.owned.manifest['documents'];artifacts=self.report['artifacts'] + latest=self.owned.manifest.get('cleanupLatest',{}) + self.check('Exact one source/reopen pair and one retained F3D artifact', + len(docs)==2 and len(artifacts)==1 and artifacts[0]['kind']=='native-archive' + and len(latest)==2 and all(v['status']=='PASS' for v in latest.values()), + {'documentIds':list(docs),'artifacts':artifacts,'cleanupLatest':latest}) + except BaseException as error: + self.report.update(native='FAIL',overall='FAIL',failure={'type':type(error).__name__,'message':str(error),'phase':'final-accounting'}) + code=1 + self.report['counts']={status:sum(c['status']==status for c in self.report['checks']) for status in ('PASS','FAIL')} + self.persist();return code + return ExplodedQualification + +def main(argv=None): + parser=argparse.ArgumentParser(description=__doc__);parser.add_argument('mode',choices=['plan','run'],nargs='?',default='plan') + for name in ('harness-evidence','probe-dir','diagnostic','witness-dir','product','product-sha','target','host-name','evidence','expect-bridge','expect-addin'):parser.add_argument('--'+name) + args=parser.parse_args(argv) + if args.mode=='plan': + print(json.dumps({'hostCalls':False,'images':False,'installedPublicRoute':'NOT_RUN','ownedDocuments':2,'fixtures':1,'cases':['explode','assemble','wrong-session','stale-revision'],'homeMatrices':HOMES,'samplesPerPlayback':5,'posesPerPlayback':30,'archive':'F3D full independent model/joint witness and BOM readback','cleanup':'inherited exact objects, original documents, preferences, pin and process identity'}));return 0 + need(all(vars(args).values()),'Every source, identity, version and evidence argument must be explicit') + diagnostic=load_diagnostic(args.diagnostic);source=Path(args.product).resolve();data=source.read_bytes();need(sha(data)==args.product_sha and data.decode().encode()==data,'Frozen product SHA/UTF8 differs') + extension,witness_files=witness_source(args.witness_dir);folder,files=diagnostic.verified_sources(args.harness_evidence,args.probe_dir);modules,_=diagnostic.load_sources(folder,files) + files.update(witness_files);files.update({'product/exploded_view.py':source,'runner/exploded_qualification.py':Path(__file__),'runner/test_exploded_qualification.py':Path(__file__).with_name('test_exploded_qualification.py'), 'runner/fixtures/native-initial-witness.json':Path(__file__).parent/'fixtures/native-initial-witness.json', 'runner/fixtures/provenance.json':Path(__file__).parent/'fixtures/provenance.json'}) + directory=Path(args.evidence);directory.mkdir(parents=True,exist_ok=False) + args.fixtures=['exploded_diagnostic'];args.iterations=1;args.inject_failure=None;args.shotlog_channel=None + runner=campaign_type(diagnostic,modules,files,extension,data.decode(),args.product_sha)(args) + def interrupted(signum,_):raise KeyboardInterrupt('Signal '+str(signum)) + signal.signal(signal.SIGTERM,interrupted);signal.signal(signal.SIGINT,interrupted) + code=runner.run();print(json.dumps({'overall':runner.report['overall'],'report':str(directory/'report.json'),'images':False}));return code + +if __name__=='__main__':sys.exit(main()) diff --git a/docs/exploded-plan-evidence-2026-10-06/runner-r3/fixtures/native-initial-witness.json b/docs/exploded-plan-evidence-2026-10-06/runner-r3/fixtures/native-initial-witness.json new file mode 100644 index 0000000000000000000000000000000000000000..0fecec9a6ad79261c4d3d2c24d723076d19e55d0 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/runner-r3/fixtures/native-initial-witness.json @@ -0,0 +1,1225 @@ +{ + "assemblies": { + "components": [ + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "", + "origins": [] + }, + { + "asbuilt": [ + { + "geometry": null, + "health": 0, + "message": "", + "motion": { + "type": "RigidJointMotion" + }, + "name": "Fixture rigid", + "node": { + "context": null, + "node": [ + "asbuilt", + 1, + 0 + ] + }, + "one": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "suppressed": false, + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "two": { + "context": null, + "node": [ + "occurrence", + 2 + ] + } + } + ], + "joints": [], + "links": [], + "name": "Carrier", + "origins": [] + }, + { + "asbuilt": [], + "joints": [], + "links": [], + "name": "Part", + "origins": [] + } + ], + "enums": { + "x": 0, + "y": 1, + "z": 2 + }, + "occurrences": [ + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 0 + ] + }, + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 1 + ] + }, + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + 14.999999999999991, + 15.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 2 + ] + }, + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [], + "component": { + "context": null, + "node": [ + "component", + 1 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 3 + ] + }, + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -34.99999999999999, + 45.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 4 + ] + }, + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodyCenters": [ + [ + -35.00000000000001, + 25.0, + 5.0 + ] + ], + "component": { + "context": null, + "node": [ + "component", + 2 + ] + }, + "grounded": false, + "groundedToParent": false, + "node": { + "context": null, + "node": [ + "occurrence", + 5 + ] + }, + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "pendingSnapshot": false, + "timelineMarker": 10 + }, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodies": [ + { + "bounds": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0162, + "material": "Aluminum", + "name": "Block", + "volume": 6000.0 + } + ], + "description": "", + "material": "Aluminum", + "name": "", + "partNumber": "EX-ROOT", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + }, + { + "attributes": {}, + "bodies": [], + "description": "", + "material": "Aluminum", + "name": "Carrier", + "partNumber": "2026-10-06-09-45-26-782", + "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": "Part", + "partNumber": "EX-PART", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Part section", + "profiles": 1 + } + ] + } + ], + "everyday": [ + { + "axes": [], + "name": "", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 20.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 30.0, + 0.0 + ], + "startPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 20.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 30.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [ + { + "driving": true, + "expression": "width", + "links": { + "entityOne": [ + "point", + 1 + ], + "entityTwo": [ + "point", + 2 + ] + }, + "name": "d4", + "orientation": 1, + "type": "adsk::fusion::SketchLinearDimension", + "value": 2.0 + }, + { + "driving": true, + "expression": "height", + "links": { + "entityOne": [ + "point", + 2 + ], + "entityTwo": [ + "point", + 3 + ] + }, + "name": "d5", + "orientation": 2, + "type": "adsk::fusion::SketchLinearDimension", + "value": 3.0 + } + ], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Base rectangle", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 20.0, + 30.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 30.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + }, + { + "axes": [], + "name": "Carrier", + "sketches": [] + }, + { + "axes": [], + "name": "Part", + "sketches": [ + { + "constraints": [], + "curvePointLinks": [ + { + "endSketchPoint": [ + "point", + 2 + ], + "startSketchPoint": [ + "point", + 1 + ] + }, + { + "endSketchPoint": [ + "point", + 3 + ], + "startSketchPoint": [ + "point", + 2 + ] + }, + { + "endSketchPoint": [ + "point", + 4 + ], + "startSketchPoint": [ + "point", + 3 + ] + }, + { + "endSketchPoint": [ + "point", + 1 + ], + "startSketchPoint": [ + "point", + 4 + ] + } + ], + "curves": [ + { + "construction": false, + "endSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 10.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 0.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 10.0, + 0.0 + ], + "startPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 10.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + }, + { + "construction": false, + "endSketchPoint": [ + 0.0, + 0.0, + 0.0 + ], + "fixed": false, + "fullyConstrained": false, + "geometry": { + "endPoint": [ + 0.0, + 0.0, + 0.0 + ], + "startPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "Line3D" + }, + "linked": false, + "reference": false, + "startSketchPoint": [ + 0.0, + 10.0, + 0.0 + ], + "type": "SketchLine" + } + ], + "deferred": false, + "dimensions": [], + "fullyConstrained": false, + "healthState": 0, + "message": "", + "name": "Part section", + "offsets": [], + "points": [ + { + "fixed": true, + "fullyConstrained": true, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 0.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 10.0, + 10.0, + 0.0 + ], + "reference": false + }, + { + "fixed": false, + "fullyConstrained": false, + "linked": false, + "position": [ + 0.0, + 10.0, + 0.0 + ], + "reference": false + } + ], + "revision": null + } + ] + } + ], + "instanceCount": 5, + "instanceVolume": 10000.0, + "occurrences": [ + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:1", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 40.0, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 29.999999999999996, + 9.999999999999991, + 0.0 + ], + [ + 40.00000000000001, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 34.99999999999999, + 14.999999999999991, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:1", + "transform": [ + -1.0000000000000004, + 4.440892098500627e-16, + 0.0, + 40.0, + -4.440892098500627e-16, + -1.0000000000000004, + 0.0, + 20.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + 9.999999999999991, + 9.999999999999998, + 0.0 + ], + [ + 19.999999999999996, + 20.0, + 10.0 + ] + ], + "centerOfMass": [ + 14.999999999999991, + 15.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:1+Part:2", + "transform": [ + -2.220446049250313e-16, + -1.0000000000000002, + 0.0, + 19.999999999999996, + 1.0000000000000002, + -2.220446049250313e-16, + 0.0, + 10.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [], + "component": "Carrier", + "path": "Carrier:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.0, + 1.2246467991473535e-16, + -1.0, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.0, + 40.0, + 0.0 + ], + [ + -30.0, + 50.0, + 10.0 + ] + ], + "centerOfMass": [ + -34.99999999999999, + 45.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:1", + "transform": [ + 9.957992501029594e-17, + 1.0000000000000002, + 0.0, + -40.0, + -1.0000000000000002, + 9.957992501029594e-17, + 0.0, + 50.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "bodies": [ + { + "bounds": [ + [ + -40.00000000000001, + 20.0, + 0.0 + ], + [ + -30.000000000000007, + 30.0, + 10.0 + ] + ], + "centerOfMass": [ + -35.00000000000001, + 25.0, + 5.0 + ], + "faces": 6, + "mass": 0.0026999999999999997, + "material": "Aluminum", + "name": "Body1", + "volume": 1000.0 + } + ], + "component": "Part", + "path": "Carrier:2+Part:2", + "transform": [ + -1.0, + -1.2246467991473535e-16, + 0.0, + -30.000000000000007, + 1.2246467991473535e-16, + -1.0, + 0.0, + 30.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "d8": "10.0 mm", + "d9": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 3.999999999999995, + 18.999999999999996, + 5.0 + ], + "mass": 0.027000000000000003, + "volume": 10000.0 + }, + "timelineCount": 10 +} diff --git a/docs/exploded-plan-evidence-2026-10-06/runner-r3/fixtures/provenance.json b/docs/exploded-plan-evidence-2026-10-06/runner-r3/fixtures/provenance.json new file mode 100644 index 0000000000000000000000000000000000000000..402f0951b5290a39a7c59cbc256d5e84ead439e9 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/runner-r3/fixtures/provenance.json @@ -0,0 +1,17 @@ +{ + "sourceReport": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-1/report.json", + "sourceReportSha256": "244acb7213ce92472ca09d7876884177d54b1303164ea519baf0ec2984f3365e", + "sourceCheck": "Exploded source fixture native volume", + "sourceStatus": { + "overall": "FAIL", + "cleanup": "PASS", + "probeAttempted": false, + "failure": { + "type": "ValueError", + "message": "Fixture rigid joint is not root-owned", + "fixture": "01-exploded_diagnostic" + } + }, + "extraction": "Exact parsed evidence object; only JSON whitespace/order serialization changed", + "witnessSha256": "41aab34118c2c70b0334a939297fe0a9ba88437a9ce28fd93520407b93c3c649" +} diff --git a/docs/exploded-plan-evidence-2026-10-06/runner-r3/manifest.json b/docs/exploded-plan-evidence-2026-10-06/runner-r3/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..f7542d785b684a423b242f7e50053a242a65db70 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/runner-r3/manifest.json @@ -0,0 +1,41 @@ +{ + "status": "SOURCE_FROZEN_NATIVE_PENDING", + "supersedes": "native-runner-r2 (unchanged; original native failure preserved)", + "scopeChange": "Only fixture oracle: measured shared Carrier joint owner with exact member/API-equality links. Product and host behavior unchanged.", + "hostExecutor": "root only after independent review", + "noImages": true, + "installedPublicRoute": "NOT_RUN", + "offlineTests": { + "pass": 27, + "fail": 0, + "logSha256": "04b9714513cea795fa0694c2f9e1b3388f5a9683085330dc3df04948c740b5cf" + }, + "productSourceSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "files": [ + { + "path": "exploded_qualification.py", + "sha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51", + "bytes": 28783 + }, + { + "path": "test_exploded_qualification.py", + "sha256": "bff3214a9ad531a0b7aecf8e39b081a9236a34bc2340f4fe2bb8dad51627f39d", + "bytes": 16474 + }, + { + "path": "NATIVE-RUNNER.md", + "sha256": "df2bb82b2fac96af94e0febb0ee6934d6d8cf3f0f70f7581769ca4f239136f25", + "bytes": 6217 + }, + { + "path": "fixtures/native-initial-witness.json", + "sha256": "41aab34118c2c70b0334a939297fe0a9ba88437a9ce28fd93520407b93c3c649", + "bytes": 26171 + }, + { + "path": "fixtures/provenance.json", + "sha256": "0abde04354abb3fee4c27ee2326587b0162456fd36ec7b59664f0d2dedb94d33", + "bytes": 718 + } + ] +} diff --git a/docs/exploded-plan-evidence-2026-10-06/runner-r3/test_exploded_qualification.py b/docs/exploded-plan-evidence-2026-10-06/runner-r3/test_exploded_qualification.py new file mode 100644 index 0000000000000000000000000000000000000000..71169d4ddcc734b415ac9fbdd98ca293885d0762 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/runner-r3/test_exploded_qualification.py @@ -0,0 +1,200 @@ +"""Offline adversarial runner-oracle boundaries; no host calls.""" +import ast, contextlib, copy, io, json, tempfile, unittest +from pathlib import Path +from types import SimpleNamespace +from unittest.mock import patch +import exploded_qualification as p + +TARGET={'documentId':'owned','revision':'rev'};SESSION='session' +REFS={role:dict(documentId='owned',revision='rev',objectType='adsk::fusion::Occurrence',token=role,occurrencePath=path) for role,path in p.PATHS.items()} + +def native(): + path=Path(__file__).parent/'fixtures/native-initial-witness.json' + receipt=json.loads((path.parent/'provenance.json').read_text()) + if p.sha(path.read_bytes())!=receipt['witnessSha256']:raise ValueError('Measured native witness checksum differs') + return json.loads(path.read_text()) + + +def plan(playback='explode'): + rows=[] + for role in p.ROLES: + component='Carrier' if role.startswith('carrier') else 'Part' + rows.append(dict(instanceId=role,path=p.PATHS[role],parentInstanceId=p.PARENTS[role],componentId=component, + occurrence=copy.deepcopy(REFS[role]),homeMatrix=list(p.HOMES[role]),label=dict(componentId=component,instance=p.PATHS[role],item=component))) + compiled=[];world=[[[30,0,0],[0,10,0]],[[-20,0,0],[0,-5,0]]];roles=[['carrier1','a1'],['a1','b2']] + for i,step in enumerate(p.steps(REFS)): + compiled.append({**{k:v for k,v in step.items() if k!='moves'},'index':i,'startSeconds':2*i,'endSeconds':2*(i+1), + 'moves':[dict(instanceId=roles[i][j],frame=m['frame'],distance=m['distance'],direction=[0,1,0] if i==1 and j==1 else [1,0,0],worldTranslation=world[i][j]) for j,m in enumerate(step['moves'])]}) + base=dict(sessionId=SESSION,target=copy.deepcopy(TARGET),units={'translation':'mm','time':'s'},space='root/world',durationSeconds=4,instances=rows,steps=compiled, + rootBodyGroup=dict(bodyCount=1,selectable=False,homeMatrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])) + samples=[] + for t in range(5): + forward=t if playback=='explode' else 4-t;poses=[] + for role in p.ROLES: + offset=p.OFFSETS[forward].get(role,[0,0,0]);matrix=list(p.HOMES[role]) + for i,v in zip((3,7,11),offset):matrix[i]+=v + poses.append(dict(instanceId=role,matrix=matrix,translationFromHome=list(offset))) + samples.append(dict(timeSeconds=t,forwardTimeSeconds=forward,stepProgress=[dict(stepIndex=i,fraction=x) for i,x in enumerate({0:[0,0],1:[.5,0],2:[1,0],3:[1,.5],4:[1,1]}[forward])],poses=poses)) + return dict(kind='PRESENTATION_PLAN',modelUnchanged=True,nativeMoved=False,graphicsCreated=False,rendered=False,storyboardCreated=False, + plan=base,planId=p.sha(json.dumps(base,sort_keys=True,separators=(',',':'),allow_nan=False).encode()),playback=playback,samples=samples) + +def good(): + cases=[] + for label,args,error in p.case_requests(SESSION,TARGET,REFS): + row=dict(case=label,args=args,success=error is None,before=native(),after=native(),independentStateUnchanged=True) + row.update(errorCode=error) if error else row.update(data=plan(label));cases.append(row) + return dict(success=True,documentId='owned',productQualification=dict(scope='module-function-native-api',installedPublicRoute='NOT_RUN',images=False,rendering='NOT_RUN',sourceSha256='sha',coreSha256=p.CORE_SHA,configSha256=p.CONFIG_SHA,initialTarget=copy.deepcopy(TARGET),finalTarget=copy.deepcopy(TARGET),cases=cases)) + +class RunnerBoundaries(unittest.TestCase): + def qualify(self,x):return p.qualify(x,'sha',SESSION,TARGET,REFS) + def checkplan(self,x,rehash=True): + # Model coherent faulty product output; an obsolete hash must not mask a + # missing geometry/identity oracle. Hash tampering is tested separately. + if rehash:x['planId']=p.sha(json.dumps(x['plan'],sort_keys=True,separators=(',',':'),allow_nan=False).encode()) + return p.qualify_plan(x,SESSION,TARGET,REFS,x['playback']) + def test_offline_default_plan_loads_no_sources(self): + with patch.object(p,'load_diagnostic',side_effect=AssertionError('source loaded')),contextlib.redirect_stdout(io.StringIO()) as output:self.assertEqual(p.main([]),0) + self.assertFalse(json.loads(output.getvalue())['hostCalls']);self.assertFalse(json.loads(output.getvalue())['images']) + def test_analytic_fixture_explode_and_reverse_accepted(self):self.assertEqual(len(self.qualify(good())['cases']),4) + def test_no_success_on_missing_case_or_unexpected_failure(self): + x=good();x['productQualification']['cases'].pop() + with self.assertRaises(ValueError):self.qualify(x) + x=good();x['productQualification']['cases'][0]['success']=False + with self.assertRaises(ValueError):self.qualify(x) + def test_refusal_must_be_exact_semantic_code(self): + for value in ('kernel_error','wrong_document',None): + x=good();x['productQualification']['cases'][3]['errorCode']=value + with self.subTest(value=value),self.assertRaises(ValueError):self.qualify(x) + def test_rigid_pair_member_order_is_not_an_unneeded_restriction(self): + x=native();j=x['assemblies']['components'][1]['asbuilt'][0];j['one'],j['two']=j['two'],j['one'];p.fixture_roles(x) + def test_identically_wrong_joint_members_in_before_after_refuse(self): + for bad in ({'node':['occurrence',4],'context':None},{'node':['occurrence',1],'context':None}): + x=good() + for key in ('before','after'):x['productQualification']['cases'][0][key]['assemblies']['components'][1]['asbuilt'][0]['two']=bad + with self.subTest(bad=bad),self.assertRaisesRegex(ValueError,'exact first-carrier children'):self.qualify(x) + def test_same_rigid_joint_under_root_or_part_owner_refuses(self): + for owner in (0,2): + x=native();components=x['assemblies']['components'];j=components[1]['asbuilt'].pop();components[owner]['asbuilt'].append(j);j['node']={'node':['asbuilt',owner,0],'context':None} + with self.subTest(owner=owner),self.assertRaisesRegex(ValueError,'Carrier-owned'):p.fixture_roles(x) + def test_measured_native_witness_and_component_owner_identity(self): + x=native();p.fixture_roles(x) + self.assertEqual(x['assemblies']['components'][1]['name'],'Carrier') + self.assertEqual(x['assemblies']['components'][1]['asbuilt'][0]['node'],{'node':['asbuilt',1,0],'context':None}) + x['assemblies']['occurrences'][3]['component']={'node':['component',2],'context':None} + with self.assertRaisesRegex(ValueError,'actual shared Carrier'):p.fixture_roles(x) + def test_carrier_name_does_not_excuse_wrong_joint_inventory_address(self): + x=native();x['assemblies']['components'][1]['asbuilt'][0]['node']={'node':['asbuilt',0,0],'context':None} + with self.assertRaisesRegex(ValueError,'Carrier joint inventory'):p.fixture_roles(x) + def test_second_carrier_members_or_duplicate_members_refuse(self): + for pair in ((4,5),(1,1)): + x=native();j=x['assemblies']['components'][1]['asbuilt'][0] + j['one']={'node':['occurrence',pair[0]],'context':None};j['two']={'node':['occurrence',pair[1]],'context':None} + with self.subTest(pair=pair),self.assertRaisesRegex(ValueError,'exact first-carrier children'):p.fixture_roles(x) + def test_duplicate_independent_occurrence_addresses_refuse(self): + x=native();x['assemblies']['occurrences'][2]['node']=x['assemblies']['occurrences'][1]['node'] + with self.assertRaisesRegex(ValueError,'addresses duplicate'):p.fixture_roles(x) + def test_repeated_carrier_presentation_label_must_match(self): + x=plan();x['plan']['instances'][3]['label']['item']='different label' + with self.assertRaisesRegex(ValueError,'Repeated carrier labels'):self.checkplan(x) + + def test_root_model_or_joint_change_is_not_hidden_by_unchanged_flag(self): + for change in ('volume','health','member'): + x=good();after=x['productQualification']['cases'][0]['after'] + if change=='volume':after['physical']['volume']=9000 + elif change=='health':after['assemblies']['components'][1]['asbuilt'][0]['health']=1 + else:after['assemblies']['components'][1]['asbuilt'][0]['one']='other' + with self.subTest(change=change),self.assertRaises(ValueError):self.qualify(x) + def test_duplicate_instances_or_sample_poses_refuse(self): + for field in ('instances','poses'): + x=plan();rows=x['plan']['instances'] if field=='instances' else x['samples'][2]['poses'];rows[-1]=copy.deepcopy(rows[0]) + with self.subTest(field=field),self.assertRaises(ValueError):self.checkplan(x) + def test_parent_context_and_definition_split_refuse(self): + for field,value in [('parentInstanceId','carrier2'),('componentId','wrong-definition')]: + x=plan();x['plan']['instances'][1][field]=value + with self.subTest(field=field),self.assertRaises(ValueError):self.checkplan(x) + def test_wrong_mm_scale_or_rotation_refuse(self): + for index in (3,0): + x=plan();x['plan']['instances'][0]['homeMatrix'][index]=4 + with self.subTest(index=index),self.assertRaises(ValueError):self.checkplan(x) + def test_ancestor_offset_doubled_or_child_offset_missing_refuse(self): + for xoffset in (60,30): + x=plan();child=x['samples'][2]['poses'][1];child['matrix'][3]=40+xoffset;child['matrix'][7]=20;child['translationFromHome']=[xoffset,0,0] + with self.subTest(xoffset=xoffset),self.assertRaises(ValueError):self.checkplan(x) + def test_local_world_parent_mixups_refuse(self): + x=plan();x['plan']['steps'][1]['moves'][0]['worldTranslation']=[20,0,0] + with self.assertRaises(ValueError):self.checkplan(x) + x=plan();x['samples'][4]['poses'][5]['matrix'][7]=35 + with self.assertRaises(ValueError):self.checkplan(x) + def test_wrong_order_progress_or_missing_simultaneous_move_refuses(self): + x=plan();x['samples'][1]['stepProgress'][1]['fraction']=.5 + with self.assertRaises(ValueError):self.checkplan(x) + x=plan();x['plan']['steps'][0]['moves'].pop() + with self.assertRaises(ValueError):self.checkplan(x) + def test_reverse_endpoint_requires_exact_home_not_tolerance(self): + x=plan('assemble');x['samples'][-1]['poses'][0]['matrix'][3]+=1e-10 + with self.assertRaises(ValueError):self.checkplan(x) + def test_scope_hash_and_identity_mismatch_refuse(self): + for field,value in [('sourceSha256','wrong'),('configSha256','wrong'),('installedPublicRoute','PASS'),('images',True)]: + x=good();x['productQualification'][field]=value + with self.subTest(field=field),self.assertRaises(ValueError):self.qualify(x) + x=plan();x['planId']='a'*64 + with self.assertRaises(ValueError):self.checkplan(x,rehash=False) + def test_changed_guarded_selection_refuses(self): + x=plan();x['plan']['instances'][1]['occurrence']['token']='other' + with self.assertRaises(ValueError):self.checkplan(x) + def test_nonfinite_or_unbounded_output_refuses(self): + x=good();x['padding']='a'*p.MAX_RESULT_BYTES + with self.assertRaises(ValueError):self.qualify(x) + x=good();x['productQualification']['cases'][0]['data']['samples'][0]['poses'][0]['matrix'][0]=float('nan') + with self.assertRaises(ValueError):self.qualify(x) + def test_generated_script_requires_exact_source_and_native_ownership(self): + requests=[] + def factory(action,**identity): + requests.append((action,identity));return "\nrequire(platform.node().lower() == REQUEST['host'].lower(), 'host')\n" + source='def exploded_view_plan(app,args): return {}\n' + program=p.execute_program(factory,'EXTRA_WITNESS = True\n',source,p.sha(source.encode()),REFS,SESSION,TARGET,run_id='owned_run_long',host='host',session_id=SESSION,document_id='owned') + ast.parse(program);self.assertEqual(requests[0][0],'witness');self.assertEqual(requests[0][1]['documentId'],'owned');self.assertNotIn('document_id',requests[0][1]) + self.assertIn('EXTRA_WITNESS = True',program);self.assertIn('Path(core.__file__).read_bytes()',program);self.assertIn('Path(config.__file__).read_bytes()',program) + self.assertNotIn('sys.modules[',program);self.assertNotIn('saveAsImageFile(',program);self.assertNotIn('startLocalRender(',program) + with self.assertRaises(ValueError):p.execute_program(factory,'',source,'wrong',REFS,SESSION,TARGET,document_id='owned') + def test_witness_injection_and_source_hash_fail_closed(self): + with self.assertRaises(ValueError):p.enriched(lambda *a,**k:'no marker','', 'witness') + with tempfile.TemporaryDirectory() as folder: + for name in p.WITNESS_FILES:(Path(folder)/name).write_text('raise AssertionError("not imported")') + with self.assertRaises(ValueError):p.witness_source(folder) + + def test_actual_native_source_ownership_prefix_executes_with_exact_document_id(self): + import builtins, importlib.util, sys, types + root=Path('/home/adom/project/research/fusion-roadmap-build-2026-10-02/pr10-current-integration/published-readback/tests') + extension,_=p.witness_source(root) + spec=importlib.util.spec_from_file_location('ownership_source_support',root/'ralph_support.py');support=importlib.util.module_from_spec(spec);spec.loader.exec_module(support) + source='def exploded_view_plan(app,args): return {}\n' + program=p.execute_program(support.native_script,extension,source,p.sha(source.encode()),REFS,SESSION,TARGET, + run_id='exact_owned_run_123',host='host',session_id=SESSION,document_id='owned') + tree=ast.parse(program) + # Execute the actual emitted lifecycle prefix and action. Replace only + # geometric witness reads with a fake native witness at the action boundary. + end=next(i for i,n in enumerate(tree.body) if isinstance(n,ast.Assign) and any(isinstance(t,ast.Name) and t.id=='PRODUCT' for t in n.targets)) + nodes=tree.body[:end];start=next(i for i,n in enumerate(nodes) if isinstance(n,ast.If) and isinstance(n.test,ast.Compare) and isinstance(n.test.left,ast.Name) and n.test.left.id=='action') + nodes.insert(start,ast.parse('witness = fake_witness').body[0]);code=compile(ast.fix_missing_locations(ast.Module(body=nodes,type_ignores=[])),'actual-owned-prefix','exec') + attributes={'owner':'exact_owned_run_123','documentId':'owned'} + design=SimpleNamespace(rootComponent=SimpleNamespace(attributes=SimpleNamespace(itemByName=lambda group,key:SimpleNamespace(value=attributes[key])))) + doc=SimpleNamespace(name='Untitled',isSaved=False,products=SimpleNamespace(itemByProductType=lambda kind:design)) + run={'sessionId':SESSION,'documents':{'owned':{'object':doc,'documentId':'owned','name':'Untitled','closed':False}},'baselineObjects':[]} + module=types.ModuleType('independent_qualified.mechanical.core');module.SESSION_ID=SESSION + namespace={'app':SimpleNamespace(activeDocument=doc,documents=[doc]),'adsk':SimpleNamespace(fusion=SimpleNamespace(Design=SimpleNamespace(cast=lambda x:x))), 'fake_witness':lambda d:{'exactObject':d is doc}} + with patch.dict(sys.modules,{'independent_qualified.mechanical.core':module}),patch.object(builtins,'_adom_mechanical_ralph_runs',{'exact_owned_run_123':run},create=True),patch('platform.node',return_value='host'): + exec(code,namespace);self.assertEqual(namespace['result'],{'success':True,'documentId':'owned','witness':{'exactObject':True}}) + attributes['owner']='foreign-run' + with self.assertRaisesRegex(RuntimeError,'ownership marker'):exec(code,dict(namespace)) + + def test_images_forbidden_and_checkpoint_defaults_no_capture(self): + class FakeBase:pass + diagnostic=SimpleNamespace(campaign_type=lambda *args:FakeBase) + cls=p.campaign_type(diagnostic,{'ralph_support':SimpleNamespace()}, {},'','','') + runner=object.__new__(cls) + with self.assertRaisesRegex(RuntimeError,'Images'):runner.native('capture') + with self.assertRaisesRegex(RuntimeError,'Images'):runner.checkpoint(capture=True) + tree=ast.parse(Path(p.__file__).read_text());self.assertFalse(any(isinstance(n,ast.Call) and isinstance(n.func,ast.Attribute) and n.func.attr in ('startLocalRender','saveAsImageFile') for n in ast.walk(tree))) + +if __name__=='__main__':unittest.main(verbosity=2) diff --git a/docs/exploded-plan-evidence-2026-10-06/source-manifest-r2.json b/docs/exploded-plan-evidence-2026-10-06/source-manifest-r2.json new file mode 100644 index 0000000000000000000000000000000000000000..0745dc054436f61049389db4227cdc9ebe6a2b21 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/source-manifest-r2.json @@ -0,0 +1,68 @@ +{ + "status": "SOURCE_FROZEN_NATIVE_PENDING", + "publicationBaseCommit": "9f51bab1f80a4f5660788ef2174c1649d0cf9d8f", + "publicationBase": "/home/adom/project/research/fusion-roadmap-build-2026-10-02/cp9-render-preparation/published-readback", + "previousRuntimeFreeze": "../product-source-r1/manifest.json", + "runtimeFilesUnchanged": true, + "workingTree": "/home/adom/project/fusion-explode-next", + "entry": "exploded_view.exploded_view_plan(app,args)", + "operations": 56, + "publicVerbs": 179, + "versionChanges": false, + "offlineTests": "496 PASS retained; documentation-only baseline synchronization", + "nativeExplodeAcceptance": "PENDING", + "renderAcceptance": "native function PASS; installed public route NOT_RUN", + "sourceReview": "/tmp/fusion-roadmap-adversary/exploded-plan/review.json", + "files": [ + { + "path": "CHANGELOG.md", + "sha256": "2a4b52d6c455be9016718319da733e0c9292ecf497afd1a55b29dd8c287b595c", + "bytes": 97862 + }, + { + "path": "addin/AdomBridge/commands/mechanical/__init__.py", + "sha256": "7b13ece4cc18baef0567fc9d1a95c996817c2d197d5610a516d88aef7ed0e413", + "bytes": 10571 + }, + { + "path": "addin/AdomBridge/commands/mechanical/exploded_view.py", + "sha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "bytes": 14948 + }, + { + "path": "addin/AdomBridge/commands/mechanical/schema.json", + "sha256": "7bd3199eed3878953190f0901fc3c1cec5419b7011411e8b3011a6b91ab3e558", + "bytes": 177105 + }, + { + "path": "contracts/describe.json", + "sha256": "ec64fe3539f8c558781a616414d2f277e5f1e630ec8fb6e746a3d752baede8ea", + "bytes": 642876 + }, + { + "path": "docs/EXPLODED-VIEWS.md", + "sha256": "c35152885c7d7b8b4a621d29d18f86b2c5b64fb9e41b780256015d0d33158fd9", + "bytes": 8042 + }, + { + "path": "docs/MECHANICAL.md", + "sha256": "e31a925e1a845676c9eec1b9f110b08b94c531c2dbca1691f0c1b2407be9e25b", + "bytes": 31880 + }, + { + "path": "docs/implementation-roadmap.md", + "sha256": "a582bfd8e0e7464a63630797fdb076d8f736b40fb584d20d8eea6108aeb68fe6", + "bytes": 6212 + }, + { + "path": "docs/mechanical-comparison/CHECKPOINT-STATUS.md", + "sha256": "a3273d6f3f9a2eced530938c82fec053acd794dce9352b364cd13f03a33eaa73", + "bytes": 5385 + }, + { + "path": "tests/test_mechanical_exploded_view.py", + "sha256": "9899dec343db34711b314571510eef98a090fd17d4ad41e987efeeca5a2a55cf", + "bytes": 14481 + } + ] +} diff --git a/docs/exploded-plan-evidence-2026-10-06/source-root-validation.json b/docs/exploded-plan-evidence-2026-10-06/source-root-validation.json new file mode 100644 index 0000000000000000000000000000000000000000..5106913af65fb9cc7333d6a455e0c8f874bb412b --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/source-root-validation.json @@ -0,0 +1,24 @@ +{ + "status": "PASS_SOURCE", + "focusedTests": 17, + "builderFullPythonTests": 496, + "publicVerbs": 179, + "typedOperations": 56, + "sourceChanged": false, + "windowsExecutable": { + "bytes": 8165376, + "sha256": "e8121ac95172c1d9d1ed1463ee8697d78da58a1e0afc83677323286ade7aa753", + "catalogEmbedded": true + }, + "nativeFunction": "PENDING", + "installedPublicRoute": "NOT_RUN", + "captures": 0, + "shotlogUploads": 0, + "runnerBoundaryTests": 24, + "independentPoseOracle": { + "scenarios": 30, + "poses": 840, + "status": "PASS" + }, + "runnerRevision": 2 +} diff --git a/docs/exploded-plan-evidence-2026-10-06/verifier-audit.py b/docs/exploded-plan-evidence-2026-10-06/verifier-audit.py new file mode 100644 index 0000000000000000000000000000000000000000..d2e858933611db81917742fc3005a75bed0899c7 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/verifier-audit.py @@ -0,0 +1,134 @@ +"""Independent terminal-evidence audit. Standard library only; no host calls.""" +from pathlib import Path +import hashlib,json,math +V=Path('/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2') +OUT=Path(__file__).parent +SOURCE='a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f' +RUNNER='78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51' +CORE='9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a' +CONFIG='f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0' +def digest(data):return hashlib.sha256(data).hexdigest() +def canonical(data):return json.dumps(data,sort_keys=True,separators=(',',':'),allow_nan=False).encode() +def need(x,text): + if not x:raise AssertionError(text) +def equal(a,b): + if isinstance(b,dict):return isinstance(a,dict) and a.keys()==b.keys() and all(equal(a[k],v) for k,v in b.items()) + if isinstance(b,list):return isinstance(a,list) and len(a)==len(b) and all(equal(x,y) for x,y in zip(a,b)) + if type(b) in (int,float):return type(a) in (int,float) and math.isfinite(a) and math.isclose(a,b,rel_tol=1e-7,abs_tol=1e-7) + return type(a) is type(b) and a==b +report_bytes=(V/'report.json').read_bytes();report=json.loads(report_bytes);ownership=json.loads((V/'ownership.json').read_text()) +need(report['overall']=='PASS_DIAGNOSTIC' and report['native']=='PASS' and report['cleanup']=='PASS','Not a terminal successful qualification') +need(not report.get('failure'),'Failure retained in supposed passing run') +need(len(report['checks'])==16 and all(x['status']=='PASS' for x in report['checks']) and report['counts']=={'PASS':16,'FAIL':0},'Check accounting differs') +need(report['acceptanceScope']=={'productFunction':'PASS','installedPublicRoute':'NOT_RUN','rendering':'NOT_RUN','images':False,'archiveModelGraph':'PASS'},'Acceptance scope expanded') +sources=[] +for row in report['diagnosticSources']: + path=Path(row['path']).resolve();need(path.is_relative_to(V),'Source path outside evidence');need(digest(path.read_bytes())==row['sha256'],'Source SHA differs '+row['name']);sources.append({k:row[k] for k in ('name','sha256')}) +need(len(sources)==15 and len({x['name'] for x in sources})==15,'Source inventory not unique/complete') +by_source={x['name']:x['sha256'] for x in sources};need(by_source['product/exploded_view.py']==SOURCE and by_source['runner/exploded_qualification.py']==RUNNER,'Unexpected candidate or runner source') +q=report['productProbe']['productQualification'];target=q['initialTarget'];session=report['sessionId'] +need(q['sourceSha256']==SOURCE and q['coreSha256']==CORE and q['configSha256']==CONFIG,'Native source bindings differ') +need(q['scope']=='module-function-native-api' and q['installedPublicRoute']=='NOT_RUN' and q['images'] is False and q['rendering']=='NOT_RUN','Native scope differs') +need(q['finalTarget']==target and target['documentId'] in ownership['documents'],'Wrong final target/owned identity') +need(report['productProbe']['documentId']==target['documentId'] and report['productProbe']['success'] is True,'Outer native ownership result differs') +need([x['case'] for x in q['cases']]==['explode','assemble','wrong-session','stale-revision'],'Wrong cases or order') +P=['Carrier:1','Carrier:1+Part:1','Carrier:1+Part:2','Carrier:2','Carrier:2+Part:1','Carrier:2+Part:2'] +# Analytic fixture: root rotations90/180, first children local90; second children local0. +H=[ [0,-1,0,40,1,0,0,10,0,0,1,0,0,0,0,1],[-1,0,0,40,0,-1,0,20,0,0,1,0,0,0,0,1], + [0,-1,0,20,1,0,0,10,0,0,1,0,0,0,0,1],[-1,0,0,-30,0,-1,0,50,0,0,1,0,0,0,0,1], + [0,1,0,-40,-1,0,0,50,0,0,1,0,0,0,0,1],[-1,0,0,-30,0,-1,0,30,0,0,1,0,0,0,0,1] ] +expectedMoves=[[(P[0],'world',[1,0,0],30,[30,0,0]),(P[1],'parent',[1,0,0],10,[0,10,0])],[(P[1],'local',[1,0,0],20,[-20,0,0]),(P[5],'parent',[0,1,0],5,[0,-5,0])]] +pose_count=0;max_translation_error=0;max_rotation_error=0;case_summary=[] +first_witness=q['cases'][0]['before'] +for idx,row in enumerate(q['cases']): + need(row['independentStateUnchanged'] is True and equal(row['before'],row['after']) and equal(row['before'],first_witness),'Native graph changed during/between cases') + graph=row['before']['assemblies'];comps=graph['components'];need([x['name'] for x in comps]==['','Carrier','Part'],'Fixture component graph differs') + need([len(x['asbuilt']) for x in comps]==[0,1,0] and not any(x[k] for x in comps for k in ('joints','origins','links')),'Joint graph count/owner differs') + joint=comps[1]['asbuilt'][0];nodes={x['path']:x['node'] for x in graph['occurrences']} + need(joint['node']=={'node':['asbuilt',1,0],'context':None} and joint['health']==0 and joint['suppressed'] is False and joint['motion']['type']=='RigidJointMotion','Joint identity/health differs') + need(joint['one']!=joint['two'] and {canonical(joint['one']),canonical(joint['two'])}=={canonical(nodes[P[1]]),canonical(nodes[P[2]])},'Wrong repeated-instance joint member') + need(graph['pendingSnapshot'] is False and graph['timelineMarker']==row['before']['timelineCount'],'Pending or rolled-back model') + need(equal(row['before']['physical']['volume'],10000) and equal(row['before']['instanceVolume'],10000) and row['before']['instanceCount']==5,'Physical source totals differ') + if idx>=2: + need(row['success'] is False and row['errorCode']==('session_mismatch' if idx==2 else 'stale_revision'),'Guard failure was not the exact intended refusal') + need(row['args']['sessionId']==(session+'-wrong' if idx==2 else session),'Guard session perturbation differs') + need(row['args']['target']==(target if idx==2 else {**target,'revision':target['revision']+'-wrong'}),'Guard revision perturbation differs') + case_summary.append({'case':row['case'],'refusal':row['errorCode'],'modelUnchanged':True});continue + need(row['success'] is True and row['args']['sessionId']==session and row['args']['target']==target,'Positive request identity differs') + d=row['data'];plan=d['plan'];need(all(d[k] is False for k in ('nativeMoved','graphicsCreated','rendered','storyboardCreated')) and d['modelUnchanged'] is True,'Unexpected native effect') + need(plan['sessionId']==session and plan['target']==target and plan['units']=={'time':'s','translation':'mm'} and plan['space']=='root/world','Plan identity/units differ') + need(d['planId']==digest(canonical(plan)),'Plan content hash differs');need(d['playback']==row['case'] and plan['durationSeconds']==4,'Playback timing differs') + instances=plan['instances'];need(len(instances)==6 and len({x['instanceId'] for x in instances})==6 and len({x['path'] for x in instances})==6,'Instances are not six unique values') + by_path={x['path']:x for x in instances};need(set(by_path)==set(P),'Instance paths differ');by_id={x['instanceId']:x for x in instances} + need(len({by_path[P[i]]['componentId'] for i in (0,3)})==1 and len({by_path[P[i]]['componentId'] for i in (1,2,4,5)})==1 and by_path[P[0]]['componentId']!=by_path[P[1]]['componentId'],'Repeated definition identity differs') + need(len({by_path[P[i]]['label']['item'] for i in (0,3)})==1 and len({by_path[P[i]]['label']['item'] for i in (1,2,4,5)})==1 and by_path[P[0]]['label']['item']!=by_path[P[1]]['label']['item'],'Repeated labels differ') + for i,path in enumerate(P): + r=by_path[path];need(equal(r['homeMatrix'],H[i]),'Analytic home matrix differs '+path) + parent=None if i in (0,3) else by_path[P[0 if i<3 else 3]]['instanceId'];need(r['parentInstanceId']==parent,'Wrong parent identity') + need(r['occurrence']['documentId']==target['documentId'] and r['occurrence']['revision']==target['revision'] and r['occurrence']['occurrencePath']==path,'Wrong guarded instance reference') + need(plan['rootBodyGroup']['bodyCount']==1 and plan['rootBodyGroup']['selectable'] is False,'Root body group differs') + need(len(plan['steps'])==2 and len(row['args']['steps'])==2,'Step count differs') + for i,step in enumerate(plan['steps']): + req=row['args']['steps'][i];need(step['durationSeconds']==2 and step['startSeconds']==i*2 and step['endSeconds']==(i+1)*2 and step['index']==i,'Wrong step timing') + need(step['title']==req['title'] and step['instruction']==req['instruction'] and len(step['moves'])==2 and len(req['moves'])==2,'Wrong instructions or grouping') + for move,arg,expected in zip(step['moves'],req['moves'],expectedMoves[i]): + path,frame,direction,distance,world=expected + need(move['instanceId']==by_path[path]['instanceId'] and arg['occurrence']==by_path[path]['occurrence'],'Wrong selected instance') + need(move['frame']==arg['frame']==frame and move['distance']==arg['distance']==distance and equal(move['direction'],direction) and equal(move['worldTranslation'],world),'Frame conversion or distance differs') + need(len(d['samples'])==5,'Missing samples') + for t,sample in enumerate(d['samples']): + f=t if idx==0 else 4-t;u=min(f/2,1);v=max((f-2)/2,0) + need(sample['timeSeconds']==t and sample['forwardTimeSeconds']==f and equal(sample['stepProgress'],[{'stepIndex':0,'fraction':u},{'stepIndex':1,'fraction':v}]),'Sample order/progress differs') + poses=sample['poses'];need(len(poses)==6 and len({x['instanceId'] for x in poses})==6 and set(by_id)=={x['instanceId'] for x in poses},'Missing/duplicated sample pose') + lookup={x['instanceId']:x for x in poses};offsets=[[30*u,0,0],[30*u-20*v,10*u,0],[30*u,0,0],[0,0,0],[0,0,0],[0,-5*v,0]] + for i,path in enumerate(P): + inst=by_path[path];pose=lookup[inst['instanceId']];expected=list(H[i]) + for k,value in zip((3,7,11),offsets[i]):expected[k]+=value + need(equal(pose['matrix'],expected) and equal(pose['translationFromHome'],offsets[i]),'Pose/inheritance mismatch '+path+' time '+str(t)) + if f==0:need(pose['matrix']==inst['homeMatrix'],'Home endpoint is not exact') + for k in (3,7,11):max_translation_error=max(max_translation_error,abs(pose['matrix'][k]-expected[k])) + for k in (0,1,2,4,5,6,8,9,10):max_rotation_error=max(max_rotation_error,abs(pose['matrix'][k]-expected[k])) + pose_count+=1 + case_summary.append({'case':row['case'],'instances':6,'samples':5,'poseChecks':30,'exactHomeEndpoint':True,'modelUnchanged':True}) +need(pose_count==60,'Wrong total pose count');need(q['cases'][0]['data']['planId']==q['cases'][1]['data']['planId'],'Reverse playback changed plan identity') +need(equal(report['bomBefore'],report['bomAfter']),'Public BOM changed during plan calls') +def bom_signature(bom): + need(bom['complete'] is True and not bom['excluded'] and len(bom['parts'])==2 and len({x['partNumber'] for x in bom['parts']})==2,'BOM definitions are missing/duplicated') + need({x['partNumber']:x['quantity'] for x in bom['parts']}=={'EX-ROOT':1,'EX-PART':4},'Wrong purchasing quantities') + need(len(bom['instances'])==7 and len({x['path'] for x in bom['instances']})==7 and equal(bom['physical']['volume'],10000) and bom['physical']['bodyInstances']==5,'Wrong BOM tree/physical quantity') + return {'parts':sorted([{k:x[k] for k in ('partNumber','quantity','unitMass','unitVolume','scope','occurrencePaths')} for x in bom['parts']],key=lambda x:x['partNumber']), 'instances':sorted([{k:x[k] for k in ('path','parentPath','depth','childCount','bodyCount','asPurchased')} for x in bom['instances']],key=lambda x:x['path']),'physical':bom['physical'],'units':bom['units']} +checks={x['label']:x['evidence'] for x in report['checks']} +need(equal(bom_signature(report['bomBefore']),bom_signature(checks['Reopened F3D preserves BOM quantities, hierarchy and physical totals'])),'Reopened BOM differs') +# Find the actual native archive comparison result in raw envelopes (including JSON-string transport wrappers). +def walk(value): + if isinstance(value,dict): + yield value + for v in value.values():yield from walk(v) + elif isinstance(value,list): + for v in value:yield from walk(v) + elif isinstance(value,str) and value.lstrip().startswith(('{','[')): + try:parsed=json.loads(value) + except (ValueError,TypeError):return + yield from walk(parsed) +archive_rows=[];probe_rows=[] +for path in sorted((V/'calls').glob('*.json')): + raw=json.loads(path.read_text()) + if raw['verb']!='fusion_run_modeling_script':continue + for node in walk(raw['raw']): + if all(k in node for k in ('archive','before','after','source','reopened')):archive_rows.append((path,node)) + if 'productQualification' in node:probe_rows.append((path,node)) +archives={digest(canonical(row)): (path,row) for path,row in archive_rows};need(len(archives)==1,'Native archive result missing/ambiguous');archive_path,archive_result=next(iter(archives.values())) +need(equal(archive_result['before'],archive_result['after']) and equal(archive_result['before'],first_witness),'Archived/reopened full geometry and joint graph differs') +need(any(node==report['productProbe'] for _,node in probe_rows),'Reported product probe is not in raw native receipts') +artifacts=report['artifacts'];need(len(artifacts)==1 and artifacts[0]['kind']=='native-archive','Unexpected artifact count/type');artifact=artifacts[0];ap=Path(artifact['path']).resolve();need(ap.is_relative_to(V) and digest(ap.read_bytes())==artifact['sha256'] and len(ap.read_bytes())==artifact['bytes'],'F3D artifact identity differs') +need(archive_result['archive']['sha256']==artifact['sha256'],'Transferred archive does not match native roundtrip') +need(len(ownership['documents'])==2 and not ownership.get('pendingRegistrations'),'Ownership accounting differs') +closed=[x['raw'] for x in report['cleanupLatest'].values()];need(len(closed)==2 and {x['closedDocumentId'] for x in closed}==set(ownership['documents']) and all(x['success'] is True and x['closed'] is True for x in closed),'Exact owned close receipts differ') +need({archive_result[k]['documentId'] for k in ('source','reopened')}==set(ownership['documents']),'Archive source/reopened IDs differ from owned closure IDs') +need(report['finalHost']['success'] is True and report['finalHost']['documents']==report['baseline']['native']['documents'] and report['finalHost']['activeCreationId']==report['baseline']['native']['activeCreationId'],'Original document state differs') +need(checks['Preferences preserved']==report['baseline']['preferences'],'Preferences changed') +need(all(checks['Runtime configuration and development pin preserved'][k]==v for k,v in report['baseline']['runtime'].items() if k!='runningVersion'),'Runtime pin/configuration changed') +need(all(report['finalRuntimeIdentity'][k]==report['baseline']['liveIdentity'][k] for k in ('host','pid','port','executablePath','processCreatedUtc')),'Runtime identity changed') +need((V/'report.json').read_bytes()==report_bytes,'Report changed while auditing') +result={'verdict':'PASS_MODULE_NATIVE_QUALIFICATION','scope':'module-function-native-api','installedPublicRoute':'NOT_RUN','images':False,'rendering':'NOT_RUN','report':str(V/'report.json'),'reportSha256':digest(report_bytes),'runId':report['runId'],'runnerSha256':RUNNER,'productSha256':SOURCE,'dependencyHashes':{'core':CORE,'configurations':CONFIG},'sourceFilesVerified':len(sources),'caseResults':case_summary,'posesVerified':pose_count,'maxTranslationErrorMm':max_translation_error,'maxRotationEntryError':max_rotation_error,'modelAndJointGraphUnchanged':True,'bomUnchangedAndReopened':True,'archiveReceipt':str(archive_path),'artifact':artifact,'ownedClosures':closed,'originalCreationId':report['finalHost']['activeCreationId'],'preferencesPinProcessPreserved':True,'reportedChecks':{'PASS':16,'FAIL':0},'unresolvedFindings':[],'limits':['Finite explicit-translation fixture; no automatic layout, rotation interpolation, collision or physical disassembly qualification.','Native temporary module function qualified; installed CLI/HTTP operation and reference reuse across sessions NOT_RUN.','No images, native graphics, storyboard or rendering qualification.'],'auditSourceSha256':digest(Path(__file__).read_bytes())} +(OUT/'acceptance.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2)) diff --git a/docs/exploded-plan-evidence-2026-10-06/verifier-docs-review.json b/docs/exploded-plan-evidence-2026-10-06/verifier-docs-review.json new file mode 100644 index 0000000000000000000000000000000000000000..96be710597d83ebb1b1ed034fc90fed69100caf5 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/verifier-docs-review.json @@ -0,0 +1,33 @@ +{ + "verdict": "CLAIMS_MATCH_BOUNDED_EVIDENCE", + "files": [ + { + "path": "/home/adom/project/fusion-explode-next/docs/build-2026-10-06-exploded-plans.md", + "sha256": "c66a7d6230fbf6f29029848de0d0343e26fddd1d04f9a8da297659cde75b3cbb" + }, + { + "path": "/home/adom/project/fusion-explode-next/docs/EXPLODED-VIEWS.md", + "sha256": "e7e06842343b19ceba8f25e1695b6aff6a2dd6f987c8058d067f66375e840728" + }, + { + "path": "/home/adom/project/fusion-explode-next/docs/MECHANICAL.md", + "sha256": "415e25c277ded425666a614e3793b77e1ffc1973dab48b797f9d1d112b865520" + }, + { + "path": "/home/adom/project/fusion-explode-next/CHANGELOG.md", + "sha256": "e2c99ccce54968933d79c82bdc316a1f78a8a2936823d057ed63159568b43caa" + }, + { + "path": "/home/adom/project/fusion-explode-next/docs/exploded-plan-evidence-2026-10-06/acceptance.json", + "sha256": "f7531bee5a78fb3b81fe7604092a8ae498e77520c3512649855d15cd0ddcf583" + } + ], + "nativeInstances": 6, + "nativeSampledPoses": 60, + "nativeChecks": 16, + "nativeScope": "module-function-native-api", + "installedPublicRoute": "NOT_RUN", + "imagesAndRendering": "NOT_RUN", + "history": "Original before-product failure preserved; Carrier-owner correction stated accurately.", + "note": "Evidence index.json was still being assembled at review time. Historical source-root-validation.json records earlier runner r2/pending native; current acceptance correctly records final r3/27 boundary tests." +} diff --git a/docs/exploded-plan-evidence-2026-10-06/verifier-native-acceptance.json b/docs/exploded-plan-evidence-2026-10-06/verifier-native-acceptance.json new file mode 100644 index 0000000000000000000000000000000000000000..b45bcb0a8f641b880ff92950a33c02cb7e14d896 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/verifier-native-acceptance.json @@ -0,0 +1,84 @@ +{ + "verdict": "PASS_MODULE_NATIVE_QUALIFICATION", + "scope": "module-function-native-api", + "installedPublicRoute": "NOT_RUN", + "images": false, + "rendering": "NOT_RUN", + "report": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/report.json", + "reportSha256": "c5c0450da2fb66af1f6336a00f91f9b19da248b97058b92247a114dad01332bb", + "runId": "20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c", + "runnerSha256": "78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51", + "productSha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "dependencyHashes": { + "core": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "configurations": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0" + }, + "sourceFilesVerified": 15, + "caseResults": [ + { + "case": "explode", + "instances": 6, + "samples": 5, + "poseChecks": 30, + "exactHomeEndpoint": true, + "modelUnchanged": true + }, + { + "case": "assemble", + "instances": 6, + "samples": 5, + "poseChecks": 30, + "exactHomeEndpoint": true, + "modelUnchanged": true + }, + { + "case": "wrong-session", + "refusal": "session_mismatch", + "modelUnchanged": true + }, + { + "case": "stale-revision", + "refusal": "stale_revision", + "modelUnchanged": true + } + ], + "posesVerified": 60, + "maxTranslationErrorMm": 1.4210854715202004e-14, + "maxRotationEntryError": 4.440892098500627e-16, + "modelAndJointGraphUnchanged": true, + "bomUnchangedAndReopened": true, + "archiveReceipt": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/calls/0053-fusion_run_modeling_script.json", + "artifact": { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/exploded-product-native-2/artifacts/01-exploded_diagnostic-4431f3d4.f3d", + "sha256": "0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504", + "bytes": 58578, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T165332Z-a1ac7040c50b468ba0a4840b73a83c8c/01-exploded_diagnostic-4431f3d4.f3d", + "fixture": "01-exploded_diagnostic" + }, + "ownedClosures": [ + { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:314347ef-10f3-498b-b5ab-463a37b5406b", + "success": true + }, + { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:b6ec36a2-f4f2-4dc4-b75c-891fae6ca4df", + "success": true + } + ], + "originalCreationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "preferencesPinProcessPreserved": true, + "reportedChecks": { + "PASS": 16, + "FAIL": 0 + }, + "unresolvedFindings": [], + "limits": [ + "Finite explicit-translation fixture; no automatic layout, rotation interpolation, collision or physical disassembly qualification.", + "Native temporary module function qualified; installed CLI/HTTP operation and reference reuse across sessions NOT_RUN.", + "No images, native graphics, storyboard or rendering qualification." + ], + "auditSourceSha256": "6457200cfd48fb142d7a6442fa393ea8b93a768765cb8d051ae29066ee2c85b5" +} diff --git a/docs/exploded-plan-evidence-2026-10-06/verifier-native-acceptance.md b/docs/exploded-plan-evidence-2026-10-06/verifier-native-acceptance.md new file mode 100644 index 0000000000000000000000000000000000000000..4588a58b7b40834a549cb556908cfa6a5022346e --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/verifier-native-acceptance.md @@ -0,0 +1,13 @@ +# Independent exploded-plan native acceptance + +**PASS for the frozen module function in native Fusion. No unresolved behavioral finding.** Installed public dispatch, graphics, storyboards, images and rendering remain NOT_RUN. + +Independently recalculated every returned pose: six exact instances ร— five samples ร— two playback directions = **60 poses**. World, parent and local directions, simultaneous grouping, ordered progress, ancestor inheritance and child offsets match the analytic fixture. Reverse endpoints equal the exact native home matrices. Maximum translation discrepancy from analytic values was 1.43e-14 mm (floating-point noise). Wrong-session and stale-revision cases return the exact intended errors. + +All four cases preserve the independent complete fixture geometry/constraint/attachment/pose witness. The sole healthy rigid joint is owned by the shared Carrier definition and retains exactly the first-Carrier child members. Public BOM quantities, instance hierarchy and physical totals remain unchanged and survive F3D reopen. The actual archive result was checked in raw call0053, and its bytes match SHA-256 `0048f493bbda35535b94eaedc1e7427a05d6869664d79652965fe31dbbba3504` (58,578 bytes). + +Both exact owned documents are closed. Original pristine Untitled creationId `cdf1e4ec-a727-4ffe-8975-d10e11191864`, preferences, development pin and runtime process identity are restored/preserved. All 16 recorded checks pass. All 15 copied source files match their recorded hashes; the reported product output is present in the raw native response. + +Product source: `a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f`. Runner: `78df74db64bd76cabe488a266b810e427f2bbd1be79fa1ba6cf93862f9db4f51`. Terminal report: `c5c0450da2fb66af1f6336a00f91f9b19da248b97058b92247a114dad01332bb`. + +`audit.py` is a standalone standard-library evidence verifier; `acceptance.json` records its findings and hashes. `docs-review.json` binds the reviewed publication wording. Current docs describe this finite function qualification accurately and preserve the original runner failure. This review performed no host calls or images. diff --git a/docs/exploded-plan-evidence-2026-10-06/windows-build.json b/docs/exploded-plan-evidence-2026-10-06/windows-build.json new file mode 100644 index 0000000000000000000000000000000000000000..cba33de29a87bc2f22475aa03a4df376e46c6013 --- /dev/null +++ b/docs/exploded-plan-evidence-2026-10-06/windows-build.json @@ -0,0 +1,499 @@ +{ + "runId": "20261006T162957Z-c7ca29f8dd", + "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": "7b13ece4cc18baef0567fc9d1a95c996817c2d197d5610a516d88aef7ed0e413", + "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/exploded_view.py": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f", + "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/render_scene.py": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55", + "addin/AdomBridge/commands/mechanical/schema.json": "7bd3199eed3878953190f0901fc3c1cec5419b7011411e8b3011a6b91ab3e558", + "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": "ec64fe3539f8c558781a616414d2f277e5f1e630ec8fb6e746a3d752baede8ea", + "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_exploded_view.py": "9899dec343db34711b314571510eef98a090fd17d4ad41e987efeeca5a2a55cf", + "tests/test_mechanical_regular_joints.py": "7688bb79489ca7f3be92ff2b811da555dc29fe1f347d9751d4dd3119ae45dbb4", + "tests/test_mechanical_render_scene.py": "eb7db13f925e2e719c97476b140194b61f685344532c37454b1b03b811ae3a7d", + "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": [ + "portability", + "shadow", + "windows" + ], + "groups": [ + { + "group": "portability", + "command": [ + "bash", + "tools/check-portable.sh" + ], + "cwd": "/home/adom/project/fusion-explode-next", + "status": "PASS", + "coverageKind": "static", + "returncode": 0, + "seconds": 0.266 + }, + { + "group": "shadow", + "command": [ + "/usr/bin/python3", + "tools/shadow_check.py", + "/home/adom/project/fusion-explode-next/ab_client.py", + "/home/adom/project/fusion-explode-next/ad_client.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/AdomBridge.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/__init__.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/activity_palette.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/app_state.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/assembly_bom.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/close_document.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/cloud_documents.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/design_info.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/document_hygiene.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/document_info.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/electron_view.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/electronics.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/export.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/import_file.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/manufacturing.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/__init__.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/assemblies.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/assembly_state.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/bill_of_materials.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/configurations.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/core.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/exploded_view.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/exporting.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/features.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/geometry.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/joint_state.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/journal.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/motion_links.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/operation_history.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/operations.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/purchased.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/readback.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/regular_joints.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/render_scene.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/sketch_edits.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/sketches.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/mechanical/transactions.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/modeling.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/open_electronics_file.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/open_lbr.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/parameters.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/physical_properties.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/screenshot.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/commands/silkscreen_capture.py", + "/home/adom/project/fusion-explode-next/addin/AdomBridge/http_server.py", + "/home/adom/project/fusion-explode-next/aps.py", + "/home/adom/project/fusion-explode-next/describe.py", + "/home/adom/project/fusion-explode-next/eagle_lbr.py", + "/home/adom/project/fusion-explode-next/fusion_detect.py", + "/home/adom/project/fusion-explode-next/fusion_helper.py", + "/home/adom/project/fusion-explode-next/fusion_ui.py", + "/home/adom/project/fusion-explode-next/handlers/__init__.py", + "/home/adom/project/fusion-explode-next/handlers/close_fusion.py", + "/home/adom/project/fusion-explode-next/handlers/dialog_classify.py", + "/home/adom/project/fusion-explode-next/handlers/dismiss_recovery.py", + "/home/adom/project/fusion-explode-next/handlers/fusion_ui.py", + "/home/adom/project/fusion-explode-next/handlers/open_design.py", + "/home/adom/project/fusion-explode-next/handlers/taskbar_overlay.py", + "/home/adom/project/fusion-explode-next/install_addin.py", + "/home/adom/project/fusion-explode-next/kicad_lbr.py", + "/home/adom/project/fusion-explode-next/library_bundle.py", + "/home/adom/project/fusion-explode-next/rust/bridge/src/attach_orient_block.py", + "/home/adom/project/fusion-explode-next/rust/bridge/src/inspect_bodies_script.py", + "/home/adom/project/fusion-explode-next/rust/bridge/src/make3d_orient_block.py", + "/home/adom/project/fusion-explode-next/rust/bridge/src/make3d_placement_block.py", + "/home/adom/project/fusion-explode-next/rust/bridge/src/pref_script.py", + "/home/adom/project/fusion-explode-next/rust/bridge/src/routing_planner.py", + "/home/adom/project/fusion-explode-next/rust/bridge/src/routing_script.py", + "/home/adom/project/fusion-explode-next/server.py", + "/home/adom/project/fusion-explode-next/tests/fusion_harness.py", + "/home/adom/project/fusion-explode-next/tests/job_acceptance/busy/adjudicate_saved.py", + "/home/adom/project/fusion-explode-next/tests/job_acceptance/busy/busy_status.py", + "/home/adom/project/fusion-explode-next/tests/job_acceptance/busy/test_busy_status.py", + "/home/adom/project/fusion-explode-next/tests/job_acceptance/history/history_acceptance.py", + "/home/adom/project/fusion-explode-next/tests/job_acceptance/history/test_history_acceptance.py", + "/home/adom/project/fusion-explode-next/tests/ralph_assemblies.py", + "/home/adom/project/fusion-explode-next/tests/ralph_everyday.py", + "/home/adom/project/fusion-explode-next/tests/ralph_jobs.py", + "/home/adom/project/fusion-explode-next/tests/ralph_mechanical.py", + "/home/adom/project/fusion-explode-next/tests/ralph_support.py", + "/home/adom/project/fusion-explode-next/tests/run_verb_tests.py", + "/home/adom/project/fusion-explode-next/tests/test_addin_lifecycle.py", + "/home/adom/project/fusion-explode-next/tests/test_bridge_contracts.py", + "/home/adom/project/fusion-explode-next/tests/test_document_hygiene.py", + "/home/adom/project/fusion-explode-next/tests/test_fusion_harness.py", + "/home/adom/project/fusion-explode-next/tests/test_http_server.py", + "/home/adom/project/fusion-explode-next/tests/test_live_feed_drain.py", + "/home/adom/project/fusion-explode-next/tests/test_mechanical.py", + "/home/adom/project/fusion-explode-next/tests/test_mechanical_assemblies.py", + "/home/adom/project/fusion-explode-next/tests/test_mechanical_configurations.py", + "/home/adom/project/fusion-explode-next/tests/test_mechanical_everyday.py", + "/home/adom/project/fusion-explode-next/tests/test_mechanical_exploded_view.py", + "/home/adom/project/fusion-explode-next/tests/test_mechanical_regular_joints.py", + "/home/adom/project/fusion-explode-next/tests/test_mechanical_render_scene.py", + "/home/adom/project/fusion-explode-next/tests/test_mechanical_transactions.py", + "/home/adom/project/fusion-explode-next/tests/test_operation_dispatch.py", + "/home/adom/project/fusion-explode-next/tests/test_operation_history.py", + "/home/adom/project/fusion-explode-next/tests/test_operation_journal.py", + "/home/adom/project/fusion-explode-next/tests/test_operation_status_route.py", + "/home/adom/project/fusion-explode-next/tests/test_portable_tree.py", + "/home/adom/project/fusion-explode-next/tests/test_ralph_assemblies.py", + "/home/adom/project/fusion-explode-next/tests/test_ralph_campaign.py", + "/home/adom/project/fusion-explode-next/tests/test_ralph_everyday.py", + "/home/adom/project/fusion-explode-next/tests/test_ralph_jobs.py", + "/home/adom/project/fusion-explode-next/tests/test_routing.py", + "/home/adom/project/fusion-explode-next/timings.py", + "/home/adom/project/fusion-explode-next/tools/abrun.py", + "/home/adom/project/fusion-explode-next/tools/adrun.py", + "/home/adom/project/fusion-explode-next/tools/check-bridge.py", + "/home/adom/project/fusion-explode-next/tools/check_portable_tree.py", + "/home/adom/project/fusion-explode-next/tools/freeze-contract.py", + "/home/adom/project/fusion-explode-next/tools/gen-readme-verbs.py", + "/home/adom/project/fusion-explode-next/tools/live_feed_drain.py", + "/home/adom/project/fusion-explode-next/tools/package-mechanical-dev.py", + "/home/adom/project/fusion-explode-next/tools/promote.py", + "/home/adom/project/fusion-explode-next/tools/shadow_check.py", + "/home/adom/project/fusion-explode-next/tools/video/compose.py" + ], + "cwd": "/home/adom/project/fusion-explode-next", + "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.521 + }, + { + "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-explode-next/rust", + "status": "PASS", + "coverageKind": "build", + "returncode": 0, + "seconds": 137.936 + } + ], + "status": "PASS", + "sourceChanged": false +} diff --git a/docs/implementation-roadmap.md b/docs/implementation-roadmap.md index afe28843a79f766aa459a72faa69fb5d45515cf7..462799193ede869db8fa25edc8fa390b9c4bc2de 100644 --- a/docs/implementation-roadmap.md +++ b/docs/implementation-roadmap.md @@ -1,10 +1,10 @@ # Fusion implementation roadmap -Approved for implementation on October 2, 2026 after the mechanical audit and -the first three development checkpoints. Continue publishing verified changes -on `mechanical-design-2026-10-02` / PR #10. Production promotion remains a -separate action. The existing `1.12.0-dev.3` source and native evidence are the -baseline; do not overwrite their records. +Implementation was approved on October 2, 2026 after the mechanical audit and +the first three development checkpoints. PR #10 is now superseded by the current +foundation PR #11; subsequent verified features use separate review branches. +Production promotion remains a separate action. Historical development source +and native evidence remain unchanged and tied to their recorded builds. ## Current source checkpoint โ€” October 6, 2026 @@ -21,6 +21,15 @@ views and ordered assembly instructions remain a core upcoming animation requirement; [the presentation-backend plan](EXPLODED-VIEWS.md) is documentation only in this checkpoint. +The next isolated source checkpoint adds `exploded_view_plan` as operation 56: +ordered/simultaneous translation steps, source-linked labels and deterministic +finite explode/reassembly poses. Native module-function qualification passed all +60 poses, unchanged source/joint/BOM state and F3D reopening on Fusion 2705.1.30; +installed public routing remains untested. See [the evidence](build-2026-10-06-exploded-plans.md). +This is numeric +planning only; graphics previews, trails, rendering, video and native storyboards +remain future backends. Source poses and engineering BOM quantities are not edited. + ## Delivery order 1. Harden the maintained test harness and integrate repeatable background diff --git a/docs/mechanical-comparison/CHECKPOINT-STATUS.md b/docs/mechanical-comparison/CHECKPOINT-STATUS.md index 6652dc2e5a1cdfa55802cf6cac86ee955ac47cf6..4a7d19d38853656c2b0f61e2edc382ba8d2da8ea 100644 --- a/docs/mechanical-comparison/CHECKPOINT-STATUS.md +++ b/docs/mechanical-comparison/CHECKPOINT-STATUS.md @@ -17,6 +17,7 @@ operation is not proof that every native variant has passed. | Configuration inspection | dev.7 read-only subset | Table/ordinary/reserved-row identities and explicit per-field diagnostics. Incomplete cell reads prevent complete BOM claims. Native conversion did not roll back after Abort; configured writes and full configured archive recovery remain gated. | | Mechanical operation history | dev.8 accepted ordinary, busy and terminal-history subset | Durable admission and terminal results, exact duplicate replay and changed-payload refusal. Independent native ordinary, saved busy-interval and controlled-restart terminal-history evidence pass. Native interruption and storage-fault acceptance remain separate gates. No render/cancel job API is implied. | | Scene inspection and detached camera | Source candidate; native function verified, installed-public route not run | `render_scene_inspect` adds bounded settings/environment observations and optional detached world-mm camera construction/readback. Missing current-camera data remains partial. No viewport/settings assignment, rendering, full scene witness or queue-ownership claim. The candidate has 55 typed operations and 179 public verbs; release versions are unchanged. See [the operation contract](../MECHANICAL.md#inspect-render-settings-and-prepare-a-detached-camera). | +| Exploded assembly planning | Source candidate; native function verified, installed public route not run | `exploded_view_plan` returns exact instance home matrices, normalized home-fixed world/parent/local translations, step instructions, component-linked labels and bounded forward/reverse pose samples. Source geometry/joints and BOM quantities are not edited. This candidate has 56 typed operations and 179 public verbs. See [the planning contract](../EXPLODED-VIEWS.md). | | Rendering jobs and animation workspaces | Planned | Exploded assembly views, ordered steps, BOM-linked labels, trails and reversible presentation poses are a core next-checkpoint requirement; see [the plan](../EXPLODED-VIEWS.md). Copied presentation geometry must preserve source joints and placements. Native storyboard action authoring and still-render/video lifecycle remain separately unqualified. | | Drawings/manufacturing/advanced geometry/Compute | Planned | The original inventory's gaps and API/entitlement qualifications remain applicable. | diff --git a/tests/test_mechanical_exploded_view.py b/tests/test_mechanical_exploded_view.py new file mode 100644 index 0000000000000000000000000000000000000000..82ee7be508d7f838d142f57b58e1b4b520ddfce7 --- /dev/null +++ b/tests/test_mechanical_exploded_view.py @@ -0,0 +1,222 @@ +"""Independent frame, hierarchy, identity and boundary tests; no native motion.""" +import copy +import importlib +import math +import threading +from types import SimpleNamespace as NS +import unittest +from unittest.mock import patch +from test_mechanical import m,c,Entity,Collection + +plan=importlib.import_module('mechanical_test_commands.mechanical.exploded_view') + + +def pose(x=0,y=0,z=0,angle=0): + co,si=math.cos(math.radians(angle)),math.sin(math.radians(angle)) + return [co,-si,0,x/10, si,co,0,y/10, 0,0,1,z/10, 0,0,0,1] + + +def fixture(): + design=Entity();root=Entity(objectType='adsk::fusion::Component',name='Root',partNumber='',entityToken='root',parentDesign=design,bRepBodies=Collection([object()])) + design.rootComponent=root + shared=Entity(objectType='adsk::fusion::Component',name='Assembly',partNumber='DUP',entityToken='shared',parentDesign=design) + pin=Entity(objectType='adsk::fusion::Component',name='Pin',partNumber='DUP',entityToken='pin',parentDesign=design) + token_map={'root':[root],'shared':[shared],'pin':[pin]} + def occ(path,comp,matrix,parent=None,native=None): + token='occ-'+path if native is None else native.entityToken + value=Entity(objectType='adsk::fusion::Occurrence',entityToken=token,fullPathName=path, + component=comp,assemblyContext=parent,nativeObject=native,transform2=NS(asArray=lambda:list(matrix)),childOccurrences=Collection()) + if token not in token_map:token_map[token]=[value] + return value + a=occ('Assembly:1',shared,pose(100,0,angle=90));b=occ('Assembly:2',shared,pose(0,200,angle=180)) + native_pin=occ('Pin:1',pin,pose(10,0,angle=30)) + ap=occ('Assembly:1+Pin:1',pin,pose(100,10,angle=120),a,native_pin) + bp=occ('Assembly:2+Pin:1',pin,pose(-10,200,angle=210),b,native_pin) + a.childOccurrences=Collection([ap]);b.childOccurrences=Collection([bp]) + root.occurrences=Collection([b,a]);root.allOccurrences=Collection([bp,b,ap,a]) + design.findEntityByToken=lambda token:token_map.get(token,[]) + document=Entity(isSaved=False,isModified=True) + value={'documentId':'doc','revision':'revision'} + return NS(design=design,root=root,a=a,b=b,ap=ap,bp=bp,pin=pin,shared=shared,doc=document,value=value,app=object(),tokens=token_map) + + +class Exploded(unittest.TestCase): + def setUp(self): + c._entities.clear();self.f=fixture() + self.config={'configured':False,'isConfiguration':False,'configurationRowId':'','table':None,'complete':True} + self.t=patch.object(plan,'target',return_value=(self.f.doc,self.f.design,self.f.value)).start() + self.cfg=patch.object(plan,'configuration_snapshot',return_value=self.config).start() + self.addCleanup(patch.stopall) + def move(self,occ=None,frame='world',distance=5,direction=None): + return {'occurrence':c.ref(occ or self.f.ap,self.f.value),'direction':direction or [1,0,0],'distance':distance,'frame':frame} + def args(self,steps=None,**extra): + return {'op':'exploded_view_plan','sessionId':plan.SESSION_ID,'target':self.f.value,'unit':'mm', + 'steps':steps or [{'durationSeconds':1,'moves':[self.move()]}],**extra} + def read(self,**args):return plan.exploded_view_plan(self.f.app,self.args(**args)) + def positions(self,result,index=-1): + paths={row['instanceId']:row['path'] for row in result['plan']['instances']} + return {paths[row['instanceId']]:[row['matrix'][i] for i in (3,7,11)] for row in result['samples'][index]['poses']} + + def test_root_parent_local_frames_for_rotated_repeated_instances(self): + for frame,expected in [('world',[105,10,0]),('parent',[100,15,0]),('local',[97.5,10+5*math.sqrt(3)/2,0])]: + result=self.read(steps=[{'durationSeconds':1,'moves':[self.move(frame=frame)]}]) + actual=self.positions(result)['Assembly:1+Pin:1'] + for a,b in zip(actual,expected):self.assertAlmostEqual(a,b) + self.assertEqual(self.positions(result)['Assembly:2+Pin:1'],[-10,200,0]) + result=self.read(steps=[{'durationSeconds':1,'moves':[self.move(self.f.bp,frame='parent')]}]) + for actual,expected in zip(self.positions(result)['Assembly:2+Pin:1'],[-15,200,0]):self.assertAlmostEqual(actual,expected) + + def test_simultaneous_ancestor_child_add_once_then_ordered_child_move(self): + steps=[{'durationSeconds':2,'title':'Lift subassembly','instruction':'Keep the pin aligned.', + 'moves':[self.move(self.f.a,frame='local',distance=10),self.move(frame='parent')]}, + {'durationSeconds':1,'title':'Remove pin','moves':[self.move(distance=4)]}] + result=self.read(steps=steps,sampleTimes=[1,2,2.5]) + expected=[[100,10,0],[100,17.5,0],[100,25,0],[102,25,0],[104,25,0]] + for index,point in enumerate(expected): + for actual,wanted in zip(self.positions(result,index)['Assembly:1+Pin:1'],point):self.assertAlmostEqual(actual,wanted) + self.assertEqual(result['plan']['steps'][0]['instruction'],'Keep the pin aligned.') + self.assertEqual(self.positions(result)['Assembly:2+Pin:1'],[-10,200,0]) + self.assertFalse(result['nativeMoved']);self.assertTrue(result['modelUnchanged']) + + def test_three_level_ancestor_propagation_has_no_duplicate_offsets(self): + g=Entity(objectType='adsk::fusion::Occurrence',entityToken='g',fullPathName='Assembly:1+Pin:1+Tip:1',component=self.f.pin, + assemblyContext=self.f.ap,nativeObject=None,transform2=NS(asArray=lambda:pose(100,10,2)),childOccurrences=Collection()) + self.f.ap.childOccurrences=Collection([g]);self.f.root.allOccurrences.values.append(g);self.f.tokens['g']=[g] + result=self.read(steps=[{'durationSeconds':1,'moves':[self.move(self.f.a,distance=2),self.move(distance=3),self.move(g,distance=4)]}]) + self.assertEqual(self.positions(result)[g.fullPathName],[109,10,2]) + + def test_reverse_samples_are_forward_reversed_and_home_endpoint_exact(self): + args=self.args(steps=[{'durationSeconds':2,'moves':[self.move(frame='local',distance=12)]}],sampleTimes=[.5,1,1.5]) + before=copy.deepcopy(args) + forward=plan.exploded_view_plan(self.f.app,args) + reverse=plan.exploded_view_plan(self.f.app,{**args,'playback':'assemble'}) + self.assertEqual(args,before);self.assertEqual(forward['planId'],reverse['planId']) + for a,b in zip(forward['samples'],reversed(reverse['samples'])):self.assertEqual(a['poses'],b['poses']) + homes={r['instanceId']:r['homeMatrix'] for r in reverse['plan']['instances']} + for row in reverse['samples'][-1]['poses']: + self.assertEqual(row['matrix'],homes[row['instanceId']]);self.assertEqual(row['translationFromHome'],[0,0,0]) + + def test_distinct_instances_and_duplicate_part_numbers_keep_labels_and_quantities_separate(self): + result=self.read();rows=result['plan']['instances'] + self.assertEqual(len({r['instanceId'] for r in rows}),4) + self.assertEqual(len({r['label']['instance'] for r in rows}),4) + self.assertEqual(len({r['label']['item'] for r in rows}),2) + self.assertEqual({r['partNumber'] for r in rows},{'DUP'}) + self.assertEqual(result['plan']['rootBodyGroup']['bodyCount'],1) + self.assertFalse(result['plan']['rootBodyGroup']['selectable']) + self.assertFalse(any('quantity' in r for r in rows)) + + def test_home_axes_remain_fixed_across_steps_and_direction_is_normalized(self): + result=self.read(steps=[{'durationSeconds':1,'moves':[self.move(self.f.a,distance=10)]}, + {'durationSeconds':1,'moves':[self.move(frame='parent',direction=[100,0,0])]}]) + self.assertEqual(result['plan']['steps'][1]['moves'][0]['direction'],[1,0,0]) + for a,b in zip(self.positions(result)['Assembly:1+Pin:1'],[110,15,0]):self.assertAlmostEqual(a,b) + + def test_invalid_inputs_fail_before_target(self): + invalid=[{'unit':'cm'},{'playback':'forward'},{'sampleTimes':[float('nan')]},{'sampleTimes':[2]}, + {'sampleTimes':[True]}, {'steps':[{'durationSeconds':0,'moves':[self.move()]}]}, + {'steps':[{'durationSeconds':1,'moves':[self.move(direction=[0,0,0])]}]}, + {'steps':[{'durationSeconds':1,'moves':[self.move(distance=-1)]}]}, + {'steps':[{'durationSeconds':1,'moves':[self.move(distance=True)]}]}, + {'steps':[{'durationSeconds':1,'moves':[self.move(direction=[float('inf'),0,0])]}]}, + {'steps':[{'durationSeconds':1,'instruction':'x'*1025,'moves':[self.move()]}]}] + for change in invalid: + with self.subTest(change=change),self.assertRaises(c.MechanicalError):plan.exploded_view_plan(self.f.app,{**self.args(),**change}) + self.t.assert_not_called() + + def test_unrepresentable_duration_and_strict_timing_bounds_refuse(self): + steps=[{'durationSeconds':3600,'moves':[self.move()]},{'durationSeconds':1e-20,'moves':[self.move()]}] + with self.assertRaises(c.MechanicalError):self.read(steps=steps) + self.t.assert_not_called() + result=self.read(steps=[{'durationSeconds':1,'moves':[self.move()]},{'durationSeconds':1,'moves':[self.move()]}],sampleTimes=[1]) + self.assertEqual(result['samples'][1]['stepProgress'],[{'stepIndex':0,'fraction':1.},{'stepIndex':1,'fraction':0.}]) + self.assertEqual(result['samples'][-1]['stepProgress'],[{'stepIndex':0,'fraction':1.},{'stepIndex':1,'fraction':1.}]) + + def test_duplicate_simultaneous_instance_and_foreign_or_stale_refs_refuse(self): + for moves in ([self.move(),self.move()], [{**self.move(),'occurrence':{**self.move()['occurrence'],'revision':'old'}}], + [{**self.move(),'occurrence':c.ref(self.f.pin,self.f.value)}]): + with self.assertRaises(c.MechanicalError):self.read(steps=[{'durationSeconds':1,'moves':moves}]) + + def test_unknown_parent_identity_or_incomplete_tree_refuses(self): + original=self.f.ap.assemblyContext + self.f.ap.assemblyContext=self.f.b + with self.assertRaises(c.MechanicalError) as error:self.read() + self.assertEqual(error.exception.code,'invalid_context') + self.f.ap.assemblyContext=original + self.f.a.childOccurrences=Collection() + with self.assertRaises(c.MechanicalError):self.read() + + def test_same_path_foreign_wrapper_and_duplicate_path_refuse(self): + self.f.a.childOccurrences=Collection([copy.copy(self.f.ap)]) + with self.assertRaises(c.MechanicalError):self.read() + self.f.a.childOccurrences=Collection([self.f.ap]);self.f.root.allOccurrences.values.append(self.f.ap) + with self.assertRaises(c.MechanicalError):self.read() + + def test_nonrigid_nonfinite_and_malformed_native_matrices_refuse(self): + bad=[] + x=pose();x[0]=2;bad.append(x) + x=pose();x[0]=-1;bad.append(x) + x=pose();x[3]=float('nan');bad.append(x) + x=pose();x[15]=0;bad.append(x) + x=pose();x[0]=True;bad.append(x) + bad.append([1]*15) + for values in bad: + self.f.ap.transform2=NS(asArray=lambda:values) + with self.subTest(values=values),self.assertRaises(c.MechanicalError):self.read() + + def test_budget_refusals_are_explicit_and_never_truncated_success(self): + with patch.object(plan,'MAX_POSES',1): + with self.assertRaises(c.MechanicalError) as error:self.read() + self.assertEqual(error.exception.code,'plan_budget') + with patch.object(plan,'MAX_OUTPUT_BYTES',10): + with self.assertRaises(c.MechanicalError) as error:self.read() + self.assertEqual(error.exception.code,'plan_budget') + self.f.root.allOccurrences=NS(count=257,item=lambda _:self.fail('Must not enumerate')) + with self.assertRaises(c.MechanicalError):self.read() + + def test_worker_session_and_stale_target_precede_native_snapshot(self): + errors=[] + def worker(): + try:self.read() + except c.MechanicalError as error:errors.append(error.code) + thread=threading.Thread(target=worker);thread.start();thread.join() + self.assertEqual(errors,['wrong_thread']);self.t.assert_not_called();self.cfg.assert_not_called() + with self.assertRaises(c.MechanicalError):plan.exploded_view_plan(self.f.app,{**self.args(),'sessionId':'old'}) + self.t.assert_not_called() + self.t.side_effect=c.MechanicalError('stale_revision','changed') + with self.assertRaises(c.MechanicalError):self.read() + self.cfg.assert_not_called() + + def test_midread_model_and_flags_changes_refuse_without_restore(self): + original=plan.sample_plan + def changed(*args): + self.f.doc.isModified=False + return original(*args) + with patch.object(plan,'sample_plan',side_effect=changed): + with self.assertRaises(c.MechanicalError) as error:self.read() + self.assertEqual(error.exception.code,'plan_source_changed');self.assertFalse(self.f.doc.isModified) + self.f.doc.isModified=True + def moved(*args): + self.f.ap.transform2=NS(asArray=lambda:pose(200,10)) + return original(*args) + with patch.object(plan,'sample_plan',side_effect=moved): + with self.assertRaises(c.MechanicalError):self.read() + self.assertEqual(self.f.ap.transform2.asArray()[3],20) + + def test_incomplete_configuration_refuses_and_exact_configuration_is_bound(self): + result=self.read();self.assertTrue(result['plan']['configuration']['graphComplete']) + self.cfg.side_effect=c.MechanicalError('configuration_scope_unsupported','incomplete') + with self.assertRaises(c.MechanicalError) as error:self.read() + self.assertEqual(error.exception.code,'configuration_scope_unsupported') + + def test_real_registration_read_schema_and_immutable_sampling(self): + self.assertEqual(len(m.SCHEMA),56);self.assertNotIn('exploded_view_plan',m.WRITES) + frozen,write=m.prepare_request(self.args());self.assertFalse(write) + result=self.read();snapshot={k:result['plan'][k] for k in ('instances','rootBodyGroup')} + before=copy.deepcopy(snapshot) + self.assertEqual(plan.sample_plan(snapshot,result['plan']['steps'],[0,1],1,'explode'),result['samples']) + self.assertEqual(snapshot,before) + self.assertFalse(result['graphicsCreated']);self.assertFalse(result['storyboardCreated']);self.assertFalse(result['rendered']) + + +if __name__=='__main__':unittest.main()