diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a916004726ecfa3defb70a1f861b181b9e7ce44..b0c1fc36e5b3bc40f30dcd5bece58617a9524377 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 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. +- Prepare and verify an optional detached world-space camera without assigning it to the viewport or changing render settings. No render execution, complete scene witness, queue ownership or pixel-output qualification is provided. Production and add-in release versions remain unchanged. +- Preserve false transient camera validity flags reported by Fusion (Autodesk FUS-263280), while independently checking the exact newly created Camera wrapper and geometry/lens readback. Other native-object guards remain unchanged. + ## Unreleased integration (2026-10-06) - Integrate the mechanical foundation with current master while preserving newer routing and electronics workflows. Regenerate the combined 179-verb contract; retain all 54 typed mechanical operations. diff --git a/README.md b/README.md index bdd016fca7062f57bb5c2d20e94b19c45f85da19..c744da4a5ed0f94560991fbb626cf925cb71e613 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. [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. 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 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 da54e1e40f6904cf34d1a7ead49bb92f35c5ca5a..c0a025151e51cb60eee844c6186632619bbe0b1d 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 +from . import transactions, sketches, features, assemblies, purchased, bill_of_materials, geometry, sketch_edits, regular_joints, motion_links, configurations, render_scene for _name, _handler in {**sketches.OPERATIONS, **features.OPERATIONS, **assemblies.OPERATIONS, **geometry.OPERATIONS, **sketch_edits.OPERATIONS, **regular_joints.OPERATIONS, **motion_links.OPERATIONS}.items(): @@ -23,6 +23,7 @@ OPERATIONS.update(assemblies.READS) OPERATIONS.update(geometry.READS) OPERATIONS.update(sketch_edits.READS) OPERATIONS.update(configurations.READS) +OPERATIONS.update(render_scene.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/render_scene.py b/addin/AdomBridge/commands/mechanical/render_scene.py new file mode 100644 index 0000000000000000000000000000000000000000..74dd4812bab38d0143aedd7cbf36444c54abbf66 --- /dev/null +++ b/addin/AdomBridge/commands/mechanical/render_scene.py @@ -0,0 +1,345 @@ +"""Bounded scene observation and detached camera preparation; never renders. + +All native access occurs on the main thread. Missing fields remain explicit; +this is not a complete scene witness or evidence of native queue ownership. +""" +import inspect +import json +import math +import threading + +from .core import SESSION_ID, MechanicalError, require, target + +MAX_ENVIRONMENTS = 32 +MAX_OUTPUT_BYTES = 128 * 1024 + + +def scene_observation(app, document, design, *, max_environments=16): + import adsk.core + import adsk.fusion + + def need(value, message): + if not value: raise RuntimeError(message) + + need(threading.current_thread() is threading.main_thread(), 'Native render reads require the main thread') + need(type(max_environments) is int and 0 <= max_environments <= MAX_ENVIRONMENTS, 'Invalid environment probe budget') + need(document is not None and document.isValid and design is not None and design.isValid, 'Owned native design is invalid') + need(app.activeDocument == document and design.parentDocument == document, 'Current native document/design identity differs') + document_count = app.documents.count + need(type(document_count) is int and 0 <= document_count <= 128, 'Open document inventory exceeds probe budget or has invalid count') + need(sum(app.documents.item(i) == document for i in range(document_count)) == 1, 'Exact owned document is not uniquely open') + result = {'schemaVersion':1, 'status':'OBSERVED', 'renderStarted':False, 'settingsWritten':False, + 'sceneWitnessComplete':False, 'renderQualified':False, 'nativeQueueIdle':'UNVERIFIED', 'exclusiveSettingsOwnership':'UNVERIFIED', + 'errors':[], 'classes':{}, 'camera':{}, 'rendering':{}, 'scene':{}, 'environments':{}, + 'gaps':['No render execution or RenderFuture instance was created.', + 'No global renderer queue/coexistence proof.', + 'Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.', + 'Environment IDs and names do not prove custom environment content identity.', + 'No admitted revision-to-pixels or full source snapshot claim.']} + + def text(value): + need(isinstance(value,str) and len(value) <= 256, 'Native string exceeds probe budget or has wrong type') + return value + + def number(value): + need(type(value) in (int,float) and math.isfinite(value), 'Native scalar is not a finite number') + return value + + def boolean(value): + need(type(value) is bool, 'Native scalar is not Boolean') + return value + + def enum(value): + need(not isinstance(value,(bool,str)), 'Native enum has invalid type') + result = int(value) + need(result == value, 'Native enum is not an exact integer') + return result + + def point(value, scale=10): + return [number(number(getattr(value,axis)) * scale) for axis in ('x','y','z')] + + def read(path, callback, unit=None, native_unit=None): + try: + data = callback() + row = {'available':True,'value':data} + if unit is not None: row['unit'] = unit + if native_unit is not None: row['nativeUnit'] = native_unit + return row + except Exception as error: + reason = str(error)[:512] + result['errors'].append({'field':path,'error':reason}) + return {'available':False,'error':reason} + + def skipped(reason): return {'available':None,'notRead':reason} + + def object_read(path, callback): + try: + value = callback() + need(value is not None and value.isValid, 'Native object absent or invalid') + text(value.objectType) + return value, {'available':True,'objectType':value.objectType} + except Exception as error: + reason = str(error)[:512] + result['errors'].append({'field':path,'error':reason}) + return None, {'available':False,'error':reason} + + def fields(destination, prefix, owner, specs): + for name, converter, unit, native_unit in specs: + destination[name] = read(prefix + '.' + name, lambda name=name,converter=converter:converter(getattr(owner,name)), unit, native_unit) + + result['documentBefore'] = {'modified':read('document.modified',lambda:boolean(document.isModified)), + 'saved':read('document.saved',lambda:boolean(document.isSaved))} + # Static class inspection does not invoke descriptors, constructors, start, + # activation, cancel or any native future polling. + class_members = {'RenderManager':('rendering','sceneSettings','renderEnvironments','lights','isRenderWorkspaceActive'), + 'Rendering':('startLocalRender','aspectRatio','resolution','resolutionWidth','resolutionHeight','renderQuality','isBackgroundTransparent'), + 'RenderFuture':('filename','imageWidth','imageHeight','progress','renderState','isValid'), + 'SceneSettings':('backgroundType','backgroundEnvironment','backgroundSolidColor','isDepthOfFieldEnabled'), + 'RenderEnvironment':('id','name','isCustomEnvironment')} + for name,members in class_members.items(): + try: + cls = getattr(adsk.fusion,name) + availability = {} + for member in members: + try: inspect.getattr_static(cls,member); availability[member] = True + except AttributeError: availability[member] = False + result['classes'][name] = {'available':True,'members':availability,'methodInvocation':False} + except Exception as error: + result['classes'][name] = {'available':False,'error':str(error)[:512]} + + camera_enums = {name:read('CameraTypes.'+name,lambda name=name:enum(getattr(adsk.core.CameraTypes,name))) + for name in ('OrthographicCameraType','PerspectiveCameraType','PerspectiveWithOrthoFacesCameraType')} + background_enums = {name:read('RenderSceneBackgroundTypes.'+name, + lambda name=name:enum(getattr(adsk.fusion.RenderSceneBackgroundTypes,name))) + for name in ('SolidColorRenderSceneBackgroundType','EnvironmentRenderSceneBackgroundType')} + result['enums'] = {'camera':camera_enums,'background':background_enums} + + viewport, result['viewport'] = object_read('activeViewport',lambda:app.activeViewport) + camera = None + if viewport is not None: + camera, result['camera']['object'] = object_read('camera',lambda:viewport.camera) + if camera is not None: + fields(result['camera'],'camera',camera,[('cameraType',enum,'native CameraTypes enum',None), + ('eye',point,'mm','cm'),('target',point,'mm','cm'),('upVector',lambda p:point(p,1),'unitless',None), + ('isFitView',boolean,None,None),('isSmoothTransition',boolean,None,None)]) + result['camera']['space'] = 'world/root' + kind = result['camera']['cameraType'].get('value') + if kind is not None and kind == camera_enums['OrthographicCameraType'].get('value'): + def extents(): + okay,width,height = camera.getExtents() + need(okay is True, 'Orthographic camera extent read refused') + return [number(number(width)*10),number(number(height)*10)] + result['camera']['extents'] = read('camera.getExtents',extents,'mm','cm') + result['camera']['perspectiveAngle'] = skipped('Orthographic camera') + elif kind is not None and kind in (camera_enums['PerspectiveCameraType'].get('value'),camera_enums['PerspectiveWithOrthoFacesCameraType'].get('value')): + result['camera']['perspectiveAngle'] = read('camera.perspectiveAngle',lambda:number(math.degrees(number(camera.perspectiveAngle))), 'deg', 'rad') + result['camera']['extents'] = skipped('Perspective camera') + else: + result['errors'].append({'field':'camera.cameraType','error':'Unknown/unreadable camera mode; conditional lens getters not read'}) + result['camera']['extents'] = result['camera']['perspectiveAngle'] = skipped('Unknown camera mode') + + manager, result['renderManager'] = object_read('design.renderManager',lambda:design.renderManager) + if manager is not None: + matched = read('renderManager.parentDesign',lambda:boolean(manager.parentDesign == design)) + result['renderManager']['ownerMatches'] = matched + if matched.get('value') is not True: + result['errors'].append({'field':'renderManager.parentDesign','error':'Foreign/unreadable renderer owner; remaining renderer objects not read'}) + manager = None + if manager is not None: + result['renderManager']['workspaceActive'] = read('renderManager.isRenderWorkspaceActive',lambda:boolean(manager.isRenderWorkspaceActive)) + rendering, result['rendering']['object'] = object_read('renderManager.rendering',lambda:manager.rendering) + if rendering is not None: + fields(result['rendering'],'rendering',rendering,[('aspectRatio',enum,'native RenderAspectRatios enum',None), + ('resolution',enum,'native RenderResolutions enum',None),('resolutionWidth',number,'px',None), + ('resolutionHeight',number,'px',None),('renderQuality',number,'native quality (25..100)',None), + ('isBackgroundTransparent',boolean,None,None)]) + scene, result['scene']['object'] = object_read('renderManager.sceneSettings',lambda:manager.sceneSettings) + if scene is not None: + specs = [('aspectRatio',enum,'native RenderAspectRatios enum',None),('aspectRatioWidth',number,'ratio',None), + ('aspectRatioHeight',number,'ratio',None),('backgroundType',enum,'native RenderSceneBackgroundTypes enum',None), + ('brightness',number,'lux',None),('cameraExposure',number,'EV',None),('cameraFocalLength',number,'mm','mm'), + ('cameraType',enum,'native CameraTypes enum',None),('groundOffset',lambda n:number(number(n)*10),'mm','cm'), + ('lightAngle',lambda n:number(math.degrees(number(n))),'deg','rad')] + specs += [(name,boolean,None,None) for name in ('isDepthOfFieldEnabled','isGroundDisplayed','isGroundFlattened','isGroundReflections')] + fields(result['scene'],'scene',scene,specs) + for condition,names in (('isDepthOfFieldEnabled',('centerOfFocus','depthOfFieldBlur')), + ('isGroundFlattened',('groundPosition',)),('isGroundReflections',('groundRoughness',))): + enabled = result['scene'][condition].get('value') + for name in names: + if enabled is True: + vector = name in ('centerOfFocus','groundPosition') + fields(result['scene'],'scene',scene,[(name,point if vector else number,'mm' if vector else 'unitless','cm' if vector else None)]) + else: result['scene'][name] = skipped(condition + ' is false or unreadable') + background = result['scene']['backgroundType'].get('value') + if background is not None and background == background_enums['SolidColorRenderSceneBackgroundType'].get('value'): + def color(): + value = scene.backgroundSolidColor + return {name:number(getattr(value,name)) for name in ('red','green','blue','opacity')} + result['scene']['backgroundSolidColor'] = read('scene.backgroundSolidColor',color,'RGBA 0..255; opacity ignored by scene') + result['scene']['backgroundEnvironment'] = skipped('Solid background') + elif background is not None and background == background_enums['EnvironmentRenderSceneBackgroundType'].get('value'): + env, descriptor = object_read('scene.backgroundEnvironment',lambda:scene.backgroundEnvironment) + if env is not None: + fields(descriptor,'scene.backgroundEnvironment',env,[('id',text,None,None),('name',text,None,None),('isCustomEnvironment',boolean,None,None)]) + result['scene']['backgroundEnvironment'] = descriptor + result['scene']['backgroundSolidColor'] = skipped('Environment background') + else: + result['errors'].append({'field':'scene.backgroundType','error':'Unknown/unreadable background mode; conditional getters not read'}) + result['scene']['backgroundEnvironment'] = result['scene']['backgroundSolidColor'] = skipped('Unknown background mode') + environments, result['environments']['object'] = object_read('renderManager.renderEnvironments',lambda:manager.renderEnvironments) + if environments is not None: + count = read('environments.count',lambda:number(environments.count)) + result['environments']['count'] = count + n = count.get('value');result['environments']['items'] = [] + if type(n) is int and n >= 0: + result['environments']['truncated'] = n > max_environments + for index in range(min(n,max_environments)): + env, descriptor = object_read('environment.' + str(index),lambda index=index:environments.item(index)) + if env is not None: + fields(descriptor,'environment.'+str(index),env,[('id',text,None,None),('name',text,None,None),('isCustomEnvironment',boolean,None,None)]) + result['environments']['items'].append(descriptor) + else: result['errors'].append({'field':'environments.count','error':'Environment count is not a nonnegative integer'}) + result['documentAfter'] = {'modified':read('document.modified.after',lambda:boolean(document.isModified)), + 'saved':read('document.saved.after',lambda:boolean(document.isSaved)), + 'stillActive':read('document.active.after',lambda:boolean(app.activeDocument == document))} + result['documentFlagsUnchanged'] = (result['documentBefore']['modified'].get('available') is True + and result['documentBefore']['saved'].get('available') is True + and result['documentBefore']['modified'] == result['documentAfter']['modified'] + and result['documentBefore']['saved'] == result['documentAfter']['saved'] + and result['documentAfter']['stillActive'].get('value') is True) + classes_complete = all(row.get('available') is True and all(row.get('members',{}).values()) for row in result['classes'].values()) + result['observationComplete'] = not result['errors'] and classes_complete and not result['environments'].get('truncated',False) + result['status'] = 'OBSERVED' if result['observationComplete'] else 'PARTIAL' + need(len(json.dumps(result,allow_nan=False).encode()) <= MAX_OUTPUT_BYTES,'Render probe output exceeds byte budget') + return result + + +def camera_arguments(value): + """Validate plain input before constructing any native temporary object.""" + require(isinstance(value, dict), 'invalid_input', 'camera must be an object.') + common = {'type', 'space', 'unit', 'eye', 'target', 'upVector'} + kind = value.get('type') + lens = {'extents'} if kind == 'orthographic' else {'perspectiveAngle', 'angleUnit'} + require(kind in ('orthographic', 'perspective') and set(value) == common | lens, + 'invalid_input', 'Supply one supported camera type with its exact geometry and lens fields.') + require(value['space'] == 'world' and value['unit'] == 'mm', 'invalid_input', 'Camera positions use world-space mm.') + + def scalar(x): + require(type(x) in (int, float) and math.isfinite(x) and abs(x) <= 1e9, + 'invalid_input', 'Camera geometry must be finite and bounded to 1e9 mm.') + return x + + def vector(name): + row = value[name] + require(isinstance(row, list) and len(row) == 3, 'invalid_input', name + ' requires three numbers.') + return [scalar(x) for x in row] + + eye, look, up = (vector(name) for name in ('eye', 'target', 'upVector')) + direction = [b-a for a,b in zip(eye,look)] + distance, up_length = math.hypot(*direction), math.hypot(*up) + require(distance > 1e-9, 'invalid_input', 'Camera eye and target must differ.') + require(abs(up_length-1) <= 1e-6 and abs(sum(a*b for a,b in zip(direction,up))/distance) <= 1e-6, + 'invalid_input', 'upVector must be a unit vector perpendicular to the view direction.') + if kind == 'orthographic': + extents = value['extents'] + require(isinstance(extents,list) and len(extents)==2, 'invalid_input', 'Orthographic extents require width and height in mm.') + require(all(scalar(x) >= 1e-6 for x in extents), 'invalid_input', 'Orthographic extents must be positive.') + else: + require(value['angleUnit']=='deg' and 0 < scalar(value['perspectiveAngle']) < 180, + 'invalid_input', 'Perspective angle must be strictly between 0 and 180 degrees.') + return value + + +def detached_camera(value): + import adsk.core + value = camera_arguments(value) + try: + camera = adsk.core.Camera.create() + require(camera is not None, 'camera_unavailable', 'Camera.create returned no detached camera.') + # Autodesk FUS-263280: transient Camera.isValid can be false even when + # the exact Camera wrapper retains its geometry. Keep that flag as + # evidence; validate type and every requested value independently. + validity_before = camera.isValid + require(type(validity_before) is bool and isinstance(camera, adsk.core.Camera) + and camera.objectType == adsk.core.Camera.classType(), + 'camera_unavailable', 'Camera.create returned an unexpected wrapper/type or validity field.') + camera.cameraType = getattr(adsk.core.CameraTypes, 'OrthographicCameraType' if value['type']=='orthographic' else 'PerspectiveCameraType') + camera.eye = adsk.core.Point3D.create(*(x/10 for x in value['eye'])) + camera.target = adsk.core.Point3D.create(*(x/10 for x in value['target'])) + camera.upVector = adsk.core.Vector3D.create(*value['upVector']) + camera.isFitView = False + camera.isSmoothTransition = False + if value['type'] == 'orthographic': + require(camera.setExtents(*(x/10 for x in value['extents'])) is True, + 'camera_readback_mismatch', 'Detached camera extent setter refused.') + else: + camera.perspectiveAngle = math.radians(value['perspectiveAngle']) + def finite_native(number): + require(type(number) in (int,float) and math.isfinite(number), + 'camera_readback_mismatch', 'Detached camera returned a nonnumeric or nonfinite value.') + return number + result = {'type':value['type'], 'space':'world', 'unit':'mm', + 'eye':[finite_native(getattr(camera.eye,k))*10 for k in ('x','y','z')], + 'target':[finite_native(getattr(camera.target,k))*10 for k in ('x','y','z')], + 'upVector':[finite_native(getattr(camera.upVector,k)) for k in ('x','y','z')]} + expected_kind = getattr(adsk.core.CameraTypes, 'OrthographicCameraType' if value['type']=='orthographic' else 'PerspectiveCameraType') + require(not isinstance(camera.cameraType,bool) and camera.cameraType == expected_kind and camera.isFitView is False and camera.isSmoothTransition is False, + 'camera_readback_mismatch', 'Detached camera mode or behavior differs.') + if value['type'] == 'orthographic': + okay,width,height = camera.getExtents() + require(okay is True, 'camera_readback_mismatch', 'Detached camera extent read refused.') + result['extents'] = [finite_native(width)*10,finite_native(height)*10] + else: + result.update(perspectiveAngle=math.degrees(finite_native(camera.perspectiveAngle)), angleUnit='deg') + # Tolerance must never turn invalid native geometry into a valid camera. + try: + camera_arguments(result) + except MechanicalError as error: + raise MechanicalError('camera_readback_mismatch', 'Detached camera returned invalid geometry or lens: ' + str(error)) + def equal(left,right): + if isinstance(right,list): + return isinstance(left,list) and len(left)==len(right) and all(equal(a,b) for a,b in zip(left,right)) + if type(right) in (int,float): + return type(left) in (int,float) and math.isfinite(left) and math.isclose(left,right,rel_tol=1e-10,abs_tol=1e-8) + return type(left) is type(right) and left==right + require(all(equal(result.get(k),v) for k,v in value.items()), 'camera_readback_mismatch', 'Detached camera did not retain the requested geometry or lens.') + validity_after = camera.isValid + require(type(validity_after) is bool, 'camera_readback_mismatch', 'Camera validity readback is not Boolean.') + return {'available':True, 'readbackVerified':True, 'assignedToViewport':False, + 'nativeValidity':{'before':validity_before, 'after':validity_after, + 'knownIssueReference':'FUS-263280', 'renderEligibility':'NOT_ESTABLISHED'}, + 'scope':'independent temporary camera; current scene is unchanged', 'descriptor':result} + except MechanicalError: + raise + except Exception as error: + raise MechanicalError('camera_unavailable', 'Detached camera construction/readback failed: ' + str(error)[:512]) + + +def render_scene_inspect(app, args): + # This guard must precede target() and every native getter, including ownership. + require(threading.current_thread() is threading.main_thread(), 'wrong_thread', 'Native render reads require the main thread.') + require(args.get('sessionId') == SESSION_ID, 'session_mismatch', 'Scene inspection requires the current add-in session.') + wanted = args.get('target') + require(isinstance(wanted,dict) and isinstance(wanted.get('documentId'),str) and isinstance(wanted.get('revision'),str), + 'invalid_input', 'Scene inspection requires exact target documentId and revision.') + budget = args.get('maxEnvironments',16) + require(type(budget) is int and 0 <= budget <= MAX_ENVIRONMENTS, 'invalid_input', 'maxEnvironments must be an integer from 0 to 32.') + if 'camera' in args: camera_arguments(args['camera']) + document, design, value = target(app,args) + first = scene_observation(app,document,design,max_environments=budget) + prepared = detached_camera(args['camera']) if 'camera' in args else {'available':None, 'notRequested':True} + second = scene_observation(app,document,design,max_environments=budget) + _, _, current = target(app,args) + require(value == current and first == second, 'scene_changed_during_inspection', + 'The model target or bounded scene observations changed during inspection; no settings were restored.') + require(first['documentFlagsUnchanged'], 'scene_changed_during_inspection', + 'Unchanged saved/modified document flags could not be verified.') + first.update(target=value, detachedCamera=prepared, observedStateUnchanged=True, + unchangedScope='available fields only; unreadable fields and omitted scene graphs remain unverified', + observationPasses=2, maxEnvironments=budget) + require(len(json.dumps(first,allow_nan=False).encode('utf-8')) <= MAX_OUTPUT_BYTES, + 'output_too_large', 'Scene inspection exceeds its 128 KiB result budget.') + return first + + +READS = {'render_scene_inspect': render_scene_inspect} diff --git a/addin/AdomBridge/commands/mechanical/schema.json b/addin/AdomBridge/commands/mechanical/schema.json index 0916f6ecb427196358660971268deeff82e96c0b..3321f00401cb8b4f6bbd2307306bad2c2791cb76 100644 --- a/addin/AdomBridge/commands/mechanical/schema.json +++ b/addin/AdomBridge/commands/mechanical/schema.json @@ -6373,5 +6373,192 @@ "op", "target" ] + }, + "render_scene_inspect": { + "type": "object", + "required": [ + "op", + "sessionId", + "target" + ], + "properties": { + "sessionId": { + "type": "string" + }, + "target": { + "type": "object", + "required": [ + "documentId", + "revision" + ], + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + } + }, + "maxEnvironments": { + "type": "integer", + "minimum": 0, + "maximum": 32 + }, + "camera": { + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "space", + "unit", + "eye", + "target", + "upVector", + "extents" + ], + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": [ + "orthographic" + ] + }, + "space": { + "type": "string", + "enum": [ + "world" + ] + }, + "unit": { + "type": "string", + "enum": [ + "mm" + ] + }, + "eye": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "minimum": -1000000000.0, + "maximum": 1000000000.0 + } + }, + "target": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "minimum": -1000000000.0, + "maximum": 1000000000.0 + } + }, + "upVector": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "minimum": -1000000000.0, + "maximum": 1000000000.0 + } + }, + "extents": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "number", + "minimum": 1e-06, + "maximum": 1000000000.0 + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "space", + "unit", + "eye", + "target", + "upVector", + "perspectiveAngle", + "angleUnit" + ], + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": [ + "perspective" + ] + }, + "space": { + "type": "string", + "enum": [ + "world" + ] + }, + "unit": { + "type": "string", + "enum": [ + "mm" + ] + }, + "eye": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "minimum": -1000000000.0, + "maximum": 1000000000.0 + } + }, + "target": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "minimum": -1000000000.0, + "maximum": 1000000000.0 + } + }, + "upVector": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "type": "number", + "minimum": -1000000000.0, + "maximum": 1000000000.0 + } + }, + "perspectiveAngle": { + "type": "number", + "exclusiveMinimum": 0, + "maximum": 179.999999999 + }, + "angleUnit": { + "type": "string", + "enum": [ + "deg" + ] + } + } + } + ] + } + }, + "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." } } diff --git a/contracts/describe.json b/contracts/describe.json index 271cbd6e87cdc012058aadbf671a6595e6c215d8..b3482fde0efa56e3440ad5cfe47110d72e7c7fb5 100644 --- a/contracts/describe.json +++ b/contracts/describe.json @@ -7688,6 +7688,193 @@ ], "type": "object" }, + "render_scene_inspect": { + "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.", + "properties": { + "camera": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "extents": { + "items": { + "maximum": 1000000000.0, + "minimum": 1e-06, + "type": "number" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "eye": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "space": { + "enum": [ + "world" + ], + "type": "string" + }, + "target": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "type": { + "enum": [ + "orthographic" + ], + "type": "string" + }, + "unit": { + "enum": [ + "mm" + ], + "type": "string" + }, + "upVector": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [ + "type", + "space", + "unit", + "eye", + "target", + "upVector", + "extents" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "angleUnit": { + "enum": [ + "deg" + ], + "type": "string" + }, + "eye": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "perspectiveAngle": { + "exclusiveMinimum": 0, + "maximum": 179.999999999, + "type": "number" + }, + "space": { + "enum": [ + "world" + ], + "type": "string" + }, + "target": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "type": { + "enum": [ + "perspective" + ], + "type": "string" + }, + "unit": { + "enum": [ + "mm" + ], + "type": "string" + }, + "upVector": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [ + "type", + "space", + "unit", + "eye", + "target", + "upVector", + "perspectiveAngle", + "angleUnit" + ], + "type": "object" + } + ] + }, + "maxEnvironments": { + "maximum": 32, + "minimum": 0, + "type": "integer" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "target" + ], + "type": "object" + }, "rigid_group_create": { "description": "Create a native rigid group from exact occurrence instances; includeChildren defaults true.", "properties": { @@ -8543,7 +8730,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", + "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", "operationId": "required unique write ID; reuse unchanged for retry", "operationSchemas": { "assembly_properties": { @@ -14103,6 +14290,193 @@ ], "type": "object" }, + "render_scene_inspect": { + "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.", + "properties": { + "camera": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "extents": { + "items": { + "maximum": 1000000000.0, + "minimum": 1e-06, + "type": "number" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "eye": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "space": { + "enum": [ + "world" + ], + "type": "string" + }, + "target": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "type": { + "enum": [ + "orthographic" + ], + "type": "string" + }, + "unit": { + "enum": [ + "mm" + ], + "type": "string" + }, + "upVector": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [ + "type", + "space", + "unit", + "eye", + "target", + "upVector", + "extents" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "angleUnit": { + "enum": [ + "deg" + ], + "type": "string" + }, + "eye": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "perspectiveAngle": { + "exclusiveMinimum": 0, + "maximum": 179.999999999, + "type": "number" + }, + "space": { + "enum": [ + "world" + ], + "type": "string" + }, + "target": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "type": { + "enum": [ + "perspective" + ], + "type": "string" + }, + "unit": { + "enum": [ + "mm" + ], + "type": "string" + }, + "upVector": { + "items": { + "maximum": 1000000000.0, + "minimum": -1000000000.0, + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [ + "type", + "space", + "unit", + "eye", + "target", + "upVector", + "perspectiveAngle", + "angleUnit" + ], + "type": "object" + } + ] + }, + "maxEnvironments": { + "maximum": 32, + "minimum": 0, + "type": "integer" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "target" + ], + "type": "object" + }, "rigid_group_create": { "description": "Create a native rigid group from exact occurrence instances; includeChildren defaults true.", "properties": { diff --git a/docs/MECHANICAL.md b/docs/MECHANICAL.md index 202d6d0ce8f14bd729e6838aa54bb41cf5ce32a9..f5cdfca60b50c7fda14162dd92b57500f5cb8a63 100644 --- a/docs/MECHANICAL.md +++ b/docs/MECHANICAL.md @@ -22,6 +22,75 @@ 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. +## Inspect render settings and prepare a detached camera + +`render_scene_inspect` is a guarded read. Pass the current `sessionId` and exact +`target` from inspection. It reads the current viewport camera, native render and +scene settings, runtime API availability, and a bounded environment list. An +absent viewport camera or false native validity flag stays an +explicit field error; useful settings are still returned as `status: "PARTIAL"`. + +```json +{ + "op": "render_scene_inspect", + "sessionId": "", + "target": {"documentId": "", "revision": ""}, + "maxEnvironments": 16, + "camera": { + "type": "orthographic", "space": "world", "unit": "mm", + "eye": [0, 0, 100], "target": [0, 0, 0], "upVector": [0, 1, 0], + "extents": [100, 75] + } +} +``` + +Omit `camera` for observations alone. A perspective descriptor replaces `extents` +with `"perspectiveAngle": 45, "angleUnit": "deg"` and uses `"type": "perspective"`. +Eye and target must differ; `upVector` must be a unit vector perpendicular to the +view direction. Extents are positive width and height in mm. Descriptor positions +and extents are bounded to 1e9 mm, and perspective angles lie strictly between +0 and 180 degrees. Unknown fields and other units/frames refuse before construction. + +The optional `detachedCamera` result describes a temporary `Camera.create()` object +with verified geometry and lens readback. It is separate from the observed current +viewport and `scene.cameraType`/focal length. The bridge never assigns this camera +to a viewport, focuses a window, activates a workspace, or changes scene settings. +A requested camera that cannot be constructed or retain its values refuses; a +successful detached camera does not fill missing current-camera observations. + +Autodesk tracks false transient `Camera.isValid` results as +[FUS-263280](https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/camera-isvalid/td-p/14202647). +For a newly created detached camera only, the bridge verifies the exact native +Camera wrapper/type and every requested geometry/lens value independently, and +preserves the Boolean flags in `detachedCamera.nativeValidity.before/after`. +These flags are never rewritten as true. `renderEligibility` remains +`NOT_ESTABLISHED`; numeric readback is not proof of rendering. Other native +object validity guards, including current-viewport observation, remain unchanged. + +Native lengths are converted from cm to public mm, angular values from radians +to degrees, and scene `cameraFocalLength` stays native mm. Every value carries its +unit where applicable. Conditional background/DOF/ground properties are read only +in the modes where the API supports them. `maxEnvironments` is an integer 0–32; +the default is 16, and truncation prevents `observationComplete`. Two bounded reads +bracket detached-camera preparation, with a fresh target check and exact comparison +of the returned observations and document saved/modified flags. A detected change +refuses without attempting to restore user state. `observedStateUnchanged` refers +only to the fields available in these observations; missing fields are unverified. +The complete result is limited to 128 KiB, native strings to 256 characters, and +per-field error text to 512 characters. + +`observationComplete` covers this bounded read only. `sceneWitnessComplete` and +`renderQualified` are always false: appearances, textures, materials, light and +occurrence-visibility graphs, custom-environment contents, native queue idleness, +settings ownership and revision-to-pixels consistency are unqualified. No render +is started and no render job/cancellation API is introduced. Offline tests do not +establish native or installed-public-operation acceptance. + +Primary API contracts: [Camera](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_Camera.htm), +[Camera.create](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_Camera_create.htm), +[Camera.setExtents](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_Camera_setExtents.htm), +and [API units](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/Units_UM.htm). + ## Inspect native configurations Development checkpoint 7 adds `configuration_inspect` as a read-only operation: diff --git a/docs/build-2026-10-06-render-scenes.md b/docs/build-2026-10-06-render-scenes.md new file mode 100644 index 0000000000000000000000000000000000000000..bc0707e3e4333134155593ae15e2a1dba703ea30 --- /dev/null +++ b/docs/build-2026-10-06-render-scenes.md @@ -0,0 +1,50 @@ +# Scene inspection and detached cameras, October 6, 2026 + +`render_scene_inspect` adds bounded native scene settings, environment inventory, +and optional orthographic/perspective camera preparation to the mechanical +transport. It requires the current session and exact document/revision. Cameras +remain detached; the bridge does not assign the viewport or edit render settings. +This is the 55th typed operation; the public catalog remains 179 verbs. + +The candidate builds on mechanical foundation commit +`89ba635b002093eb5eabfeb01cd9e262a048ad76` ([PR #11](https://wiki.adom.inc/adom/fusion-bridge/prs/11)). +Release and add-in version numbers remain unchanged. This is a review-source +checkpoint, not a registry release or an installation on the user's machine. + +## Verification and limits + +The final source passed 479 Python tests, including 24 focused render tests, +plus nine runner boundary tests and nine independent reviewer tests. Root static +import checks passed. A fresh Windows executable embeds the candidate catalog; +its Rust and embedded inputs are unchanged by the final Python-only camera fix. +Foundation Rust tests and dashboard build remain separately recorded evidence. + +Root executed the exact frozen module function on Fusion 2705.1.30 in the existing +pinned development runtime. Three cases passed: current scene observation, +orthographic camera with 100 × 75 mm extents, and perspective camera at 45°. +Thirteen native checks passed, including an independent unchanged model witness, +F3D archive/reopen, exact fixture closure, original-document restoration, and +preserved preferences/runtime pin. No screenshots, render images or Shotlog +uploads were requested. The candidate was loaded into a temporary unregistered +Python module; installed public dispatch remains **NOT_RUN**. + +The first product attempt failed its camera validity guard and is preserved as a +failed report. A separate diagnostic established that an exact newly created +Camera wrapper retained all requested geometry and lens values despite reporting +`isValid=false` before and after. This matches the behavior tracked by Autodesk +as [FUS-263280](https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/camera-isvalid/td-p/14202647). +The final product verifies the detached wrapper/type and numeric readback while +retaining both false native flags. It does not rewrite the native flag or relax +other object-validity guards. The subsequent final-product run passed. + +Current viewport-camera observation remains **PARTIAL** on this build. A working +detached camera does not make unreadable current-scene fields complete. +Rendering jobs, render futures, rendered pixels, material/texture/visibility +graphs, global queue ownership and installed-route integration remain unqualified. +Exploded assembly planning is the next separate checkpoint; editable native +storyboards and video export are not implied by this scene operation. + +The [evidence directory](render-scene-evidence-2026-10-06/index.json) contains +unchanged original/final native reports, frozen-source hashes, offline acceptance, +the finite runner, and independent review evidence. Full raw calls and native F3D +archives remain in the workspace under `research/fusion-mechanical-verification-2026-10-02`. diff --git a/docs/implementation-roadmap.md b/docs/implementation-roadmap.md index 392c4b1da008221ff9e17a7e9e669fea66a28fc9..afe28843a79f766aa459a72faa69fb5d45515cf7 100644 --- a/docs/implementation-roadmap.md +++ b/docs/implementation-roadmap.md @@ -6,6 +6,21 @@ 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. +## Current source checkpoint — October 6, 2026 + +The opening delivery record is historical. The current mechanical foundation is +PR #11 (`mechanical-foundation-2026-10-06`, commit +`89ba635b002093eb5eabfeb01cd9e262a048ad76`); PR #10 is closed as superseded. +The separate scene-inspection source candidate adds `render_scene_inspect` as the +55th typed operation without increasing the 179 public verbs or bumping release +versions. It reads bounded settings/environment data and verifies an optional +detached camera. Native function acceptance now passes three scene/camera cases and exact cleanup on Fusion 2705.1.30. Installed-public-operation acceptance remains not run; see [the checkpoint evidence](build-2026-10-06-render-scenes.md). +Complete appearance/material/texture/visibility witnesses, actual rendering jobs, +scene editing and asynchronous render lifecycle are still future work. Exploded +views and ordered assembly instructions remain a core upcoming animation +requirement; [the presentation-backend plan](EXPLODED-VIEWS.md) is documentation +only in this checkpoint. + ## Delivery order 1. Harden the maintained test harness and integrate repeatable background @@ -71,8 +86,9 @@ and graph checks, archive reopening, visual review and controlled recovery. See origin and motion-link subset: [assembly handoff](build-2026-10-05-assemblies.md). Linked/replacement workflows and durable operation lifecycle remain separate assembly work, not implied by regular-joint coverage. Configuration inspection and -durable history candidates have separate source/native gates; rendering remains -research preparation until actual native output and lifecycle behavior pass. +durable history have separate source/native gates. Scene inspection now has a +bounded source candidate; native render output and render lifecycle remain +unimplemented and unqualified. Checkpoint 8 implements durable synchronous mechanical records and an observational status route. The accepted ordinary and busy-status evidence, diff --git a/docs/mechanical-comparison/CHECKPOINT-STATUS.md b/docs/mechanical-comparison/CHECKPOINT-STATUS.md index 373791ea05e8fa0c5568bfe3e5d280843f025629..6652dc2e5a1cdfa55802cf6cac86ee955ac47cf6 100644 --- a/docs/mechanical-comparison/CHECKPOINT-STATUS.md +++ b/docs/mechanical-comparison/CHECKPOINT-STATUS.md @@ -16,7 +16,8 @@ operation is not proof that every native variant has passed. | Supplier and BOM | dev.3 baseline retained | Local STEP/SAT ingestion with provenance, native interactive McMaster picker and flat/structured CSV BOMs. Controlled download/cache/replacement, configurations, revisions, costing and purchasing exports remain gaps. | | 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. | -| Render 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. | +| 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). | +| 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. | The dev.5 native replay passed all 16 groups and 254 assertions, with separate diff --git a/docs/render-scene-evidence-2026-10-06/acceptance.json b/docs/render-scene-evidence-2026-10-06/acceptance.json new file mode 100644 index 0000000000000000000000000000000000000000..dac49af2125138397a7a436b371dbd76ea1b932b --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/acceptance.json @@ -0,0 +1,29 @@ +{ + "status": "PASS_FUNCTION_NATIVE", + "publicVerbs": 179, + "typedOperations": 55, + "pythonTests": 479, + "focusedRenderTests": 24, + "runnerBoundaryTests": 9, + "independentR2Tests": 9, + "nativeChecks": 13, + "nativeCases": [ + "current-scene", + "orthographic", + "perspective" + ], + "nativeCameraValidityFlags": "false retained before and after; exact geometry/lens readback matched", + "sourceSha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55", + "nativeBuild": "2705.1.30", + "nativeScope": "module-function-native-api", + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "captureCount": 0, + "shotlogUploads": 0, + "developmentRuntimeReplaced": false, + "cleanup": "PASS", + "originalFailedEvidencePreserved": true, + "windowsExeSha256": "040dcb62f048d708e8b95a59d36066ae9973bb3c1d20a84be34dae4e87243664", + "windowsBuildScope": "fresh candidate r1 contract; all Rust/embedded inputs identical in r2", + "fullSceneWitness": false +} diff --git a/docs/render-scene-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.json b/docs/render-scene-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.json new file mode 100644 index 0000000000000000000000000000000000000000..9be18679e72996f7fccdc9ce914bf4e1516f48c7 --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.json @@ -0,0 +1,106 @@ +{ + "verdict": "CLEAR_SOURCE_AND_FUNCTION_NATIVE_API", + "sourceSha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55", + "sourceReview": { + "verdict": "CLEAR_R2_SOURCE_FOR_FINAL_FUNCTION_NATIVE_GATE", + "source": { + "status": "PASS", + "sourceSha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55", + "checks": [ + "False isValid with exact Camera type and good geometry reported as native evidence, never render eligibility", + "None refused", + "foreign wrapper refused", + "nonboolean validity refused", + "actual geometric readback validation retained", + "nonboolean final validity refuses", + "only detached_camera function changed; generic/current viewport validity and all other guards byte-AST equivalent", + "seven frozen and working hashes/sizes match" + ] + }, + "nativeExperimentAudit": { + "audit": "PASS", + "status": "EXPERIMENT_PASS_NOT_PRODUCT_ACCEPTANCE", + "qualification": "FALSE_NATIVE_VALIDITY_WITH_CORRECT_DETACHED_GEOMETRY", + "reportSha256": "ba4961f6028919e19138ae0bc90676af8cbf1c4c4ae026161f656f0e5eaf1855", + "verifiedCallCount": 36, + "passedChecks": 13, + "diagnosticSourceHashesVerified": 11, + "singleExactProbe": true, + "witnessUnchanged": true, + "archiveSha256": "ae4ff4e696d37dfbf6252d7ed30be6efc5b31e1a76c991816d2b7378988d26e2", + "ownedDocumentsClosed": 2, + "originalRestored": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "bridgeProcessPid": 42780, + "renderStarted": false, + "imageArtifacts": 0, + "hostCallsByReviewer": 0, + "limitations": [ + "Viewport camera remains unavailable under unchanged guard. Two exact detached Camera wrappers report false validity before/after but retain tested geometry/lens. This proves only these native reads, not viewport assignment or rendering eligibility.", + "No rendering, render-future, full scene, global queue or visual acceptance proved." + ] + }, + "originalProductFailure": { + "preserved": true, + "reportSha256": "0466b1584470bd8a7d02eb7ea09707e3dbf7c1910d14809edcfac0bca538cf2c" + }, + "finalAnythingLeft": "No remaining actionable issue in the narrow delta. The camera-only exception reports native before/after Boolean flags and requires exact Camera wrapper/objectType, all actual geometric invariants and requested readback equality. Generic/current-viewport validity guards, target/session/main-thread checks, two-pass observations, schema, registration and public catalog are unchanged from reviewed r1.", + "qualificationLimits": [ + "Native experiment is evidence of detached numeric readback only, not product-r2 acceptance.", + "Final r2 module-function native qualification pending; installed public route and rendering NOT_RUN.", + "No renderer eligibility, full scene, global queue or visual claim.", + "No reviewer host/native/capture/Shotlog calls." + ] + }, + "finalNative": { + "audit": "PASS", + "status": "PRODUCT_R2_FUNCTION_NATIVE_PASS", + "qualification": "FALSE_NATIVE_VALIDITY_WITH_CORRECT_DETACHED_GEOMETRY", + "reportSha256": "d3f322203cb7edc846c6dd58af4332a07b0a5823d092feb8a631c4c94d52e770", + "verifiedCallCount": 36, + "passedChecks": 13, + "diagnosticSourceHashesVerified": 11, + "singleExactProbe": true, + "witnessUnchanged": true, + "archiveSha256": "7d43a8acd9c6e9e6d121741ec5a76c0c331ee78b075c519857ec94ee8f1f8a98", + "ownedDocumentsClosed": 2, + "originalRestored": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "bridgeProcessPid": 42780, + "renderStarted": false, + "imageArtifacts": 0, + "hostCallsByReviewer": 0, + "limitations": [ + "Viewport camera remains unavailable under unchanged guard. Two exact detached Camera wrappers report false validity before/after but retain tested geometry/lens. This proves only these native reads, not viewport assignment or rendering eligibility.", + "No rendering, render-future, full scene, global queue or visual acceptance proved." + ] + }, + "priorEvidence": { + "productR1": "Preserved definitive FAIL with cleanup PASS; initial validity guard blocked detached camera.", + "cameraExperiment": "Preserved PASS proving false native validity flags with correct detached readback on tested build." + }, + "acceptedScope": [ + "One finite script on a fresh exactly owned box, source-loaded temporary module without sys.modules/handler registration.", + "Current scene inspection returns PARTIAL with current-camera validity error retained; settings/environment observations remain available.", + "Explicit world-mm orthographic100x75 and perspective45degree Camera.create descriptors retain strict geometry/lens readback.", + "Native false Boolean validity flags are reported honestly, with rendering eligibility NOT_ESTABLISHED.", + "Before/after exact target and independent model witnesses unchanged; F3D roundtrip and exact cleanup pass; pristine baseline restored." + ], + "notRunOrNotEstablished": [ + "Installed public operation dispatch (new operation remains uninstalled).", + "Rendering, viewport camera assignment, renderer queue ownership, full scene witness, pixels/video/storyboards." + ], + "finalAnythingLeft": "No remaining actionable issue within this bounded source and function-native scope. No host calls, source mutations or image/capture/Shotlog actions by reviewer." +} diff --git a/docs/render-scene-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.md b/docs/render-scene-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.md new file mode 100644 index 0000000000000000000000000000000000000000..842811f3f76dfe458f910bc5d714faaac74743dc --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/adversary-CUMULATIVE-REVIEW.md @@ -0,0 +1,11 @@ +CP9 scene inspection: CLEAR source + function/native-API acceptance + +Exact module SHA-256: `92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55`. Source/fault review verified all seven frozen files, fixed near-zero camera readback validation, and limited the native validity exception to newly created exact Camera wrappers. Generic/current-viewport guards remain unchanged. + +Final r2 native campaign independently audited:13 checks PASS, cleanup PASS,36 request/response records bound,11 source hashes verified, one exact generated script, unchanged target/model witnesses, F3D archive7d43a8acd9c6e9e6d121741ec5a76c0c331ee78b075c519857ec94ee8f1f8a98 verified, two exact documents closed, pristine original restored, and zero images. Current-scene remains PARTIAL. Both detached cameras retain requested world-mm positions,100×75mm orthographic extents/45degree perspective lens, and preserve false native validity flags without claiming rendering eligibility. + +Original r1 native FAIL and its successful cleanup remain preserved. The separate validity experiment remains separate supporting evidence. Final anything-left pass found no actionable issue in the accepted scope. + +This qualifies the frozen function loaded into the existing native runtime, not the newly installed public route. Rendering, viewport assignment, full-scene/queue ownership, pixels/video/storyboards are NOT_RUN or NOT_ESTABLISHED. No reviewer host calls, production edits, captures or Shotlog uploads. + +Cumulative machine-readable evidence: CUMULATIVE-REVIEW.json; native replay checker: audit-native-r2.py; result: native-r2-review.json. diff --git a/docs/render-scene-evidence-2026-10-06/adversary-native-r2-review.json b/docs/render-scene-evidence-2026-10-06/adversary-native-r2-review.json new file mode 100644 index 0000000000000000000000000000000000000000..a151844ea081da9b72e74de034a64c4a229aec0f --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/adversary-native-r2-review.json @@ -0,0 +1,29 @@ +{ + "audit": "PASS", + "status": "PRODUCT_R2_FUNCTION_NATIVE_PASS", + "qualification": "FALSE_NATIVE_VALIDITY_WITH_CORRECT_DETACHED_GEOMETRY", + "reportSha256": "d3f322203cb7edc846c6dd58af4332a07b0a5823d092feb8a631c4c94d52e770", + "verifiedCallCount": 36, + "passedChecks": 13, + "diagnosticSourceHashesVerified": 11, + "singleExactProbe": true, + "witnessUnchanged": true, + "archiveSha256": "7d43a8acd9c6e9e6d121741ec5a76c0c331ee78b075c519857ec94ee8f1f8a98", + "ownedDocumentsClosed": 2, + "originalRestored": [ + { + "creationId": "cdf1e4ec-a727-4ffe-8975-d10e11191864", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "bridgeProcessPid": 42780, + "renderStarted": false, + "imageArtifacts": 0, + "hostCallsByReviewer": 0, + "limitations": [ + "Viewport camera remains unavailable under unchanged guard. Two exact detached Camera wrappers report false validity before/after but retain tested geometry/lens. This proves only these native reads, not viewport assignment or rendering eligibility.", + "No rendering, render-future, full scene, global queue or visual acceptance proved." + ] +} diff --git a/docs/render-scene-evidence-2026-10-06/index.json b/docs/render-scene-evidence-2026-10-06/index.json new file mode 100644 index 0000000000000000000000000000000000000000..ccb7ab78f26edf7211e2bb4a5c5ba48542ddeccb --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/index.json @@ -0,0 +1,66 @@ +{ + "files": [ + { + "path": "source-manifest-r2.json", + "bytes": 1813, + "sha256": "2c68c93b674044b149a0798c2a8dcc953b7b0e249c5f2f404b3da978cde43a2c" + }, + { + "path": "offline-root-r2.json", + "bytes": 45366, + "sha256": "eb0968cab0d344737189d599996babf559b584f801dcdb9284508dcffdfa0be2" + }, + { + "path": "native-original-failure-r1.json", + "bytes": 68855, + "sha256": "0466b1584470bd8a7d02eb7ea09707e3dbf7c1910d14809edcfac0bca538cf2c" + }, + { + "path": "native-validity-experiment.json", + "bytes": 110032, + "sha256": "ba4961f6028919e19138ae0bc90676af8cbf1c4c4ae026161f656f0e5eaf1855" + }, + { + "path": "native-product-r2.json", + "bytes": 109922, + "sha256": "d3f322203cb7edc846c6dd58af4332a07b0a5823d092feb8a631c4c94d52e770" + }, + { + "path": "product_scene.py", + "bytes": 10300, + "sha256": "93e52db970d5ebd6fa14ede9250a24b21daf5687e377bd2d3ea65c50c82479b7" + }, + { + "path": "test_product_scene.py", + "bytes": 6700, + "sha256": "69d11fce8fc7750b5d0958956781b7943e3bfa36a9811207eaa5782e230cc0c6" + }, + { + "path": "verifier-r2.md", + "bytes": 1216, + "sha256": "6a137572e7277d02fc6e68300d1391f498229f51f2a6c638865f43c4d88c7aa8" + }, + { + "path": "verifier-r2.json", + "bytes": 1761, + "sha256": "e1a6a5fb4dd70eee4183af2ec30294f3ea298807deb8778b331860e321bdd4d9" + }, + { + "path": "adversary-CUMULATIVE-REVIEW.md", + "sha256": "61a2257791356029f319da2b0b3704d2c8d132bda6ccb4394c12165b8a939b67", + "bytes": 1630 + }, + { + "path": "adversary-CUMULATIVE-REVIEW.json", + "sha256": "340dc524f1c23669086570778186e4bfb868bc30e97057552113d3206ff2e3cc", + "bytes": 5721 + }, + { + "path": "adversary-native-r2-review.json", + "sha256": "4462dd9a7397d8e2971ca1e221827e6656546ea7774634ce24d6fe0806e446c6", + "bytes": 1139 + } + ], + "rawCallEvidence": "retained in research/fusion-mechanical-verification-2026-10-02; report hashes and independent audits bind it", + "reportsUnmodified": true +} diff --git a/docs/render-scene-evidence-2026-10-06/native-original-failure-r1.json b/docs/render-scene-evidence-2026-10-06/native-original-failure-r1.json new file mode 100644 index 0000000000000000000000000000000000000000..d6365392930e7403b3e6afd07b7056050a736414 --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/native-original-failure-r1.json @@ -0,0 +1,2296 @@ +{ + "runId": "20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23", + "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": "Diagnostic box complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + } + }, + { + "label": "Diagnostic box native volume", + "status": "PASS", + "evidence": { + "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": "2026-10-06-09-11-59-623", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + } + }, + { + "label": "Diagnostic box independent instance volume", + "status": "PASS", + "evidence": 6000.0 + }, + { + "label": "Diagnostic box native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Diagnostic box public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2200.0, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "entity": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "169c009ac016a1e3a7efc70fb4377c3cf1286115b62ca60da827060ca24c6020", + "rootComponentId": "c3f64ad4-5659-42ef-8284-bb411912aebd", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.0162, + "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:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "revision": "169c009ac016a1e3a7efc70fb4377c3cf1286115b62ca60da827060ca24c6020" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6000.0 + } + }, + { + "label": "Independent fixture model witness unchanged across probe", + "status": "PASS", + "evidence": null + }, + { + "label": "Reviewed probe remains an owned read-only diagnostic", + "status": "PASS", + "evidence": { + "qualification": "PARTIAL", + "sceneWitnessComplete": false, + "renderingQualified": false, + "nativeQueueIdle": "UNVERIFIED", + "exclusiveSettingsOwnership": "UNVERIFIED", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ] + } + }, + { + "label": "01-scene_diagnostic archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 43766, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/01-scene_diagnostic-2e29b90c.f3d", + "sha256": "cae2c9f4efd3ec0adac1174cd3d3bd2f9d2391a07e5111c8b98a1e51882b19ee" + } + }, + { + "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/cp9-product-native-1/artifacts/01-scene_diagnostic-2e29b90c.f3d", + "sha256": "cae2c9f4efd3ec0adac1174cd3d3bd2f9d2391a07e5111c8b98a1e51882b19ee", + "bytes": 43766, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/01-scene_diagnostic-2e29b90c.f3d", + "fixture": "01-scene_diagnostic" + } + ], + "fixtures": [ + { + "name": "01-scene_diagnostic", + "status": "FAIL" + } + ], + "requestedFixtures": [ + "01-scene_diagnostic" + ], + "limitations": [ + "Read-only capability/scene field diagnostic only; partial availability is retained.", + "No render future, scene/settings edit, global native queue or complete-scene proof.", + "No capture, screenshot, image artifact or Shotlog path is enabled." + ], + "diagnosticSources": [ + { + "name": "ralph_jobs.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2" + }, + { + "name": "probe/read_scene_probe.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/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/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/probe/test_read_scene_probe.py", + "sha256": "8df35f06355717a0c8bfd64b66a951a4a349b9257aff0b14ff1db7a02edb8ba4" + }, + { + "name": "probe/READONLY-PROBE.md", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/probe/READONLY-PROBE.md", + "sha256": "01f33dde1a9bfa821b308a91d0889cadce7c6098af73cdcfbe98e66bc527ff41" + }, + { + "name": "product/render_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/product/render_scene.py", + "sha256": "7a672e1242a75d78fc330fb4690a5e5aeea7bb4fe981befa9d85603227403fcb" + }, + { + "name": "product/product_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/product/product_scene.py", + "sha256": "93e52db970d5ebd6fa14ede9250a24b21daf5687e377bd2d3ea65c50c82479b7" + }, + { + "name": "product/test_product_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/product/test_product_scene.py", + "sha256": "69d11fce8fc7750b5d0958956781b7943e3bfa36a9811207eaa5782e230cc0c6" + }, + { + "name": "diagnostic_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-1/diagnostic-sources-20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23/diagnostic_scene.py", + "sha256": "bad536a1d0159eb5e2426e5e671510bc3e0178aee80866f477152f43c3b02073" + } + ], + "acceptanceScope": { + "sceneDiagnostic": "PASS", + "rendering": "NOT_RUN", + "futureLifecycle": "NOT_RUN", + "sceneCompleteness": "NOT_PROVEN", + "queueOwnership": "NOT_PROVEN", + "visual": "NOT_REQUESTED", + "productFunction": "REQUESTED", + "installedPublicRoute": "NOT_RUN" + }, + "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": 1791235894.8066213, + "lastError": null + }, + "durationMs": 251, + "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": 1791235856, + "p50": 0.1, + "p90": 0.2 + } + }, + "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": 1791235858, + "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": 1791235875, + "p50": 0.8, + "p90": 1.3 + } + }, + "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": 1791235896, + "p50": 1.8, + "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": 71, + "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", + "productSourceSha256": "7a672e1242a75d78fc330fb4690a5e5aeea7bb4fe981befa9d85603227403fcb", + "modelBeforeProbe": { + "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": "2026-10-06-09-11-59-623", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + }, + "sceneProbe": { + "acceptance": "DIAGNOSTIC_ONLY", + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "ownerRunId": "20261006T161149Z-4b17a16eb1b64747b0bc0b894f9f8a23", + "productQualification": { + "cases": [ + { + "args": { + "maxEnvironments": 16, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "revision": "169c009ac016a1e3a7efc70fb4377c3cf1286115b62ca60da827060ca24c6020" + } + }, + "case": "current-scene", + "data": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "detachedCamera": { + "available": null, + "notRequested": true + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "maxEnvironments": 16, + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "observationPasses": 2, + "observedStateUnchanged": true, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderQualified": false, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "schemaVersion": 1, + "settingsWritten": false, + "status": "PARTIAL", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "revision": "169c009ac016a1e3a7efc70fb4377c3cf1286115b62ca60da827060ca24c6020" + }, + "unchangedScope": "available fields only; unreadable fields and omitted scene graphs remain unverified", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "success": true + }, + { + "args": { + "camera": { + "extents": [ + 100, + 75 + ], + "eye": [ + 90, + 95, + 65 + ], + "space": "world", + "target": [ + 10, + 15, + 5 + ], + "type": "orthographic", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "maxEnvironments": 16, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "revision": "169c009ac016a1e3a7efc70fb4377c3cf1286115b62ca60da827060ca24c6020" + } + }, + "case": "orthographic", + "error": "Camera.create returned no valid detached camera.", + "errorType": "MechanicalError", + "success": false + } + ], + "coreSha256": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "finalTarget": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "revision": "169c009ac016a1e3a7efc70fb4377c3cf1286115b62ca60da827060ca24c6020" + }, + "images": false, + "initialTarget": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "revision": "169c009ac016a1e3a7efc70fb4377c3cf1286115b62ca60da827060ca24c6020" + }, + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "scope": "module-function-native-api", + "sourceSha256": "7a672e1242a75d78fc330fb4690a5e5aeea7bb4fe981befa9d85603227403fcb" + }, + "renderProbe": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "probeVersion": 1, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "settingsWritten": false, + "status": "DIAGNOSTIC_ONLY", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "success": true + }, + "modelAfterProbe": { + "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": "2026-10-06-09-11-59-623", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + }, + "diagnosticQualification": { + "qualification": "PARTIAL", + "sceneWitnessComplete": false, + "renderingQualified": false, + "nativeQueueIdle": "UNVERIFIED", + "exclusiveSettingsOwnership": "UNVERIFIED", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ] + }, + "failure": { + "type": "ValueError", + "message": "Product case count differs", + "fixture": "01-scene_diagnostic" + }, + "cleanupEvidence": [ + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "success": true + } + }, + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:743dc96d-10c3-442b-b885-7e33c442ecfc", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:743dc96d-10c3-442b-b885-7e33c442ecfc", + "success": true + } + } + ], + "cleanupLatest": { + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:0b124176-e9a1-4cec-a9ca-b9201f8f95db", + "success": true + } + }, + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:743dc96d-10c3-442b-b885-7e33c442ecfc": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:743dc96d-10c3-442b-b885-7e33c442ecfc", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:743dc96d-10c3-442b-b885-7e33c442ecfc", + "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": 12, + "FAIL": 0 + } +} diff --git a/docs/render-scene-evidence-2026-10-06/native-product-r2.json b/docs/render-scene-evidence-2026-10-06/native-product-r2.json new file mode 100644 index 0000000000000000000000000000000000000000..274958210712d9a92298075efc9f114adf25d618 --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/native-product-r2.json @@ -0,0 +1,3558 @@ +{ + "runId": "20261006T162207Z-e1eeca91e55745de9725b745197358c6", + "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": "Diagnostic box complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + } + }, + { + "label": "Diagnostic box native volume", + "status": "PASS", + "evidence": { + "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": "2026-10-06-09-22-17-173", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + } + }, + { + "label": "Diagnostic box independent instance volume", + "status": "PASS", + "evidence": 6000.0 + }, + { + "label": "Diagnostic box native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Diagnostic box public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2200.0, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "entity": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b", + "rootComponentId": "0f35b0e0-50c7-4ae5-b7e0-6501891994db", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.0162, + "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:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6000.0 + } + }, + { + "label": "Independent fixture model witness unchanged across probe", + "status": "PASS", + "evidence": null + }, + { + "label": "Reviewed probe remains an owned read-only diagnostic", + "status": "PASS", + "evidence": { + "qualification": "PARTIAL", + "sceneWitnessComplete": false, + "renderingQualified": false, + "nativeQueueIdle": "UNVERIFIED", + "exclusiveSettingsOwnership": "UNVERIFIED", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ] + } + }, + { + "label": "Three frozen product scene/camera cases match exact arguments and scope", + "status": "PASS", + "evidence": { + "scope": "module-function-native-api", + "cases": [ + { + "case": "current-scene", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + }, + { + "case": "orthographic", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + }, + { + "case": "perspective", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + } + ], + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "images": false + } + }, + { + "label": "01-scene_diagnostic archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 43543, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T162207Z-e1eeca91e55745de9725b745197358c6/01-scene_diagnostic-7db4597c.f3d", + "sha256": "7d43a8acd9c6e9e6d121741ec5a76c0c331ee78b075c519857ec94ee8f1f8a98" + } + }, + { + "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/cp9-product-native-2/artifacts/01-scene_diagnostic-7db4597c.f3d", + "sha256": "7d43a8acd9c6e9e6d121741ec5a76c0c331ee78b075c519857ec94ee8f1f8a98", + "bytes": 43543, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T162207Z-e1eeca91e55745de9725b745197358c6/01-scene_diagnostic-7db4597c.f3d", + "fixture": "01-scene_diagnostic" + } + ], + "fixtures": [ + { + "name": "01-scene_diagnostic", + "status": "PASS", + "checks": 9 + } + ], + "requestedFixtures": [ + "01-scene_diagnostic" + ], + "limitations": [ + "Read-only capability/scene field diagnostic only; partial availability is retained.", + "No render future, scene/settings edit, global native queue or complete-scene proof.", + "No capture, screenshot, image artifact or Shotlog path is enabled." + ], + "diagnosticSources": [ + { + "name": "ralph_jobs.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2" + }, + { + "name": "probe/read_scene_probe.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/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/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/probe/test_read_scene_probe.py", + "sha256": "8df35f06355717a0c8bfd64b66a951a4a349b9257aff0b14ff1db7a02edb8ba4" + }, + { + "name": "probe/READONLY-PROBE.md", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/probe/READONLY-PROBE.md", + "sha256": "01f33dde1a9bfa821b308a91d0889cadce7c6098af73cdcfbe98e66bc527ff41" + }, + { + "name": "product/render_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/product/render_scene.py", + "sha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55" + }, + { + "name": "product/product_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/product/product_scene.py", + "sha256": "93e52db970d5ebd6fa14ede9250a24b21daf5687e377bd2d3ea65c50c82479b7" + }, + { + "name": "product/test_product_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/product/test_product_scene.py", + "sha256": "69d11fce8fc7750b5d0958956781b7943e3bfa36a9811207eaa5782e230cc0c6" + }, + { + "name": "diagnostic_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-product-native-2/diagnostic-sources-20261006T162207Z-e1eeca91e55745de9725b745197358c6/diagnostic_scene.py", + "sha256": "bad536a1d0159eb5e2426e5e671510bc3e0178aee80866f477152f43c3b02073" + } + ], + "acceptanceScope": { + "sceneDiagnostic": "PASS", + "rendering": "NOT_RUN", + "futureLifecycle": "NOT_RUN", + "sceneCompleteness": "NOT_PROVEN", + "queueOwnership": "NOT_PROVEN", + "visual": "NOT_REQUESTED", + "productFunction": "PASS", + "installedPublicRoute": "NOT_RUN" + }, + "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": true, + "enabled": true, + "idleShedSeconds": 300, + "lastDrivingVerbAt": 1791303445.8551686, + "lastError": null + }, + "durationMs": 179, + "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": 1791303408, + "p50": 0.1, + "p90": 0.2 + } + }, + "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": 1791303410, + "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": 1791303426, + "p50": 0.8, + "p90": 1.1 + } + }, + "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": 1791303447, + "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": 61, + "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", + "productSourceSha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55", + "modelBeforeProbe": { + "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": "2026-10-06-09-22-17-173", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + }, + "sceneProbe": { + "acceptance": "DIAGNOSTIC_ONLY", + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "ownerRunId": "20261006T162207Z-e1eeca91e55745de9725b745197358c6", + "productQualification": { + "cases": [ + { + "args": { + "maxEnvironments": 16, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + } + }, + "case": "current-scene", + "data": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "detachedCamera": { + "available": null, + "notRequested": true + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "maxEnvironments": 16, + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "observationPasses": 2, + "observedStateUnchanged": true, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderQualified": false, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "schemaVersion": 1, + "settingsWritten": false, + "status": "PARTIAL", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + }, + "unchangedScope": "available fields only; unreadable fields and omitted scene graphs remain unverified", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "success": true + }, + { + "args": { + "camera": { + "extents": [ + 100, + 75 + ], + "eye": [ + 90, + 95, + 65 + ], + "space": "world", + "target": [ + 10, + 15, + 5 + ], + "type": "orthographic", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "maxEnvironments": 16, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + } + }, + "case": "orthographic", + "data": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "detachedCamera": { + "assignedToViewport": false, + "available": true, + "descriptor": { + "extents": [ + 100.0, + 75.0 + ], + "eye": [ + 90.0, + 95.0, + 65.0 + ], + "space": "world", + "target": [ + 10.0, + 15.0, + 5.0 + ], + "type": "orthographic", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "nativeValidity": { + "after": false, + "before": false, + "knownIssueReference": "FUS-263280", + "renderEligibility": "NOT_ESTABLISHED" + }, + "readbackVerified": true, + "scope": "independent temporary camera; current scene is unchanged" + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "maxEnvironments": 16, + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "observationPasses": 2, + "observedStateUnchanged": true, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderQualified": false, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "schemaVersion": 1, + "settingsWritten": false, + "status": "PARTIAL", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + }, + "unchangedScope": "available fields only; unreadable fields and omitted scene graphs remain unverified", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "success": true + }, + { + "args": { + "camera": { + "angleUnit": "deg", + "eye": [ + 90, + 95, + 65 + ], + "perspectiveAngle": 45, + "space": "world", + "target": [ + 10, + 15, + 5 + ], + "type": "perspective", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "maxEnvironments": 16, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + } + }, + "case": "perspective", + "data": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "detachedCamera": { + "assignedToViewport": false, + "available": true, + "descriptor": { + "angleUnit": "deg", + "eye": [ + 90.0, + 95.0, + 65.0 + ], + "perspectiveAngle": 45.0, + "space": "world", + "target": [ + 10.0, + 15.0, + 5.0 + ], + "type": "perspective", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "nativeValidity": { + "after": false, + "before": false, + "knownIssueReference": "FUS-263280", + "renderEligibility": "NOT_ESTABLISHED" + }, + "readbackVerified": true, + "scope": "independent temporary camera; current scene is unchanged" + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "maxEnvironments": 16, + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "observationPasses": 2, + "observedStateUnchanged": true, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderQualified": false, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "schemaVersion": 1, + "settingsWritten": false, + "status": "PARTIAL", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + }, + "unchangedScope": "available fields only; unreadable fields and omitted scene graphs remain unverified", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "success": true + } + ], + "coreSha256": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "finalTarget": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + }, + "images": false, + "initialTarget": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "revision": "f29af95d2349ad376716d8fe1717542a28f42a9870f7eb6c73ac00e26b20e22b" + }, + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "scope": "module-function-native-api", + "sourceSha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55" + }, + "renderProbe": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "probeVersion": 1, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "settingsWritten": false, + "status": "DIAGNOSTIC_ONLY", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "success": true + }, + "modelAfterProbe": { + "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": "2026-10-06-09-22-17-173", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + }, + "diagnosticQualification": { + "qualification": "PARTIAL", + "sceneWitnessComplete": false, + "renderingQualified": false, + "nativeQueueIdle": "UNVERIFIED", + "exclusiveSettingsOwnership": "UNVERIFIED", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ] + }, + "productNativeQualification": { + "scope": "module-function-native-api", + "cases": [ + { + "case": "current-scene", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + }, + { + "case": "orthographic", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + }, + { + "case": "perspective", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + } + ], + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "images": false + }, + "cleanupEvidence": [ + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "success": true + } + }, + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:42e39b05-4762-44cc-8020-e7de843a79b3", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:42e39b05-4762-44cc-8020-e7de843a79b3", + "success": true + } + } + ], + "cleanupLatest": { + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:f698718d-9496-4d00-af58-d93ae261d16e", + "success": true + } + }, + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:42e39b05-4762-44cc-8020-e7de843a79b3": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:42e39b05-4762-44cc-8020-e7de843a79b3", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:42e39b05-4762-44cc-8020-e7de843a79b3", + "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": 13, + "FAIL": 0 + } +} diff --git a/docs/render-scene-evidence-2026-10-06/native-validity-experiment.json b/docs/render-scene-evidence-2026-10-06/native-validity-experiment.json new file mode 100644 index 0000000000000000000000000000000000000000..6e886b333eb79cf3fef2a5e1ebc451a88a3a0d21 --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/native-validity-experiment.json @@ -0,0 +1,3556 @@ +{ + "runId": "20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee", + "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": "Diagnostic box complete healthy timeline", + "status": "PASS", + "evidence": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + } + }, + { + "label": "Diagnostic box native volume", + "status": "PASS", + "evidence": { + "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": "2026-10-06-09-16-52-633", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + } + }, + { + "label": "Diagnostic box independent instance volume", + "status": "PASS", + "evidence": 6000.0 + }, + { + "label": "Diagnostic box native instance count", + "status": "PASS", + "evidence": 1 + }, + { + "label": "Diagnostic box public and native physical properties", + "status": "PASS", + "evidence": { + "area": 2200.0, + "averageDensity": 2.7e-06, + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "entity": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757", + "rootComponentId": "1b1581f8-8301-4651-b415-14be2aceeb7b", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "mass": 0.0162, + "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:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + }, + "units": { + "area": "mm2", + "averageDensity": "kg/mm3", + "centerOfMass": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6000.0 + } + }, + { + "label": "Independent fixture model witness unchanged across probe", + "status": "PASS", + "evidence": null + }, + { + "label": "Reviewed probe remains an owned read-only diagnostic", + "status": "PASS", + "evidence": { + "qualification": "PARTIAL", + "sceneWitnessComplete": false, + "renderingQualified": false, + "nativeQueueIdle": "UNVERIFIED", + "exclusiveSettingsOwnership": "UNVERIFIED", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ] + } + }, + { + "label": "Three frozen product scene/camera cases match exact arguments and scope", + "status": "PASS", + "evidence": { + "scope": "module-function-native-api", + "cases": [ + { + "case": "current-scene", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + }, + { + "case": "orthographic", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + }, + { + "case": "perspective", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + } + ], + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "images": false + } + }, + { + "label": "01-scene_diagnostic archive preserves native witness", + "status": "PASS", + "evidence": { + "bytes": 43413, + "path": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/01-scene_diagnostic-06ed2ebc.f3d", + "sha256": "ae4ff4e696d37dfbf6252d7ed30be6efc5b31e1a76c991816d2b7378988d26e2" + } + }, + { + "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/cp9-camera-validity-native-1/artifacts/01-scene_diagnostic-06ed2ebc.f3d", + "sha256": "ae4ff4e696d37dfbf6252d7ed30be6efc5b31e1a76c991816d2b7378988d26e2", + "bytes": 43413, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/01-scene_diagnostic-06ed2ebc.f3d", + "fixture": "01-scene_diagnostic" + } + ], + "fixtures": [ + { + "name": "01-scene_diagnostic", + "status": "PASS", + "checks": 9 + } + ], + "requestedFixtures": [ + "01-scene_diagnostic" + ], + "limitations": [ + "Read-only capability/scene field diagnostic only; partial availability is retained.", + "No render future, scene/settings edit, global native queue or complete-scene proof.", + "No capture, screenshot, image artifact or Shotlog path is enabled." + ], + "diagnosticSources": [ + { + "name": "ralph_jobs.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2" + }, + { + "name": "probe/read_scene_probe.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/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/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/probe/test_read_scene_probe.py", + "sha256": "8df35f06355717a0c8bfd64b66a951a4a349b9257aff0b14ff1db7a02edb8ba4" + }, + { + "name": "probe/READONLY-PROBE.md", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/probe/READONLY-PROBE.md", + "sha256": "01f33dde1a9bfa821b308a91d0889cadce7c6098af73cdcfbe98e66bc527ff41" + }, + { + "name": "product/render_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/product/render_scene.py", + "sha256": "d3644233b552ba2126f1b4f84291688fda68c0bbcf4418f37a32ad618402e167" + }, + { + "name": "product/product_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/product/product_scene.py", + "sha256": "93e52db970d5ebd6fa14ede9250a24b21daf5687e377bd2d3ea65c50c82479b7" + }, + { + "name": "product/test_product_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/product/test_product_scene.py", + "sha256": "69d11fce8fc7750b5d0958956781b7943e3bfa36a9811207eaa5782e230cc0c6" + }, + { + "name": "diagnostic_scene.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp9-camera-validity-native-1/diagnostic-sources-20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee/diagnostic_scene.py", + "sha256": "bad536a1d0159eb5e2426e5e671510bc3e0178aee80866f477152f43c3b02073" + } + ], + "acceptanceScope": { + "sceneDiagnostic": "PASS", + "rendering": "NOT_RUN", + "futureLifecycle": "NOT_RUN", + "sceneCompleteness": "NOT_PROVEN", + "queueOwnership": "NOT_PROVEN", + "visual": "NOT_REQUESTED", + "productFunction": "PASS", + "installedPublicRoute": "NOT_RUN" + }, + "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": true, + "enabled": true, + "idleShedSeconds": 300, + "lastDrivingVerbAt": 1791303153.41641, + "lastError": null + }, + "durationMs": 272, + "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": 1791303115, + "p50": 0.1, + "p90": 0.2 + } + }, + "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": 1791303117, + "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": 1791303137, + "p50": 0.8, + "p90": 1.2 + } + }, + "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": 1791303155, + "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", + "productSourceSha256": "d3644233b552ba2126f1b4f84291688fda68c0bbcf4418f37a32ad618402e167", + "modelBeforeProbe": { + "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": "2026-10-06-09-16-52-633", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + }, + "sceneProbe": { + "acceptance": "DIAGNOSTIC_ONLY", + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "ownerRunId": "20261006T161643Z-a855f5a15d664313aa61ec208b9db9ee", + "productQualification": { + "cases": [ + { + "args": { + "maxEnvironments": 16, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + } + }, + "case": "current-scene", + "data": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "detachedCamera": { + "available": null, + "notRequested": true + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "maxEnvironments": 16, + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "observationPasses": 2, + "observedStateUnchanged": true, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderQualified": false, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "schemaVersion": 1, + "settingsWritten": false, + "status": "PARTIAL", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + }, + "unchangedScope": "available fields only; unreadable fields and omitted scene graphs remain unverified", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "success": true + }, + { + "args": { + "camera": { + "extents": [ + 100, + 75 + ], + "eye": [ + 90, + 95, + 65 + ], + "space": "world", + "target": [ + 10, + 15, + 5 + ], + "type": "orthographic", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "maxEnvironments": 16, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + } + }, + "case": "orthographic", + "data": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "detachedCamera": { + "assignedToViewport": false, + "available": true, + "descriptor": { + "extents": [ + 100.0, + 75.0 + ], + "eye": [ + 90.0, + 95.0, + 65.0 + ], + "space": "world", + "target": [ + 10.0, + 15.0, + 5.0 + ], + "type": "orthographic", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "experimentOnly": true, + "nativeIsValidAfter": false, + "nativeIsValidBefore": false, + "nativeObjectType": "adsk::core::Camera", + "readbackVerified": true, + "renderEligible": "NOT_ESTABLISHED", + "scope": "independent temporary camera; current scene is unchanged" + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "maxEnvironments": 16, + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "observationPasses": 2, + "observedStateUnchanged": true, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderQualified": false, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "schemaVersion": 1, + "settingsWritten": false, + "status": "PARTIAL", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + }, + "unchangedScope": "available fields only; unreadable fields and omitted scene graphs remain unverified", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "success": true + }, + { + "args": { + "camera": { + "angleUnit": "deg", + "eye": [ + 90, + 95, + 65 + ], + "perspectiveAngle": 45, + "space": "world", + "target": [ + 10, + 15, + 5 + ], + "type": "perspective", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "maxEnvironments": 16, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + } + }, + "case": "perspective", + "data": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "detachedCamera": { + "assignedToViewport": false, + "available": true, + "descriptor": { + "angleUnit": "deg", + "eye": [ + 90.0, + 95.0, + 65.0 + ], + "perspectiveAngle": 45.0, + "space": "world", + "target": [ + 10.0, + 15.0, + 5.0 + ], + "type": "perspective", + "unit": "mm", + "upVector": [ + -0.3312945782245396, + -0.3312945782245396, + 0.8834522085987723 + ] + }, + "experimentOnly": true, + "nativeIsValidAfter": false, + "nativeIsValidBefore": false, + "nativeObjectType": "adsk::core::Camera", + "readbackVerified": true, + "renderEligible": "NOT_ESTABLISHED", + "scope": "independent temporary camera; current scene is unchanged" + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "maxEnvironments": 16, + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "observationPasses": 2, + "observedStateUnchanged": true, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderQualified": false, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "schemaVersion": 1, + "settingsWritten": false, + "status": "PARTIAL", + "target": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + }, + "unchangedScope": "available fields only; unreadable fields and omitted scene graphs remain unverified", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "success": true + } + ], + "coreSha256": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "finalTarget": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + }, + "images": false, + "initialTarget": { + "documentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "revision": "394392d1aede54275100c06c1b3803070a138397c1ea1875b9bc7ccc1162c757" + }, + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "scope": "module-function-native-api", + "sourceSha256": "d3644233b552ba2126f1b4f84291688fda68c0bbcf4418f37a32ad618402e167" + }, + "renderProbe": { + "camera": { + "object": { + "available": false, + "error": "Native object absent or invalid" + } + }, + "classes": { + "RenderEnvironment": { + "available": true, + "members": { + "id": true, + "isCustomEnvironment": true, + "name": true + }, + "methodInvocation": false + }, + "RenderFuture": { + "available": true, + "members": { + "filename": true, + "imageHeight": true, + "imageWidth": true, + "isValid": true, + "progress": true, + "renderState": true + }, + "methodInvocation": false + }, + "RenderManager": { + "available": true, + "members": { + "isRenderWorkspaceActive": true, + "lights": true, + "renderEnvironments": true, + "rendering": true, + "sceneSettings": true + }, + "methodInvocation": false + }, + "Rendering": { + "available": true, + "members": { + "aspectRatio": true, + "isBackgroundTransparent": true, + "renderQuality": true, + "resolution": true, + "resolutionHeight": true, + "resolutionWidth": true, + "startLocalRender": true + }, + "methodInvocation": false + }, + "SceneSettings": { + "available": true, + "members": { + "backgroundEnvironment": true, + "backgroundSolidColor": true, + "backgroundType": true, + "isDepthOfFieldEnabled": true + }, + "methodInvocation": false + } + }, + "documentAfter": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + }, + "stillActive": { + "available": true, + "value": true + } + }, + "documentBefore": { + "modified": { + "available": true, + "value": true + }, + "saved": { + "available": true, + "value": false + } + }, + "documentFlagsUnchanged": true, + "enums": { + "background": { + "EnvironmentRenderSceneBackgroundType": { + "available": true, + "value": 0 + }, + "SolidColorRenderSceneBackgroundType": { + "available": true, + "value": 1 + } + }, + "camera": { + "OrthographicCameraType": { + "available": true, + "value": 0 + }, + "PerspectiveCameraType": { + "available": true, + "value": 1 + }, + "PerspectiveWithOrthoFacesCameraType": { + "available": true, + "value": 2 + } + } + }, + "environments": { + "count": { + "available": true, + "value": 14 + }, + "items": [ + { + "available": true, + "id": { + "available": true, + "value": "Studio1" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Sharp Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio2" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Rim Highlights" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio3" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Cool Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio5" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Warm Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio6" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Soft Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "Studio7" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Grid Light" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "CustomLoadedEnvironment" + }, + "isCustomEnvironment": { + "available": true, + "value": true + }, + "name": { + "available": true, + "value": "Custom..." + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "crossroads" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Crossroads" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "DryLakeBed" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Dry lake bed" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "field" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "photobooth" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Photobooth" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Plaza" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Plaza" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "skylight" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Skylight" + }, + "objectType": "adsk::fusion::RenderEnvironment" + }, + { + "available": true, + "id": { + "available": true, + "value": "mi360_Snow" + }, + "isCustomEnvironment": { + "available": true, + "value": false + }, + "name": { + "available": true, + "value": "Snow Field" + }, + "objectType": "adsk::fusion::RenderEnvironment" + } + ], + "object": { + "available": true, + "objectType": "adsk::fusion::RenderEnvironments" + }, + "truncated": false + }, + "errors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "exclusiveSettingsOwnership": "UNVERIFIED", + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ], + "nativeQueueIdle": "UNVERIFIED", + "observationComplete": false, + "probeVersion": 1, + "renderManager": { + "available": true, + "objectType": "adsk::fusion::RenderManager", + "ownerMatches": { + "available": true, + "value": true + }, + "workspaceActive": { + "available": true, + "value": false + } + }, + "renderStarted": false, + "rendering": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "isBackgroundTransparent": { + "available": true, + "value": false + }, + "object": { + "available": true, + "objectType": "adsk::fusion::Rendering" + }, + "renderQuality": { + "available": true, + "unit": "native quality (25..100)", + "value": 75 + }, + "resolution": { + "available": true, + "unit": "native RenderResolutions enum", + "value": 17 + }, + "resolutionHeight": { + "available": true, + "unit": "px", + "value": 1242 + }, + "resolutionWidth": { + "available": true, + "unit": "px", + "value": 1961 + } + }, + "scene": { + "aspectRatio": { + "available": true, + "unit": "native RenderAspectRatios enum", + "value": 0 + }, + "aspectRatioHeight": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "aspectRatioWidth": { + "available": true, + "unit": "ratio", + "value": 0 + }, + "backgroundEnvironment": { + "available": null, + "notRead": "Solid background" + }, + "backgroundSolidColor": { + "available": true, + "unit": "RGBA 0..255; opacity ignored by scene", + "value": { + "blue": 178, + "green": 178, + "opacity": 255, + "red": 178 + } + }, + "backgroundType": { + "available": true, + "unit": "native RenderSceneBackgroundTypes enum", + "value": 1 + }, + "brightness": { + "available": true, + "unit": "lux", + "value": 2000.0 + }, + "cameraExposure": { + "available": true, + "unit": "EV", + "value": 12.0 + }, + "cameraFocalLength": { + "available": true, + "nativeUnit": "mm", + "unit": "mm", + "value": 90.0 + }, + "cameraType": { + "available": true, + "unit": "native CameraTypes enum", + "value": 0 + }, + "centerOfFocus": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "depthOfFieldBlur": { + "available": null, + "notRead": "isDepthOfFieldEnabled is false or unreadable" + }, + "groundOffset": { + "available": true, + "nativeUnit": "cm", + "unit": "mm", + "value": 0.0 + }, + "groundPosition": { + "available": null, + "notRead": "isGroundFlattened is false or unreadable" + }, + "groundRoughness": { + "available": null, + "notRead": "isGroundReflections is false or unreadable" + }, + "isDepthOfFieldEnabled": { + "available": true, + "value": false + }, + "isGroundDisplayed": { + "available": true, + "value": true + }, + "isGroundFlattened": { + "available": true, + "value": false + }, + "isGroundReflections": { + "available": true, + "value": false + }, + "lightAngle": { + "available": true, + "nativeUnit": "rad", + "unit": "deg", + "value": -0.0 + }, + "object": { + "available": true, + "objectType": "adsk::fusion::SceneSettings" + } + }, + "sceneWitnessComplete": false, + "settingsWritten": false, + "status": "DIAGNOSTIC_ONLY", + "viewport": { + "available": true, + "objectType": "adsk::core::Viewport" + } + }, + "sessionId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c", + "success": true + }, + "modelAfterProbe": { + "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": "2026-10-06-09-16-52-633", + "sketches": [ + { + "curves": 4, + "fullyConstrained": false, + "name": "Base rectangle", + "profiles": 1 + } + ] + } + ], + "instanceCount": 1, + "instanceVolume": 6000.0, + "occurrences": [], + "parameters": { + "d4": "width", + "d5": "height", + "d6": "depth", + "d7": "0.0 deg", + "depth": "10.0 mm", + "height": "30.0 mm", + "width": "20.0 mm" + }, + "physical": { + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "mass": 0.0162, + "volume": 6000.0 + }, + "timelineCount": 2 + }, + "diagnosticQualification": { + "qualification": "PARTIAL", + "sceneWitnessComplete": false, + "renderingQualified": false, + "nativeQueueIdle": "UNVERIFIED", + "exclusiveSettingsOwnership": "UNVERIFIED", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ], + "gaps": [ + "No render execution or RenderFuture instance was created.", + "No global renderer queue/coexistence proof.", + "Appearance, material, texture, light and occurrence-visibility graphs are outside this bounded probe.", + "Environment IDs and names do not prove custom environment content identity.", + "No admitted revision-to-pixels or full source snapshot claim." + ] + }, + "productNativeQualification": { + "scope": "module-function-native-api", + "cases": [ + { + "case": "current-scene", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + }, + { + "case": "orthographic", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + }, + { + "case": "perspective", + "status": "PASS", + "observation": "PARTIAL", + "fieldErrors": [ + { + "error": "Native object absent or invalid", + "field": "camera" + } + ] + } + ], + "installedPublicRoute": "NOT_RUN", + "rendering": "NOT_RUN", + "images": false + }, + "cleanupEvidence": [ + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "success": true + } + }, + { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00963f81-19c9-4bfa-9337-fe50d6ba3986", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00963f81-19c9-4bfa-9337-fe50d6ba3986", + "success": true + } + } + ], + "cleanupLatest": { + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00c714ff-a621-4da6-b82f-8d08ad89c8df", + "success": true + } + }, + "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00963f81-19c9-4bfa-9337-fe50d6ba3986": { + "label": "close owned document dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00963f81-19c9-4bfa-9337-fe50d6ba3986", + "status": "PASS", + "errors": [], + "raw": { + "closed": true, + "closedDocumentId": "dd15182e-3fa9-4ea3-bc57-4175e60ef00c:00963f81-19c9-4bfa-9337-fe50d6ba3986", + "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": 13, + "FAIL": 0 + } +} diff --git a/docs/render-scene-evidence-2026-10-06/offline-root-r2.json b/docs/render-scene-evidence-2026-10-06/offline-root-r2.json new file mode 100644 index 0000000000000000000000000000000000000000..38a6c9d1aaecd8994f234ee420bb73a4f047f66f --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/offline-root-r2.json @@ -0,0 +1,483 @@ +{ + "runId": "20261006T162006Z-1c1c594a2d", + "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": "13d14fb6dde625736eadc0b7cc9e6a09b97151e49eeb6515bf55c144d3601be5", + "addin/AdomBridge/commands/mechanical/assemblies.py": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "addin/AdomBridge/commands/mechanical/assembly_state.py": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "addin/AdomBridge/commands/mechanical/bill_of_materials.py": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "addin/AdomBridge/commands/mechanical/configurations.py": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "addin/AdomBridge/commands/mechanical/core.py": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "addin/AdomBridge/commands/mechanical/exporting.py": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "addin/AdomBridge/commands/mechanical/features.py": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "addin/AdomBridge/commands/mechanical/geometry.py": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "addin/AdomBridge/commands/mechanical/joint_state.py": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "addin/AdomBridge/commands/mechanical/journal.py": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "addin/AdomBridge/commands/mechanical/motion_links.py": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "addin/AdomBridge/commands/mechanical/operation_history.py": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "addin/AdomBridge/commands/mechanical/operations.py": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "addin/AdomBridge/commands/mechanical/purchased.py": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "addin/AdomBridge/commands/mechanical/readback.py": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "addin/AdomBridge/commands/mechanical/regular_joints.py": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "addin/AdomBridge/commands/mechanical/render_scene.py": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55", + "addin/AdomBridge/commands/mechanical/schema.json": "fa99d1878ab5c65bce4b82515b1eb4e19fde2500b888c6b8029e81a4f3073998", + "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": "ceee914241f04a1978b2f126914cb38b1ec7bafcf320312b70767a8399359fe2", + "dashboard/.gitignore": "b53ee26e6ff1da219b0563333a76d2c9ec19eec713d6ee54e11a1edacb0e9f3d", + "dashboard/Cargo.lock": "03c08d5cd1da907edb998abb1f367f11b970c5a014a937bf98013eaf1b4e111a", + "dashboard/Cargo.toml": "2b2e0fa4aed650f75a9ca1f5cbfecd5d2feb0ebdcf1467386c7c798431f61c5b", + "dashboard/src/demo_audio.rs": "9f0bc1252a3469ec20cb2e3c04c1357b116a0ea9c41b20ef9917c85b1dba2b10", + "dashboard/src/main.rs": "853700ca597d7b9bf458a0af574ab36dd47d9eb951f10b704714c6250746762d", + "dashboard/ui/fusion-icon.png": "a5554421f76c39e3c9a271a95af1f4a623c416381d4c81e2413604b00dd71f5f", + "dashboard/ui/index.html": "319be1ee31938d4873b00cbcf8e4cb63187ba5960493c249b1f5a82a7a854254", + "dashboard/ui/quick-actions.html": "8f7e61c684d96c242ecd124a608b634a5cd14e29e1108d5f3e5cc6582d1039fb", + "dashboard/ui/vendor/newbie-panel.js": "5ed214867df8d16e7c5c50f2508361aa41c04547bc42caf90da7129939e7b8d2", + "demo/audio/2d-board.mp3": "aa3d9708a741395391ff1291aa80022faa82c0ede318aa475d68f099480da809", + "demo/audio/3d-board.mp3": "0e186a8724a661bded904d2fddfd734cea806fe4fc5fd1bf156f9b615170b8ad", + "demo/audio/3d-package.mp3": "0c8d3c0f21beb7a69dbdeb8c935897c5b6f138b93abb3fc56bcbee2cb4c0be20", + "demo/audio/aps.mp3": "1d8bde4b955db04e8328e1dc2578c443217e7300321b9d4ef33df218e91315cf", + "demo/audio/datahub.mp3": "51da3bc18c696baff6c670cf1caf3e8592d431e801a3e4cce927f12c6a2407dc", + "demo/audio/device.mp3": "25eafbaabdd04ed1671e790a0052c01c74ce6ecffe99f2858edd96e8e123bdf0", + "demo/audio/exports.mp3": "ba26a1ed4e7eccb289971126d747e4bb2fa84dc149fd14b156641cb4fd702684", + "demo/audio/footprint.mp3": "40edb0635be76e07d55be8eb80a80b599baf8be3ff590b678d7f76837ee3cab3", + "demo/audio/launch.mp3": "0fb9eb73f8190dd0104a63564f21851d43d56869a2f806b59a64f37c49529a4f", + "demo/audio/library.mp3": "266fac1e5d9ffadae8ec2f14bec83860f872fa8df02bbc34bee017c968120c83", + "demo/audio/make-project.mp3": "a820c7e290493f77841f445a34fad8e040592eb1cbd7472dcee8d5d0c4f9d285", + "demo/audio/mcp.mp3": "e20fed5b4b379392cd07577cfa4dce0cfd4d0ec6c848f9d8319d7327c57de2ff", + "demo/audio/open-design.mp3": "c0995723fc3fc96821df77589c9790cb79e5d21935b6a246d3912d07f9051c6d", + "demo/audio/schematic.mp3": "883aebd1fa3f0082c57c38a4cd252a46360581db37ddf7dfe057a0b7bfa141ee", + "demo/audio/stage.mp3": "6a644f2d40d60021e7aa51c29eec8c2472354f3ca6970b7e6f8afd96f7165c2e", + "demo/audio/symbol.mp3": "a21241431172fb50e47c85a9fcd8cd424a668f884e0b98fc941c4652c7155e06", + "describe.py": "62699752888b561a29cacfef8bce50e559dc8075ef170613ea0424113c341722", + "dockbar.json": "0de36d6305ebec71d5936dc1d29274ee8215d5fd7302f8459658a821d8022f00", + "docs/img/dock-fusion.svg": "365d419a49a6a79f0b88460a067352dd5506d5dbfa1311f3e70d7484103c5cc6", + "eagle_lbr.py": "b1e4900ec49ed6bd5f1367869a2d9f9ff39a445fc7c0ef9c0443cb42a7008cdf", + "fusion_detect.py": "75f5f65fcc4f72373840a684b786f06a79700d0776d6a2000b9ad337edf6bd8b", + "fusion_helper.py": "d53ba9a940d52c42bbcb49c93b96f70bca7ea52080da0e94d1a4a1e5765b979a", + "fusion_ui.py": "0767b1321cf50d53e29fadbbbd21d418a8b886c208cd82f39c6e136abace5dd5", + "handlers/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "handlers/close_fusion.py": "fc962c743bebb33e5b43f8d660b2c84f3c197e6770571052d4080f8e50834d53", + "handlers/dialog_classify.py": "c51895f289589f065b6017d2857a83325051c41e5dd9c46c6e5396a3f3d0b7d5", + "handlers/dismiss_recovery.py": "ab5528e38fa6af44620e2b38ff80c306981ad843fca0d730adbef14f27083f03", + "handlers/fusion_ui.py": "33e209bd784f17986bc8b6b5016ad0c0c519e77093ea5498c8fe49d24e4470d9", + "handlers/open_design.py": "cee0cfdea20c259c7122e0b6c754048b57a54fa13efbd424706568d52bbacbc7", + "handlers/taskbar_overlay.py": "5e02457667c879cad05ca34e934c2034354e489a4d9c1c4701d10ec396456d78", + "install_addin.py": "3c549bed77bca1b844ff3823aaba5da079f9faf6e41cdbff3cd71a058933bea0", + "kicad_lbr.py": "1e0407a64c8bcac8b2a191fbab7b4b0f11455e710035f4e05bb5bc321fde58cc", + "library_bundle.py": "d071b600cefb20243259a8a1e27eb3edfbcefd1c502503ac7698ce0b919646c6", + "package.json": "75ad117c52f36d7dd3c4bbd81bff6841ebb3374c1f9c2c594b64c9ffa2fed45a", + "page.json": "9e96123c652c3c12ca888a61ca402f4ade7247d032af743d218522e2ca4e8478", + "requirements-test.txt": "c144e88f7a259b078519c943f54987885467114d211de382f1e2ab4124753733", + "resources/adom-overlay-32.png": "23014fd52b3a531e4567837cfed0668843353e02ff7682e06a1c4a2f57d394c5", + "rust/Cargo.lock": "f072958eab03c348542baf52d6e082d3cf25346ed75f5b1d65ccb9cc5ceba194", + "rust/Cargo.toml": "be275d4919d09a63c0d5b341fdf8b7e9bf8e9114addedfc9631c69663892bf40", + "rust/PORTING.md": "cdbd1c7795936a73c4fa294964cc89937b32854b7d1474668c55c781e0407d71", + "rust/bridge/Cargo.toml": "a4a29bcb211c9713f78f8c6846b8cd84d3868373d4b5cfcb8ffc82c264153177", + "rust/bridge/src/addin.rs": "1c047f60ff494524886c3042accc6c8466363dde9ccfc7f0cea7f639eba5a38a", + "rust/bridge/src/addin_install.rs": "aa75349181977f7985210c56688621b62744a23f3083d69ec9e4e544fb706092", + "rust/bridge/src/aps_signin.rs": "21d01ee554dd95e61d550860b1d3d090d15e1ceaf99c5a965d16a712ebc67686", + "rust/bridge/src/attach_orient_block.py": "e6fd837dad1b266f999202224665c6d9ea602b8afea13bd759c9cdd735446cbc", + "rust/bridge/src/attach_template.py": "c402f7ec4a928280e38feea2c5a864d8e93496840473832db73908de76f35c38", + "rust/bridge/src/chainexec.rs": "4d02d83422ab70485ef413c87a189acf980254954430781dbafafab074fa01a9", + "rust/bridge/src/chains.rs": "dac4d311cae41e7a086fa08931afdbe2c29dd9f6ff7ecff74da8f92278aedc4f", + "rust/bridge/src/demo.rs": "e2069c22d85e48869b934b17e6b07f91d0c137848cb25a0c6c29d0eea2a6df31", + "rust/bridge/src/electronics.rs": "3a83fbe0f615db400a74ef5a3eec949d615dbe4e4f7d065af42b951630967984", + "rust/bridge/src/epg.rs": "0ccedd7192514b02ceffc082508362d4807e3a27fcf6dd4ab0e54e11959891f4", + "rust/bridge/src/epg_template.py": "b9bfeeb270e8505d04625d41f69d7a4a48646478c1c64e1c9e171c2ed7db40a1", + "rust/bridge/src/epg_types.json": "be5fd128d7becf98002e3ce257f5a2f5c630480a385fe7d5319800c62e19636a", + "rust/bridge/src/etiquette.rs": "2ebc3ae027f1a976c6d1265832507bafb32d14732295d487602093dd9e2c3822", + "rust/bridge/src/fusion_default_designrules.xml": "c087e9bf8fb7d4bfc0eaffc280dcb1437c45823d846545cb46938b93d9abf534", + "rust/bridge/src/fusion_prefs.rs": "2aee1d6d12545aaead793719589484a1b1b628230bc0849cbbc0eb3d485a0634", + "rust/bridge/src/fusionpath.rs": "e9d7b98507c70d9d1fccb35f312143e0f6a05e5462b6926b08a2cb48d17e6a45", + "rust/bridge/src/inspect_bodies_script.py": "5e1cf1a6516b3fc4fc705d1dcf7eb4dacc23bef9124a2e0cd6f13dd977cb7dea", + "rust/bridge/src/janitor.rs": "0c6d7bf3c050af375faab5d9cd89204e5a6aa6577411b4f9042c353ab26eddba", + "rust/bridge/src/launch.rs": "76054e794a63abf15defc89166703f0d3da87531a4ea7c9bf2123e1e279dac14", + "rust/bridge/src/lbr_wrap_parts.json": "f237770833807f095940f8b8acbf544b0ce337f44a9b0593eef336a46e3dfb29", + "rust/bridge/src/lifecycle.rs": "7a909d100de6cd57779ab9bb9dcd786293b6d531ce1aeff2e7555a85908b5057", + "rust/bridge/src/livefeed.rs": "08d1f445b524aa602fac937b28bec3e2254f3e7f9405b09a932d8e39d0a1c3b9", + "rust/bridge/src/main.rs": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a", + "rust/bridge/src/maintenance.rs": "f5e98a22248c217edf399993cf8bbc2462fba781c7de64d1c5f8c8141a77a5ce", + "rust/bridge/src/make3d_orient_block.py": "8bcd3f2b86602ea74229a6fd686db5b306d49085d0bf4920b7e37c1fa4b186e1", + "rust/bridge/src/make3d_placement_block.py": "9aa001d7eae80edb8a8c23da55ea60f5af8917c7e705896099c35b5ac4b9d879", + "rust/bridge/src/make3d_template.py": "ee5506673f832002796f227c71d693e4879867c7edcdd24b80abd22602d89bc5", + "rust/bridge/src/managed.rs": "941398dc076d4c7189a297cba0361cd5823687e7f64953c68575212da8f3ee62", + "rust/bridge/src/mcp.rs": "f71d03df88067d4d5e20b4a7cf4822ace25b114db8d361b5dc987962e41672d5", + "rust/bridge/src/mint.rs": "85d6430a129bc2ffc5ac005656d6f297058413eef2ae2e6532accd85c247b187", + "rust/bridge/src/operation_status.rs": "cdc3b88f214abeac3d0b0dc50ae10a356cd0c061388d2d39d95bb6fff0753dc1", + "rust/bridge/src/orchestrations.rs": "e26e61c2132fe272231af9e4825cd527d20772209e2aa9d6d9ae3ffb2b978b96", + "rust/bridge/src/palette.rs": "a31810a880fbfe5c7301f5f087b9986218b1fdcb4ce8840f85111ca9bec281b8", + "rust/bridge/src/pref_script.py": "d057d8240103313483bb8627a4a980553e8cc5901dd62249e87d97fd70935f19", + "rust/bridge/src/prove.rs": "4fa3bab3277f885c6017ad368af80d161f8fb5f9c8d0481ef42d0892e2ccd37d", + "rust/bridge/src/readiness_exec.rs": "f6653592d7ec05ebbf6eb548b7484fc4e99a14970e87fc486de6810ca810ef14", + "rust/bridge/src/routing.rs": "ebcf1b04442957dbc2c2731758995cb6b4579e51dcfd5b8cd4f69b4326226187", + "rust/bridge/src/routing_planner.py": "d901c4bad9bad8571e07a35af0afc4a3f74845b0e3dccc56f00b8451846abc2a", + "rust/bridge/src/routing_script.py": "9ce0e7ee1ddab0cec7b90a9ee84c918f1914b41c507b575719e6910b5fdf4a69", + "rust/bridge/src/seat.rs": "62029258deddc252ae016ba2afcd8904cbe697e5cd38a03302f6798018317f49", + "rust/bridge/src/services.rs": "6758b69e2e852995bce3acdfebd0cffdc68dac896555eb18e7fe66d7493a5c4f", + "rust/bridge/src/signin.rs": "cb4dcbbabaf83dc1dbd8ce2e80fd1733b6a81c4fbbc4cf20e78b3cba7c37bd61", + "rust/bridge/src/small_verbs.rs": "a05053ce098062498e7f9b912d12e5998b93b8903f7bec4db243cf22c4a0c526", + "rust/bridge/src/testproject.rs": "02b4d1ec6ab2d196b396f57f58b07e0bdcc522f02524ccbedfae4a4af5f90e21", + "rust/bridge/src/timings.rs": "b41fc1604c44f403bc1fe51f01119c19d62e93d5e5d393c2f733539ad2d6daad", + "rust/bridge/src/tour.rs": "bec9eac6fa40075325f66280f3509633b26cd18b3878b3e7cd84696e4d1a2bed", + "rust/bridge/tests/fixtures/board_info_sample.json": "f2c8688bf3f877f7c13efa6510d73af4792553e8325e91bd4f3be14c20df4ba6", + "rust/bridge/tests/golden/attach_script.json": "506b21ab31ebe8a7a948056bed532186decefabe220e739d1d96894f3caf5495", + "rust/bridge/tests/golden/epg_script.json": "748f7b1c161cdf663cdec3e720714fec0d3757819d96b645b38e3ac5dbbe338c", + "rust/bridge/tests/golden/make3d_script.json": "80ff2d73c9a7c88e5170935d292a8475ef963e324957200c6764b8342356d1c2", + "rust/bridge/tests/golden/mtp.json": "1d61ddf58ff5d121f878cb3304101ff328fb1e219d99652894b34ec2e172fe35", + "rust/core/Cargo.toml": "317c07a50b175ae3fd3ac9ee82065568738e3e84fbe647612c109ecd7ba076dd", + "rust/core/src/ab.rs": "f71893214420b66fa75abce0c1ebaeb763fa26b191c6d420abae6201acd0c943", + "rust/core/src/alerts.rs": "e51914d3c4a8122762a45c0ee825f0459ba4197488b319fb755a4170c405b593", + "rust/core/src/aps.rs": "a5bb2860aa8a2b155f41280e8abb1cb8a01fcc50379b1c964f032816d3a2c4fa", + "rust/core/src/contract.rs": "69ca49c4469c323887efecb10333b51ad9f6813fc450422c155f9983238acd26", + "rust/core/src/dialog_rules.json": "05c015e80ee38b68d3a0330d34327cacd294d8f0e235dba1a21d2999c6091784", + "rust/core/src/dialogs.rs": "f956a82345726bc2e50e8b11780a36326f86ae7e930aa79869314fe5b9282d46", + "rust/core/src/host.rs": "7183e1cb5e3fc00d2f1c0b98446612de77a397bc77adcb677822131df36d3943", + "rust/core/src/lib.rs": "4897c959c4bc61a118d4039f2550c7ea365a839e6d537a3f041f26ad6bb41662", + "rust/core/src/readiness.rs": "0e89546a8411645e880e27e22d113bebbe04d2a61e019738b82b3ff215737e2d", + "rust/core/src/readiness_hints.json": "c9825ddc2cace06e73c414e2117748f0b49754b240eee0f69a37705034bff867", + "rust/core/src/windows_facts.rs": "12a76a7a56ff7b28cd229bf93628e836deb6d804177b2d65c3545e8793c28013", + "rust/core/tests/alerts_golden.rs": "286b72406009bf3041954c2e4e0becf6bb1c71b30b7458a6251e47ff067e503c", + "rust/core/tests/dialogs_golden.rs": "15247100daca1c2cb70d0d434998934191e0fa0d317d92ab3ef53593a011c850", + "rust/core/tests/golden/alerts.json": "87a0f799497e63ad1e3ae36c469dcd667cd41bec79d8c733cf391746bae59ffc", + "rust/core/tests/golden/dialog_titles.json": "ca164599b90d6d3b800c232bf9105e10130a5d35c92a93428e3ab63a2f668076", + "rust/core/tests/golden/readiness.json": "2475846c8c047d78dc72d4770f2b1ef4d6b755907576b217c4ad507e8c6df98d", + "rust/core/tests/readiness_golden.rs": "092afc32a81098c2cd8267b827751606a34794be6358fe7c7c3b2a6860a19359", + "rust/lbr/Cargo.toml": "9e943260ba115865f6c734e12a4088a0474963615ad3138b5631513f5336feb0", + "rust/lbr/src/lib.rs": "c23a1c6aa81c95ae24d76e2d1bcb5c3d8ca9321a0d11069987d7758f3135c676", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbr": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbrx": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "rust/lbr/tests/fixtures/CH340G.lbr": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "rust/lbr/tests/fixtures/CH340G.lbrx": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "rust/lbr/tests/fixtures/Demo_Board.bundle.zip": "ad7d754bebdae8e46ee67de4901373b2114c87ad4356da44b6601a38d5c0721f", + "rust/lbr/tests/fixtures/Demo_Board.lbr": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "rust/lbr/tests/fixtures/Demo_Board.lbrx": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "rust/lbr/tests/fixtures/IN-S63BTG.lbr": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "rust/lbr/tests/fixtures/IN-S63BTG.lbrx": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "rust/lbr/tests/fixtures/LAN7800.lbr": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "rust/lbr/tests/fixtures/LAN7800.lbrx": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbr": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbrx": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "rust/lbr/tests/fixtures/syn_deadconnect.lbr": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "rust/lbr/tests/fixtures/syn_deadconnect.lbrx": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "rust/lbr/tests/fixtures/syn_duppad.lbr": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "rust/lbr/tests/fixtures/syn_duppad.lbrx": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "rust/lbr/tests/fixtures/syn_noteagle.lbr": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "rust/lbr/tests/fixtures/syn_noteagle.lbrx": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "rust/lbr/tests/fixtures/syn_truncated.lbr": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "rust/lbr/tests/fixtures/syn_truncated.lbrx": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "rust/lbr/tests/fixtures/zipslip.zip": "62789c0c18ec56ea3a7ae6c6dcceff94581ea5a3f4a7d250229820fc44fb1657", + "rust/lbr/tests/golden/ABM8-16.000MHZ-B2-T.json": "59f0a1eb337db1aecd9bd4438c29fa39ff50fc3829e9fc34f8e8b09f1dd6e75d", + "rust/lbr/tests/golden/CH340G.json": "a6ab7cc05ec4ef537a499dc844857bbd0b4fbcb693d42f60be2755efa47d7412", + "rust/lbr/tests/golden/Demo_Board.bound3.lbr": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "rust/lbr/tests/golden/Demo_Board.bound3.lbrx": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "rust/lbr/tests/golden/Demo_Board.bound5.lbr": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "rust/lbr/tests/golden/Demo_Board.bound5.lbrx": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbr": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbrx": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "rust/lbr/tests/golden/Demo_Board.json": "f5250ac9d4e1761ea2a37f99437dbb431d90011863bbdc3793cddd586334f900", + "rust/lbr/tests/golden/Demo_Board.metadata.json": "f77498a63f5c99f5e228dbc6d5d27d32ffbbdb0fc385f3e6f423812105eefd1a", + "rust/lbr/tests/golden/IN-S63BTG.json": "2c9695c52cb73609c8c11af135609746a25f903b556e45dbb1b2bffcde031cda", + "rust/lbr/tests/golden/LAN7800.json": "400187b6fa0d2c2a55a1fc166f45be48fd1e1716910f97c15bc86ee3ca29ba9f", + "rust/lbr/tests/golden/STM32L431RCT6TR.json": "a4abd1bc6e0d9e22ecb3bb05b188a0df3dcd3acfe645c00c3c0ffdf394526212", + "rust/lbr/tests/golden/bundle_files.json": "e9ce9c1fcc880aebdfd9ca91cd3c489fca0c44a109f594d6d71535e24e98b02d", + "rust/lbr/tests/golden/inject_bindings.json": "70f08781980c5b3932154f4e05bde9527b8519e57cb79fb625e650d91e428680", + "rust/lbr/tests/golden/pair_parts.json": "269217c7b343b934c49668fd3cf31ca26124759198df05971d195c5eff2f7fc5", + "rust/lbr/tests/golden/preflight_and_parts.json": "3fab24b531175c303933c303550bbb36b1a4fac84631e8e136cc5bf5c3d7f4fc", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbr": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbrx": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbr": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbrx": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/CH340G.lbr": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G.lbrx": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbr": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbrx": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/IN-S63BTG.lbr": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG.lbrx": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbr": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbrx": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/LAN7800.lbr": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800.lbrx": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbr": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbrx": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbr": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbrx": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbr": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbrx": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/index.json": "a21429c3d77845998f97a2233394e1756ed99a1ca1b24d19a2fee2a156d0b362", + "rust/lbr/tests/golden.rs": "02df17a9be23b9727e1732f4b5079c23910b2fbfd45dbeaa8b07636c23a306cf", + "rust/os-mac/Cargo.toml": "864f9685ed5bb133c51c7fb979ab03175c6310f7a74db761e024b7635aa10851", + "rust/os-mac/src/lib.rs": "d0840cfd26262792ed9318b73df071eb523f7d19ffb72277ccc3ba1ba47263a4", + "rust/os-win/Cargo.toml": "1dbd93b057c4ac2a895a0b2dc2636c19330248854f3a8bde8922d27011b01f45", + "rust/os-win/src/lib.rs": "4461931dbe8899dfc8ccc1e80e557cdb7eefbc4e584d4dbe743a31b507f1682b", + "server.py": "c077d9c162e5b170365c5735b69e38995724b0443b4aedc6af9f802ee5539870", + "tests/daily_verb_cron.sh": "6c94a5bc0d157a91e1363eda40b62895a05d9e1b75667e66e1d02a8d63adcb4e", + "tests/fusion_harness.py": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2", + "tests/job_acceptance/busy/CONTRACT.md": "9e80e786ef63b88782188c0fde43cec476849204b279ad7a5613155c078eecc9", + "tests/job_acceptance/busy/README.md": "84ab99f27c756e6e609548c246dd0dbcba03670ffdb5bc40a029b0b7f0c68666", + "tests/job_acceptance/busy/adjudicate_saved.py": "d97f1e44e99b14bacecfbb52cc4bc5a1d747d9b9c1f7a306f2f29258f8608221", + "tests/job_acceptance/busy/busy_status.py": "3cdb4ccf2b326bdd940e209f8254fe773d084cc4ba77933a5651701d03b0f236", + "tests/job_acceptance/busy/manifest.json": "fc778a3e3ccbe4494d37155047ccfe4e983977ff1303a612a034b810e67b6b5f", + "tests/job_acceptance/busy/test_busy_status.py": "28241f5ae8733dd4e3d24a6a4edcd80ec6f0ed894348ac387508355bc6a2c514", + "tests/job_acceptance/history/CONTRACT.md": "304babc725f467d5fb11364f0bfa21d3468617e9ddb4f26ab0ff15f920e11e22", + "tests/job_acceptance/history/history_acceptance.py": "3be02c0f7ee3986e1ade0cb4e920822ca3315983afcf0f6019c9098c54221b9d", + "tests/job_acceptance/history/manifest.json": "0f072df1a6b811f43155699d195f5bdb0f566a08b13d2cebc132ad31cd50fc8c", + "tests/job_acceptance/history/test_history_acceptance.py": "108d4f43d5bccea7fbaafdd9364b1ff87489f4c8bbf658495cde3185dcab16db", + "tests/ralph_assemblies.py": "9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903", + "tests/ralph_everyday.py": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "tests/ralph_jobs.py": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f", + "tests/ralph_mechanical.py": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "tests/ralph_support.py": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "tests/run_verb_tests.py": "2523a0f5612672be8d8310c92e58d02e9382adc107271cc7feef5763a7631b43", + "tests/test_addin_lifecycle.py": "25511747a47c2062ed569798adfbb62795b386572058a4f9ea0980d616896b03", + "tests/test_bridge_contracts.py": "152cd0e20016c4a8a02769527161971b507ee814d1427db096efa23a06dd0143", + "tests/test_document_hygiene.py": "650eea3f8a1d577a90c7e57016188b0c812415f48f9ad8948f1f94a17fdbad13", + "tests/test_fusion_harness.py": "42d9f33cb6359296712ed8aeb43f1d290cf4269dc07d6a9668dde1588e534de2", + "tests/test_http_server.py": "2a4da041d350600ff4e0736a03a4cbde816c2d2074e92163203b2fa89c51827c", + "tests/test_live_feed_drain.py": "76a838eaec5314e6498357b02d4df65e67c4508abb7712cb867e398eb90952b2", + "tests/test_mechanical.py": "4abb8cc9d2f0ba2e6e0541ee87b84299a580446476e5fd1a8b63ddb286189246", + "tests/test_mechanical_assemblies.py": "1f9c6bb003eedb01f9012e331f81a5b88504c5468f0b31bba0b489b8ad670fc9", + "tests/test_mechanical_configurations.py": "8dede467568a1b9f284c00acda9c6c8429f7da26f618dae4cea18003c5a58eb5", + "tests/test_mechanical_everyday.py": "f7e3d1eddd953c86b5f85c9a6d1788085df4968f02c89383c1addf0b06208d32", + "tests/test_mechanical_regular_joints.py": "7688bb79489ca7f3be92ff2b811da555dc29fe1f347d9751d4dd3119ae45dbb4", + "tests/test_mechanical_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": [ + "python", + "shadow" + ], + "groups": [ + { + "group": "python", + "command": [ + "/usr/bin/python3", + "-m", + "unittest", + "discover", + "-s", + "tests", + "-p", + "test_*.py" + ], + "cwd": "/home/adom/project/fusion-render-next", + "status": "PASS", + "coverageKind": "tests", + "returncode": 0, + "testCount": 479, + "seconds": 14.27 + }, + { + "group": "shadow", + "command": [ + "/usr/bin/python3", + "tools/shadow_check.py", + "/home/adom/project/fusion-render-next/ab_client.py", + "/home/adom/project/fusion-render-next/ad_client.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/AdomBridge.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/__init__.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/activity_palette.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/app_state.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/assembly_bom.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/close_document.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/cloud_documents.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/design_info.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/document_hygiene.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/document_info.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/electron_view.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/electronics.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/export.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/import_file.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/manufacturing.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/__init__.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/assemblies.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/assembly_state.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/bill_of_materials.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/configurations.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/core.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/exporting.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/features.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/geometry.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/joint_state.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/journal.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/motion_links.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/operation_history.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/operations.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/purchased.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/readback.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/regular_joints.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/render_scene.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/sketch_edits.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/sketches.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/mechanical/transactions.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/modeling.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/open_electronics_file.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/open_lbr.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/parameters.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/physical_properties.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/screenshot.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/commands/silkscreen_capture.py", + "/home/adom/project/fusion-render-next/addin/AdomBridge/http_server.py", + "/home/adom/project/fusion-render-next/aps.py", + "/home/adom/project/fusion-render-next/describe.py", + "/home/adom/project/fusion-render-next/eagle_lbr.py", + "/home/adom/project/fusion-render-next/fusion_detect.py", + "/home/adom/project/fusion-render-next/fusion_helper.py", + "/home/adom/project/fusion-render-next/fusion_ui.py", + "/home/adom/project/fusion-render-next/handlers/__init__.py", + "/home/adom/project/fusion-render-next/handlers/close_fusion.py", + "/home/adom/project/fusion-render-next/handlers/dialog_classify.py", + "/home/adom/project/fusion-render-next/handlers/dismiss_recovery.py", + "/home/adom/project/fusion-render-next/handlers/fusion_ui.py", + "/home/adom/project/fusion-render-next/handlers/open_design.py", + "/home/adom/project/fusion-render-next/handlers/taskbar_overlay.py", + "/home/adom/project/fusion-render-next/install_addin.py", + "/home/adom/project/fusion-render-next/kicad_lbr.py", + "/home/adom/project/fusion-render-next/library_bundle.py", + "/home/adom/project/fusion-render-next/rust/bridge/src/attach_orient_block.py", + "/home/adom/project/fusion-render-next/rust/bridge/src/inspect_bodies_script.py", + "/home/adom/project/fusion-render-next/rust/bridge/src/make3d_orient_block.py", + "/home/adom/project/fusion-render-next/rust/bridge/src/make3d_placement_block.py", + "/home/adom/project/fusion-render-next/rust/bridge/src/pref_script.py", + "/home/adom/project/fusion-render-next/rust/bridge/src/routing_planner.py", + "/home/adom/project/fusion-render-next/rust/bridge/src/routing_script.py", + "/home/adom/project/fusion-render-next/server.py", + "/home/adom/project/fusion-render-next/tests/fusion_harness.py", + "/home/adom/project/fusion-render-next/tests/job_acceptance/busy/adjudicate_saved.py", + "/home/adom/project/fusion-render-next/tests/job_acceptance/busy/busy_status.py", + "/home/adom/project/fusion-render-next/tests/job_acceptance/busy/test_busy_status.py", + "/home/adom/project/fusion-render-next/tests/job_acceptance/history/history_acceptance.py", + "/home/adom/project/fusion-render-next/tests/job_acceptance/history/test_history_acceptance.py", + "/home/adom/project/fusion-render-next/tests/ralph_assemblies.py", + "/home/adom/project/fusion-render-next/tests/ralph_everyday.py", + "/home/adom/project/fusion-render-next/tests/ralph_jobs.py", + "/home/adom/project/fusion-render-next/tests/ralph_mechanical.py", + "/home/adom/project/fusion-render-next/tests/ralph_support.py", + "/home/adom/project/fusion-render-next/tests/run_verb_tests.py", + "/home/adom/project/fusion-render-next/tests/test_addin_lifecycle.py", + "/home/adom/project/fusion-render-next/tests/test_bridge_contracts.py", + "/home/adom/project/fusion-render-next/tests/test_document_hygiene.py", + "/home/adom/project/fusion-render-next/tests/test_fusion_harness.py", + "/home/adom/project/fusion-render-next/tests/test_http_server.py", + "/home/adom/project/fusion-render-next/tests/test_live_feed_drain.py", + "/home/adom/project/fusion-render-next/tests/test_mechanical.py", + "/home/adom/project/fusion-render-next/tests/test_mechanical_assemblies.py", + "/home/adom/project/fusion-render-next/tests/test_mechanical_configurations.py", + "/home/adom/project/fusion-render-next/tests/test_mechanical_everyday.py", + "/home/adom/project/fusion-render-next/tests/test_mechanical_regular_joints.py", + "/home/adom/project/fusion-render-next/tests/test_mechanical_render_scene.py", + "/home/adom/project/fusion-render-next/tests/test_mechanical_transactions.py", + "/home/adom/project/fusion-render-next/tests/test_operation_dispatch.py", + "/home/adom/project/fusion-render-next/tests/test_operation_history.py", + "/home/adom/project/fusion-render-next/tests/test_operation_journal.py", + "/home/adom/project/fusion-render-next/tests/test_operation_status_route.py", + "/home/adom/project/fusion-render-next/tests/test_portable_tree.py", + "/home/adom/project/fusion-render-next/tests/test_ralph_assemblies.py", + "/home/adom/project/fusion-render-next/tests/test_ralph_campaign.py", + "/home/adom/project/fusion-render-next/tests/test_ralph_everyday.py", + "/home/adom/project/fusion-render-next/tests/test_ralph_jobs.py", + "/home/adom/project/fusion-render-next/tests/test_routing.py", + "/home/adom/project/fusion-render-next/timings.py", + "/home/adom/project/fusion-render-next/tools/abrun.py", + "/home/adom/project/fusion-render-next/tools/adrun.py", + "/home/adom/project/fusion-render-next/tools/check-bridge.py", + "/home/adom/project/fusion-render-next/tools/check_portable_tree.py", + "/home/adom/project/fusion-render-next/tools/freeze-contract.py", + "/home/adom/project/fusion-render-next/tools/gen-readme-verbs.py", + "/home/adom/project/fusion-render-next/tools/live_feed_drain.py", + "/home/adom/project/fusion-render-next/tools/package-mechanical-dev.py", + "/home/adom/project/fusion-render-next/tools/promote.py", + "/home/adom/project/fusion-render-next/tools/shadow_check.py", + "/home/adom/project/fusion-render-next/tools/video/compose.py" + ], + "cwd": "/home/adom/project/fusion-render-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.371 + } + ], + "status": "PASS", + "sourceChanged": false +} diff --git a/docs/render-scene-evidence-2026-10-06/product_scene.py b/docs/render-scene-evidence-2026-10-06/product_scene.py new file mode 100644 index 0000000000000000000000000000000000000000..d5a758ddb0e840d984d6d39265edd2b077b98179 --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/product_scene.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python3 +"""Qualify a frozen scene-read function in the existing pinned runtime; no images. + +This is deliberately not installed-public-route or rendering qualification. +The accepted owned-fixture runner supplies baseline guards and exact cleanup. +""" +import argparse +import hashlib +import importlib.util +import json +import math +from pathlib import Path +import signal +import sys + +DIAGNOSTIC_SHA = 'bad536a1d0159eb5e2426e5e671510bc3e0178aee80866f477152f43c3b02073' +# Exact core bytes shared by the accepted pinned dev8 runtime and candidate. +CORE_SHA = '9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a' + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def sha(data): + return hashlib.sha256(data).hexdigest() + + +def cases(): + common = dict(space='world', unit='mm', eye=[90,95,65], target=[10,15,5], + upVector=[-3/math.sqrt(82),-3/math.sqrt(82),8/math.sqrt(82)]) + return [('current-scene', None), + ('orthographic', dict(common, type='orthographic', extents=[100,75])), + ('perspective', dict(common, type='perspective', perspectiveAngle=45, angleUnit='deg'))] + + +def owned_program(probe, native_script, product_source, product_sha, **identity): + need(sha(product_source.encode()) == product_sha, 'Product source differs from frozen SHA') + program = probe.owned_script(native_script, **identity) + payload = dict(source=product_source, sha256=product_sha, coreSha256=CORE_SHA, cases=cases()) + return program + '\nPRODUCT = json.loads(' + repr(json.dumps(payload)) + ')\n' + ''' +import hashlib, types +require(hashlib.sha256(PRODUCT['source'].encode()).hexdigest() == PRODUCT['sha256'], 'Product source hash differs') +core = modules[0] +require(hashlib.sha256(Path(core.__file__).read_bytes()).hexdigest() == PRODUCT['coreSha256'], 'Serving core source differs') +candidate = types.ModuleType(core.__package__ + '.render_scene_native_qualification') +candidate.__package__ = core.__package__ +exec(compile(PRODUCT['source'], '', 'exec'), candidate.__dict__) +product_results = [] +initial_target = core.current_target(app) +require(initial_target['documentId'] == REQUEST['documentId'], 'Product target is not the owned fixture') +for label, camera in PRODUCT['cases']: + request = {'sessionId': REQUEST['sessionId'], 'target': dict(initial_target), 'maxEnvironments': 16} + if camera is not None: + request['camera'] = camera + try: + value = candidate.render_scene_inspect(app, request) + product_results.append({'case':label, 'args':request, 'success':True, 'data':value}) + except Exception as error: + product_results.append({'case':label, 'args':request, 'success':False, + 'errorType':type(error).__name__, 'error':str(error)[:1024]}) + break +final_target = core.current_target(app) +require(initial_target == final_target and app.activeDocument == document, 'Product target changed') +result['productQualification'] = {'sourceSha256':PRODUCT['sha256'], 'coreSha256':PRODUCT['coreSha256'], + 'scope':'module-function-native-api', 'installedPublicRoute':'NOT_RUN', 'rendering':'NOT_RUN', + 'images':False, 'initialTarget':initial_target, 'finalTarget':final_target, 'cases':product_results} +require(len(json.dumps(result,allow_nan=False).encode()) <= MAX_OUTPUT_BYTES, 'Combined output exceeds byte budget') +''' + + +def close(left, right): + if isinstance(right, dict): + return isinstance(left, dict) and set(left) == set(right) and all(close(left[k], v) for k,v in right.items()) + if isinstance(right, list): + return isinstance(left, list) and len(left) == len(right) and all(close(a,b) for a,b in zip(left,right)) + if type(right) in (int,float): + return type(left) in (int,float) and math.isfinite(left) and math.isclose(left,right,rel_tol=1e-10,abs_tol=1e-8) + return type(left) is type(right) and left == right + + +def qualify(value, product_sha, session, document): + need(len(json.dumps(value,allow_nan=False).encode()) <= 128*1024, 'Combined output exceeds byte budget') + result = value['productQualification'] + need(result['sourceSha256'] == product_sha and result['coreSha256'] == CORE_SHA, 'Product/core source identity differs') + need(result['scope'] == 'module-function-native-api' and result['installedPublicRoute'] == 'NOT_RUN' + and result['rendering'] == 'NOT_RUN' and result['images'] is False, 'Qualification scope expanded') + target = result['initialTarget'] + need(target == result['finalTarget'] and target['documentId'] == document + and isinstance(target['revision'],str) and bool(target['revision']), 'Product target changed') + expected = cases() + need(len(result['cases']) == len(expected), 'Product case count differs') + qualification = [] + for row, (name, camera) in zip(result['cases'], expected): + need(row['case'] == name and row.get('success') is True, 'Product case failed: '+name+' '+str(row.get('error',''))) + arguments = dict(sessionId=session,target=target,maxEnvironments=16) + if camera is not None: + arguments['camera'] = camera + need(close(row['args'],arguments), 'Product arguments differ: '+name) + data = row['data'] + need(data['target'] == target and data['observationPasses'] == 2 and data['maxEnvironments'] == 16 + and data['observedStateUnchanged'] is True and data['documentFlagsUnchanged'] is True, + 'Product did not establish unchanged scoped state: '+name) + need(data['sceneWitnessComplete'] is False and data['renderQualified'] is False + and data['renderStarted'] is False and data['settingsWritten'] is False + and data['nativeQueueIdle'] == 'UNVERIFIED' and data['exclusiveSettingsOwnership'] == 'UNVERIFIED' + and isinstance(data['gaps'],list) and bool(data['gaps']), 'Product scope claims expanded: '+name) + need(type(data['observationComplete']) is bool and isinstance(data['errors'],list) + and data['status'] == ('OBSERVED' if data['observationComplete'] else 'PARTIAL') + and (not data['errors'] or not data['observationComplete']), 'Product availability claims contradict errors: '+name) + prepared = data['detachedCamera'] + if camera is None: + need(prepared == {'available':None,'notRequested':True}, 'Unexpected camera construction') + else: + need(prepared['available'] is True and prepared['readbackVerified'] is True + and prepared['assignedToViewport'] is False and close(prepared['descriptor'],camera), + 'Detached camera readback differs: '+name) + qualification.append({'case':name,'status':'PASS','observation':data['status'],'fieldErrors':data['errors']}) + return dict(scope='module-function-native-api', cases=qualification, installedPublicRoute='NOT_RUN', + rendering='NOT_RUN', images=False) + + +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('cp9_accepted_diagnostic',path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +def campaign_type(diagnostic, modules, probe, files, product_source, product_sha): + class ExtendedProbe: + @staticmethod + def owned_script(factory, **identity): + return owned_program(probe,factory,product_source,product_sha,**identity) + base = diagnostic.campaign_type(modules,ExtendedProbe,files) + class ProductScene(base): + def scene_diagnostic(self): + self.report['acceptanceScope'].update(productFunction='REQUESTED',installedPublicRoute='NOT_RUN') + self.report['productSourceSha256'] = product_sha + super().scene_diagnostic() + self.report['productNativeQualification'] = qualify(self.report['sceneProbe'],product_sha,self.session,self.document_id) + self.check('Three frozen product scene/camera cases match exact arguments and scope',True,self.report['productNativeQualification']) + self.report['acceptanceScope']['productFunction'] = 'PASS' + return ProductScene + + +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','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(dict(hostCalls=False,images=False,rendering=False,installedPublicRoute='NOT_RUN', + fixture='one owned 20x30x10 mm box',probeCalls=1,cases=[x[0] for x in cases()]))) + return 0 + need(all(vars(args).values()), 'All source/identity/version/evidence arguments must be explicit') + diagnostic = load_diagnostic(args.diagnostic) + product = Path(args.product).resolve() + data = product.read_bytes() + need(sha(data) == args.product_sha and data.decode().encode() == data, 'Product bytes differ from frozen SHA/UTF8') + folder,files = diagnostic.verified_sources(args.harness_evidence,args.probe_dir) + modules,probe = diagnostic.load_sources(folder,files) + files.update({'product/render_scene.py':product,'product/product_scene.py':Path(__file__), + 'product/test_product_scene.py':Path(__file__).with_name('test_product_scene.py')}) + directory = Path(args.evidence) + directory.mkdir(parents=True,exist_ok=False) + args.fixtures=['scene_diagnostic'];args.iterations=1;args.inject_failure=None;args.shotlog_channel=None + runner = campaign_type(diagnostic,modules,probe,files,data.decode(),args.product_sha)(args) + def interrupted(number,_): + raise KeyboardInterrupt('Signal '+str(number)) + signal.signal(signal.SIGTERM,interrupted);signal.signal(signal.SIGINT,interrupted) + code = runner.run() + print(json.dumps(dict(overall=runner.report['overall'],report=str(directory/'report.json'),images=False))) + return code + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/docs/render-scene-evidence-2026-10-06/source-manifest-r2.json b/docs/render-scene-evidence-2026-10-06/source-manifest-r2.json new file mode 100644 index 0000000000000000000000000000000000000000..be06ed13816400cb5edb65e01893e8faaa0c5960 --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/source-manifest-r2.json @@ -0,0 +1,52 @@ +{ + "status": "SOURCE_FROZEN_NATIVE_PENDING", + "foundationCommit": "89ba635b002093eb5eabfeb01cd9e262a048ad76", + "workingTree": "/home/adom/project/fusion-render-next", + "entry": "render_scene.render_scene_inspect(app,args)", + "operations": 55, + "publicVerbs": 179, + "versionChanges": false, + "nativeExecuted": false, + "installedPublicAcceptance": "PENDING", + "offlineTests": "24 focused tests PASS; full post-fix suite running", + "testCommand": "python3 -m unittest discover -s tests -p test_mechanical_render_scene.py -v", + "files": [ + { + "path": "addin/AdomBridge/commands/mechanical/render_scene.py", + "sha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55", + "bytes": 23619 + }, + { + "path": "addin/AdomBridge/commands/mechanical/__init__.py", + "sha256": "13d14fb6dde625736eadc0b7cc9e6a09b97151e49eeb6515bf55c144d3601be5", + "bytes": 10517 + }, + { + "path": "addin/AdomBridge/commands/mechanical/schema.json", + "sha256": "fa99d1878ab5c65bce4b82515b1eb4e19fde2500b888c6b8029e81a4f3073998", + "bytes": 173619 + }, + { + "path": "contracts/describe.json", + "sha256": "ceee914241f04a1978b2f126914cb38b1ec7bafcf320312b70767a8399359fe2", + "bytes": 633901 + }, + { + "path": "tests/test_mechanical_render_scene.py", + "sha256": "eb7db13f925e2e719c97476b140194b61f685344532c37454b1b03b811ae3a7d", + "bytes": 21855 + }, + { + "path": "docs/MECHANICAL.md", + "sha256": "c340ea0639bbebe91856a30f36de3830933f6f1c0bca7e56e4891740b5409d76", + "bytes": 30964 + }, + { + "path": "CHANGELOG.md", + "sha256": "1e88b56ee38cd7d6e670ca36459b27c0409de5d84bb68cb2c030db236d002aff", + "bytes": 97039 + } + ], + "knownIssue": "FUS-263280", + "priorNativeFailurePreserved": true +} diff --git a/docs/render-scene-evidence-2026-10-06/test_product_scene.py b/docs/render-scene-evidence-2026-10-06/test_product_scene.py new file mode 100644 index 0000000000000000000000000000000000000000..8ebe648164bf75a0722fd3cb44c72362ffc6248e --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/test_product_scene.py @@ -0,0 +1,115 @@ +"""Qualification boundary tests; all run without the host or native API.""" +import ast +import contextlib +import copy +import io +import json +from pathlib import Path +from types import SimpleNamespace +import unittest +from unittest.mock import patch + +import product_scene as p + + +def good(): + target = dict(documentId='owned',revision='revision') + rows=[] + for name,camera in p.cases(): + args=dict(sessionId='session',target=target,maxEnvironments=16) + if camera is not None: + args['camera']=camera + data=dict(target=target,observationPasses=2,maxEnvironments=16,observedStateUnchanged=True, + documentFlagsUnchanged=True,sceneWitnessComplete=False,renderQualified=False,renderStarted=False, + settingsWritten=False,nativeQueueIdle='UNVERIFIED',exclusiveSettingsOwnership='UNVERIFIED', + gaps=['Full scene unobserved'],observationComplete=False,status='PARTIAL', + errors=[dict(field='camera',error='not available')], + detachedCamera=dict(available=None,notRequested=True) if camera is None else dict( + available=True,readbackVerified=True,assignedToViewport=False,descriptor=copy.deepcopy(camera))) + rows.append(dict(case=name,args=args,success=True,data=data)) + return dict(productQualification=dict(sourceSha256='frozen',coreSha256=p.CORE_SHA, + scope='module-function-native-api',installedPublicRoute='NOT_RUN',rendering='NOT_RUN',images=False, + initialTarget=target,finalTarget=copy.deepcopy(target),cases=rows)) + + +class ProductRunner(unittest.TestCase): + def qualify(self,value): + return p.qualify(value,'frozen','session','owned') + + def test_plan_has_no_source_load_or_host_calls(self): + with patch.object(p,'load_diagnostic',side_effect=AssertionError('loaded')),contextlib.redirect_stdout(io.StringIO()) as out: + self.assertEqual(p.main([]),0) + result=json.loads(out.getvalue()) + self.assertFalse(result['hostCalls']);self.assertFalse(result['images']) + self.assertEqual(result['probeCalls'],1) + + def test_partial_camera_availability_retains_explicit_scope(self): + result=self.qualify(good()) + self.assertEqual(result['installedPublicRoute'],'NOT_RUN') + self.assertEqual(result['rendering'],'NOT_RUN') + self.assertEqual([x['observation'] for x in result['cases']],['PARTIAL']*3) + + def test_bad_identity_and_expanded_scope_refused(self): + for key,value in [('sourceSha256','other'),('coreSha256','other'),('scope','installed'), + ('installedPublicRoute','PASS'),('rendering','PASS'),('images',True)]: + data=good();data['productQualification'][key]=value + with self.subTest(key=key),self.assertRaises(ValueError):self.qualify(data) + data=good();data['productQualification']['finalTarget']['revision']='changed' + with self.assertRaises(ValueError):self.qualify(data) + + def test_truncated_or_failed_case_not_qualified(self): + data=good();data['productQualification']['cases'].pop() + with self.assertRaises(ValueError):self.qualify(data) + data=good();data['productQualification']['cases'][1]['success']=False + with self.assertRaises(ValueError):self.qualify(data) + + def test_wrong_units_pose_lens_and_viewport_assignment_refused(self): + for key,value in [('unit','cm'),('eye',[9,9.5,6.5]),('extents',[10,7.5]),('upVector',[0,0,1])]: + data=good();data['productQualification']['cases'][1]['data']['detachedCamera']['descriptor'][key]=value + with self.subTest(key=key),self.assertRaises(ValueError):self.qualify(data) + for key,value in [('assignedToViewport',True),('readbackVerified',False),('available',False)]: + data=good();data['productQualification']['cases'][1]['data']['detachedCamera'][key]=value + with self.subTest(key=key),self.assertRaises(ValueError):self.qualify(data) + data=good();data['productQualification']['cases'][2]['data']['detachedCamera']['descriptor']['perspectiveAngle']=0.7854 + with self.assertRaises(ValueError):self.qualify(data) + + def test_false_completeness_and_model_preservation_refused(self): + for key,value in [('observationComplete',True),('observedStateUnchanged',False),('documentFlagsUnchanged',False), + ('sceneWitnessComplete',True),('renderQualified',True),('renderStarted',True),('settingsWritten',True), + ('nativeQueueIdle','IDLE'),('exclusiveSettingsOwnership',True)]: + data=good();data['productQualification']['cases'][0]['data'][key]=value + with self.subTest(key=key),self.assertRaises(ValueError):self.qualify(data) + + def test_wrong_target_or_session_and_nonfinite_or_large_output_refused(self): + for key,value in [('sessionId','other'),('maxEnvironments',32)]: + data=good();data['productQualification']['cases'][1]['args'][key]=value + with self.subTest(key=key),self.assertRaises(ValueError):self.qualify(data) + data=good();data['padding']='x'*(128*1024) + with self.assertRaises(ValueError):self.qualify(data) + data=good();data['productQualification']['cases'][1]['data']['detachedCamera']['descriptor']['eye'][0]=float('nan') + with self.assertRaises(ValueError):self.qualify(data) + + def test_generated_program_binds_source_and_keeps_native_ownership_prefix(self): + probe=SimpleNamespace(owned_script=lambda factory,**identity:'OWNERSHIP_PREFIX = True\n') + source='def render_scene_inspect(app,args): return {}\n' + program=p.owned_program(probe,None,source,p.sha(source.encode()),session_id='session') + tree=ast.parse(program) + self.assertIn('OWNERSHIP_PREFIX = True',program) + self.assertIn('Path(core.__file__).read_bytes()',program) + self.assertIn("candidate.__package__ = core.__package__",program) + self.assertNotIn('sys.modules[',program) + self.assertNotIn('activeViewport.camera =',program) + self.assertNotIn('startLocalRender(',program) + loops=[x for x in tree.body if isinstance(x,ast.For)] + self.assertEqual(len(loops),1) + self.assertTrue(any(isinstance(x,ast.Break) for x in ast.walk(loops[0]))) + with self.assertRaises(ValueError):p.owned_program(probe,None,source,'wrong') + + def test_diagnostic_hash_gate(self): + import tempfile + with tempfile.TemporaryDirectory() as folder: + path=Path(folder)/'diagnostic.py';path.write_text('raise AssertionError("must not execute")') + with self.assertRaises(ValueError):p.load_diagnostic(path) + + +if __name__=='__main__':unittest.main() diff --git a/docs/render-scene-evidence-2026-10-06/verifier-r2.json b/docs/render-scene-evidence-2026-10-06/verifier-r2.json new file mode 100644 index 0000000000000000000000000000000000000000..aaeca9541151e1c584038a4dd5c247fab5d63b04 --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/verifier-r2.json @@ -0,0 +1,47 @@ +{ + "verdict": "PASS_NARROW_SOURCE_FIX", + "sourceSha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55", + "manifestSha256": "2c68c93b674044b149a0798c2a8dcc953b7b0e249c5f2f404b3da978cde43a2c", + "frozenFiles": 7, + "hashMismatches": [], + "changedSinceR1": [ + "addin/AdomBridge/commands/mechanical/render_scene.py", + "tests/test_mechanical_render_scene.py", + "docs/MECHANICAL.md", + "CHANGELOG.md" + ], + "focusedTests": { + "pass": 24, + "fail": 0 + }, + "independentTests": { + "pass": 9, + "fail": 0 + }, + "findings": [], + "scope": [ + "Only detached_camera runtime function changed (independent AST equality proves all other module nodes unchanged).", + "False before/after validity for both lenses succeeds only with typed wrapper and exact finite geometry/lens readback; native flags preserved and renderEligibility NOT_ESTABLISHED.", + "Boolean validity transitions retained; final nonboolean, spoof wrapper, wrong objectType and corrupt/nonfinite geometry refuse.", + "Invalid current viewport Camera and generic RenderManager still unavailable/PARTIAL; no guard relaxation." + ], + "nativeModuleQualification": "PENDING_ROOT", + "installedPublicRoute": "NOT_RUN", + "fullSuiteRerun": "NOT_RUN_BY_VERIFIER_PER_SCOPE", + "sourceEdits": false, + "hostActions": false, + "artifacts": { + "test_validity_r2.py": { + "sha256": "75b630f85147cdbb9c776f3b7571b21e7ffbfbe333fd39da1978022420f5beed", + "bytes": 7040 + }, + "independent-r2.log": { + "sha256": "b89b852066da48fdf34b1e4536ecc8007518c07cce2fcfdd11eff2650f3fdedd", + "bytes": 1521 + }, + "focused-r2.log": { + "sha256": "de0f5a01e7df96ac4dcaf3b165e9cd52f6606c4384eb54c500396841b353aee4", + "bytes": 4333 + } + } +} diff --git a/docs/render-scene-evidence-2026-10-06/verifier-r2.md b/docs/render-scene-evidence-2026-10-06/verifier-r2.md new file mode 100644 index 0000000000000000000000000000000000000000..92e93ca2e5594d66bab463999364807423a766ca --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/verifier-r2.md @@ -0,0 +1,9 @@ +# CP9 r2 narrow fix verification + +**PASS_NARROW_SOURCE_FIX. No findings.** All seven frozen and working-file hashes match. Runtime source SHA-256: `92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55`. + +Independently reran 24 focused tests and added nine bounded checks, all passing. The false transient validity flag is retained before and after construction for both camera modes, with exact numeric readback and `renderEligibility: NOT_ESTABLISHED`. Boolean flag changes are preserved rather than rewritten. Spoof wrappers, wrong object types, non-Boolean final validity, and incorrect or nonfinite geometry refuse. + +An AST comparison confirms only `detached_camera` changed in the runtime module. Invalid current viewport cameras and render managers still remain unavailable/PARTIAL; no generic guard was relaxed. Dispatcher registration, schemas and frozen public contract are byte-identical to r1. + +This verifier performed no full-suite repeat, native execution, source edits, installation, publication or image activity. Root's bounded native diagnostic motivated the fix; final native product qualification is separate. Installed public route remains NOT_RUN. Original r1 evidence is preserved. diff --git a/docs/render-scene-evidence-2026-10-06/windows-input-preservation.json b/docs/render-scene-evidence-2026-10-06/windows-input-preservation.json new file mode 100644 index 0000000000000000000000000000000000000000..c5b2b4bba6102dc44f5d8e3c74fbb3e455b50130 --- /dev/null +++ b/docs/render-scene-evidence-2026-10-06/windows-input-preservation.json @@ -0,0 +1,10 @@ +{ + "status": "PASS", + "changedInputs": [ + "addin/AdomBridge/commands/mechanical/render_scene.py", + "tests/test_mechanical_render_scene.py" + ], + "windowsContractAndRustInputsUnchanged": true, + "r1ReportSha256": "3ad103f8d944b58b5219fa4180287239bd8a7aade47102071020ad5b47a88614", + "r2ReportSha256": "eb0968cab0d344737189d599996babf559b584f801dcdb9284508dcffdfa0be2" +} diff --git a/tests/test_mechanical_render_scene.py b/tests/test_mechanical_render_scene.py new file mode 100644 index 0000000000000000000000000000000000000000..3e6097445850ac266243fa364ba6f1939c7b8624 --- /dev/null +++ b/tests/test_mechanical_render_scene.py @@ -0,0 +1,359 @@ +"""No-host fault injection for the bounded read-only render capability probe.""" +import ast +import builtins +import importlib.util +import json +import math +import platform +from pathlib import Path +import sys +import threading +import types +import unittest +from unittest.mock import patch + +from test_mechanical import m, c +import importlib +probe = importlib.import_module('mechanical_test_commands.mechanical.render_scene') + + +class ReadOnly: + def __init__(self,kind,**values): + object.__setattr__(self,'values',dict(isValid=True,objectType='adsk::fusion::'+kind,**values)) + object.__setattr__(self,'reads',[]) + def __getattr__(self,key): + self.reads.append(key) + if key not in self.values:raise AttributeError(key) + value=self.values[key] + if isinstance(value,Exception):raise value + return value + def __setattr__(self,key,value):raise AssertionError('Native setter called: '+key) + + +def fixture(): + core=types.ModuleType('adsk.core');fusion=types.ModuleType('adsk.fusion');adsk=types.ModuleType('adsk') + core.CameraTypes=types.SimpleNamespace(OrthographicCameraType=0,PerspectiveCameraType=1,PerspectiveWithOrthoFacesCameraType=2) + fusion.RenderSceneBackgroundTypes=types.SimpleNamespace(EnvironmentRenderSceneBackgroundType=0,SolidColorRenderSceneBackgroundType=1) + members={'RenderManager':('rendering','sceneSettings','renderEnvironments','lights','isRenderWorkspaceActive'), + 'Rendering':('startLocalRender','aspectRatio','resolution','resolutionWidth','resolutionHeight','renderQuality','isBackgroundTransparent'), + 'RenderFuture':('filename','imageWidth','imageHeight','progress','renderState','isValid'), + 'SceneSettings':('backgroundType','backgroundEnvironment','backgroundSolidColor','isDepthOfFieldEnabled'), + 'RenderEnvironment':('id','name','isCustomEnvironment')} + def never(*args):raise AssertionError('Native descriptor/mutator invoked') + for name,fields in members.items():setattr(fusion,name,type(name,(),{field:property(never) for field in fields})) + adsk.core,adsk.fusion=core,fusion + point=lambda x,y,z:types.SimpleNamespace(x=x,y=y,z=z) + camera=ReadOnly('Camera',cameraType=1,eye=point(1,2,3),target=point(0,0,0),upVector=point(0,1,0), + isFitView=False,isSmoothTransition=False,perspectiveAngle=.5,getExtents=never) + viewport=ReadOnly('Viewport',camera=camera) + document=ReadOnly('Document',isModified=True,isSaved=False) + design=ReadOnly('Design',parentDocument=document) + rendering=ReadOnly('Rendering',aspectRatio=0,resolution=0,resolutionWidth=320,resolutionHeight=240, + renderQuality=25,isBackgroundTransparent=False,startLocalRender=never) + scene=ReadOnly('SceneSettings',aspectRatio=0,aspectRatioWidth=4.,aspectRatioHeight=3.,backgroundType=1, + backgroundSolidColor=types.SimpleNamespace(red=10,green=20,blue=30,opacity=255), + backgroundEnvironment=RuntimeError('Invalid in solid mode'),brightness=1000.,cameraExposure=-1., + cameraFocalLength=50.,cameraType=1,groundOffset=-.1,lightAngle=math.pi/2, + isDepthOfFieldEnabled=False,isGroundDisplayed=True,isGroundFlattened=False,isGroundReflections=False, + centerOfFocus=RuntimeError('Disabled focus getter'),depthOfFieldBlur=RuntimeError('Disabled blur getter'), + groundPosition=RuntimeError('Disabled ground getter'),groundRoughness=RuntimeError('Disabled reflection getter')) + environment=ReadOnly('RenderEnvironment',id='native-env-id',name='Environment',isCustomEnvironment=False) + environments=ReadOnly('RenderEnvironments',count=2,item=lambda i:environment) + manager=ReadOnly('RenderManager',parentDesign=design,rendering=rendering,sceneSettings=scene, + renderEnvironments=environments,isRenderWorkspaceActive=False) + design.values['renderManager']=manager + app=ReadOnly('Application',activeDocument=document,activeViewport=viewport, + documents=types.SimpleNamespace(count=1,item=lambda i:document)) + return types.SimpleNamespace(app=app,document=document,design=design,manager=manager,rendering=rendering, + scene=scene,camera=camera,viewport=viewport,environments=environments,environment=environment, + modules={'adsk':adsk,'adsk.core':core,'adsk.fusion':fusion},fusion=fusion) + + +class SceneProbe(unittest.TestCase): + def setUp(self): + self.f=fixture();self.p=patch.dict(sys.modules,self.f.modules);self.p.start();self.addCleanup(self.p.stop) + def read(self,**args):return probe.scene_observation(self.f.app,self.f.document,self.f.design,**args) + + def test_scalar_units_conditional_getters_and_no_mutation(self): + result=self.read() + self.assertTrue(result['observationComplete']);self.assertEqual(result['errors'],[]) + self.assertFalse(result['sceneWitnessComplete']);self.assertFalse(result['renderStarted']);self.assertFalse(result['settingsWritten']) + self.assertEqual(result['nativeQueueIdle'],'UNVERIFIED') + self.assertEqual(result['camera']['eye']['value'],[10,20,30]) + self.assertEqual(result['scene']['groundOffset']['value'],-1.) + self.assertEqual(result['scene']['lightAngle']['value'],90.) + self.assertEqual(result['scene']['cameraFocalLength']['value'],50.) + self.assertEqual(result['scene']['cameraFocalLength']['nativeUnit'],'mm') + for name in ('backgroundEnvironment','centerOfFocus','depthOfFieldBlur','groundPosition','groundRoughness'): + self.assertNotIn(name,self.f.scene.reads) + self.assertNotIn('getExtents',self.f.camera.reads) + self.assertTrue(result['documentFlagsUnchanged']) + + def test_orthographic_extent_ack_and_active_environment_are_explicit(self): + self.f.camera.values.update(cameraType=0,getExtents=lambda:(True,4.,3.),perspectiveAngle=RuntimeError('Must not read')) + self.f.scene.values.update(backgroundType=0,backgroundEnvironment=self.f.environment) + result=self.read();self.assertEqual(result['camera']['extents']['value'],[40.,30.]) + self.assertNotIn('perspectiveAngle',self.f.camera.reads) + self.assertEqual(result['scene']['backgroundEnvironment']['id']['value'],'native-env-id') + self.f.camera.values['getExtents']=lambda:(False,4.,3.) + self.assertFalse(self.read()['camera']['extents']['available']) + + def test_per_field_errors_do_not_drop_unrelated_observations(self): + self.f.scene.values['brightness']=RuntimeError('unavailable') + self.f.rendering.values['resolutionWidth']=float('nan') + result=self.read();self.assertFalse(result['observationComplete']) + self.assertFalse(result['scene']['brightness']['available']) + self.assertEqual(result['scene']['cameraFocalLength']['value'],50.) + self.assertEqual(result['rendering']['resolutionHeight']['value'],240) + self.assertEqual({e['field'] for e in result['errors']},{'scene.brightness','rendering.resolutionWidth'}) + + def test_missing_class_and_enum_record_availability_without_conditional_guess(self): + del self.f.fusion.RenderFuture;del self.f.fusion.RenderSceneBackgroundTypes + result=self.read();self.assertFalse(result['observationComplete']) + self.assertFalse(result['classes']['RenderFuture']['available']) + self.assertNotIn('backgroundSolidColor',self.f.scene.reads) + self.assertNotIn('backgroundEnvironment',self.f.scene.reads) + + def test_environment_enumeration_strings_and_output_are_bounded(self): + calls=[];self.f.environments.values.update(count=10**9,item=lambda i:calls.append(i) or self.f.environment) + result=self.read(max_environments=3) + self.assertEqual(calls,[0,1,2]);self.assertTrue(result['environments']['truncated']) + self.assertFalse(result['observationComplete']) + self.f.environment.values['name']='x'*10000 + result=self.read(max_environments=1) + self.assertFalse(result['environments']['items'][0]['name']['available']) + self.assertLess(len(json.dumps(result).encode()),probe.MAX_OUTPUT_BYTES) + for bound in (-1,33,True): + with self.assertRaises(RuntimeError):self.read(max_environments=bound) + + def test_wrong_document_or_design_fails_before_renderer_read(self): + self.f.app.values['activeDocument']=object() + with self.assertRaisesRegex(RuntimeError,'identity differs'):self.read() + self.assertNotIn('renderManager',self.f.design.reads) + self.f.app.values['activeDocument']=self.f.document;self.f.design.values['parentDocument']=object() + with self.assertRaises(RuntimeError):self.read() + + def test_foreign_manager_is_not_traversed(self): + self.f.manager.values['parentDesign']=object() + result=self.read();self.assertFalse(result['observationComplete']) + self.assertNotIn('rendering',self.f.manager.reads) + self.assertTrue(result['camera']['eye']['available']) + + def test_worker_thread_does_not_read_native_objects(self): + errors=[] + def run(): + try:self.read() + except RuntimeError as error:errors.append(str(error)) + thread=threading.Thread(target=run);thread.start();thread.join() + self.assertIn('main thread',errors[0]);self.assertEqual(self.f.app.reads,[]) + + def test_scaled_overflow_is_local_error_and_fractional_enum_does_not_select_mode(self): + self.f.scene.values.update(groundOffset=1e308,lightAngle=1e308,backgroundType=1.5) + self.f.camera.values['eye']=types.SimpleNamespace(x=1e308,y=0,z=0) + result=self.read() + self.assertFalse(result['observationComplete']) + for row in (result['scene']['groundOffset'],result['scene']['lightAngle'],result['camera']['eye']): + self.assertFalse(row['available']) + self.assertNotIn('backgroundSolidColor',self.f.scene.reads) + self.assertEqual(result['scene']['cameraFocalLength']['value'],50.) + json.dumps(result,allow_nan=False) + + def test_invalid_document_inventory_refuses_before_render_reads(self): + for count in (True,-1,129,1.5): + self.f.app.values['documents'].count=count + with self.assertRaisesRegex(RuntimeError,'inventory'):self.read() + self.assertNotIn('renderManager',self.f.design.reads) + + + +class DetachedCamera: + isValid=True + objectType='adsk::core::Camera' + @staticmethod + def classType(): return 'adsk::core::Camera' + def __init__(self): self.extents=(1.,1.) + def setExtents(self,width,height): self.extents=(width,height); return True + def getExtents(self): return (True,*self.extents) + + +class SceneOperation(unittest.TestCase): + def setUp(self): + self.f=fixture();self.p=patch.dict(sys.modules,self.f.modules);self.p.start();self.addCleanup(self.p.stop) + self.args={'op':'render_scene_inspect','sessionId':probe.SESSION_ID,'target':{'documentId':'exact-doc','revision':'exact-revision'}} + self.created=[] + def create(): + value=DetachedCamera();self.created.append(value);return value + core=self.f.modules['adsk.core'] + core.Camera=DetachedCamera + self.factory=patch.object(DetachedCamera,'create',staticmethod(create),create=True) + self.factory.start();self.addCleanup(self.factory.stop) + core.Point3D=core.Vector3D=types.SimpleNamespace(create=lambda x,y,z:types.SimpleNamespace(x=x,y=y,z=z)) + self.target=patch.object(probe,'target',return_value=(self.f.document,self.f.design,self.args['target'])).start() + self.addCleanup(patch.stopall) + def camera(self,kind='orthographic'): + value={'type':kind,'space':'world','unit':'mm','eye':[0,0,100],'target':[0,0,0],'upVector':[0,1,0]} + value.update(extents=[40,30]) if kind=='orthographic' else value.update(perspectiveAngle=60,angleUnit='deg') + return value + def run_read(self):return probe.render_scene_inspect(self.f.app,self.args) + + def test_detached_both_lenses_readback_and_no_current_state_writes(self): + for kind in ('orthographic','perspective'): + with self.subTest(kind=kind): + self.args['camera']=self.camera(kind) + result=self.run_read() + actual=result['detachedCamera']['descriptor'] + for field,expected in self.args['camera'].items(): + if field=='perspectiveAngle':self.assertAlmostEqual(actual[field],expected) + else:self.assertEqual(actual[field],expected) + self.assertFalse(result['detachedCamera']['assignedToViewport']) + self.assertTrue(result['observedStateUnchanged']);self.assertTrue(result['documentFlagsUnchanged']) + self.assertFalse(result['renderQualified']);self.assertFalse(result['sceneWitnessComplete']) + self.assertEqual(result['camera']['eye']['value'],[10,20,30]) + self.assertIs(self.f.viewport.values['camera'],self.f.camera) + self.assertEqual(result['target'],self.args['target']) + self.assertEqual(len(self.created),2) + self.assertEqual(self.created[0].extents,(4,3)) + self.assertAlmostEqual(self.created[1].perspectiveAngle,math.pi/3) + + def test_false_transient_validity_flag_is_retained_without_render_claim(self): + self.args['camera']=self.camera() + with patch.object(DetachedCamera,'isValid',False): + result=self.run_read() + self.assertEqual(result['detachedCamera']['nativeValidity'], + {'before':False,'after':False,'knownIssueReference':'FUS-263280','renderEligibility':'NOT_ESTABLISHED'}) + self.assertTrue(result['detachedCamera']['readbackVerified']) + self.assertFalse(result['renderQualified']);self.assertFalse(result['renderStarted']) + + def test_foreign_camera_wrapper_and_nonboolean_validity_are_refused(self): + self.args['camera']=self.camera() + for value in (None,types.SimpleNamespace(isValid=True,objectType='adsk::core::Camera')): + with patch.object(DetachedCamera,'create',return_value=value): + with self.assertRaises(c.MechanicalError):self.run_read() + for value in (None,1,'false'): + with patch.object(DetachedCamera,'isValid',value): + with self.assertRaises(c.MechanicalError):self.run_read() + + def test_missing_or_invalid_viewport_and_camera_remain_partial_even_with_explicit_camera(self): + self.args['camera']=self.camera() + for field,value in [('camera',None),('camera',RuntimeError('Camera not available'))]: + self.f.viewport.values[field]=value + result=self.run_read();self.assertFalse(result['observationComplete']);self.assertEqual(result['status'],'PARTIAL') + self.assertTrue(result['detachedCamera']['readbackVerified']) + self.f.viewport.values['isValid']=False + result=self.run_read();self.assertFalse(result['viewport']['available']);self.assertEqual(result['status'],'PARTIAL') + + def test_invalid_descriptor_refuses_before_native_target_or_construction(self): + bads=[{'unit':'cm'}, {'space':'component'}, {'eye':[0,0,0]}, {'upVector':[0,0,1]}, + {'upVector':[0,2,0]}, {'upVector':[0,.8,.6]}, {'eye':[float('nan'),0,1]}, + {'eye':[float('inf'),0,1]}, {'eye':[True,0,1]}, {'extents':[0,1]}, + {'extents':[-1,1]}, {'extents':[1e10,1]}, {'unused':False}] + for change in bads: + self.args['camera']={**self.camera(),**change} + with self.subTest(change=change),self.assertRaises(c.MechanicalError):self.run_read() + for angle in (0,180,float('nan'),True): + self.args['camera']={**self.camera('perspective'),'perspectiveAngle':angle} + with self.assertRaises(c.MechanicalError):self.run_read() + self.target.assert_not_called();self.assertEqual(self.created,[]) + + def test_ignored_native_lens_and_geometry_setters_are_refused(self): + self.args['camera']=self.camera() + with patch.object(DetachedCamera,'setExtents',return_value=True): + with self.assertRaisesRegex(c.MechanicalError,'retain'):self.run_read() + with patch.object(DetachedCamera,'setExtents',return_value=False): + with self.assertRaisesRegex(c.MechanicalError,'refused'):self.run_read() + class WrongEye(DetachedCamera): + @property + def eye(self):return types.SimpleNamespace(x=0,y=0,z=2) + @eye.setter + def eye(self,value):pass + self.f.modules['adsk.core'].Camera.create=WrongEye + with self.assertRaisesRegex(c.MechanicalError,'retain'):self.run_read() + + def test_native_collapsed_geometry_and_boundary_lens_refuse_despite_tolerance(self): + class ZeroLens(DetachedCamera): + @property + def perspectiveAngle(self):return 0. + @perspectiveAngle.setter + def perspectiveAngle(self,value):pass + self.args['camera']={**self.camera('perspective'),'perspectiveAngle':1e-9} + self.f.modules['adsk.core'].Camera.create=ZeroLens + with self.assertRaises(c.MechanicalError) as error:self.run_read() + self.assertEqual(error.exception.code,'camera_readback_mismatch') + class Collapsed(DetachedCamera): + @property + def target(self):return self.eye + @target.setter + def target(self,value):pass + self.args['camera']={**self.camera(),'eye':[0,0,2e-9]} + self.f.modules['adsk.core'].Camera.create=Collapsed + with self.assertRaises(c.MechanicalError) as error:self.run_read() + self.assertEqual(error.exception.code,'camera_readback_mismatch') + + def test_native_unavailable_is_not_a_prepared_camera_success(self): + self.args['camera']=self.camera() + self.f.modules['adsk.core'].Camera.create=lambda:None + with self.assertRaises(c.MechanicalError) as error:self.run_read() + self.assertEqual(error.exception.code,'camera_unavailable') + + def test_worker_guard_precedes_target_and_every_native_getter(self): + errors=[] + def worker(): + try:self.run_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.target.assert_not_called() + self.assertEqual(self.f.app.reads,[]);self.assertEqual(self.f.design.reads,[]) + + def test_session_and_stale_revision_refuse_before_render_getters(self): + self.args['sessionId']='old-session' + with self.assertRaises(c.MechanicalError) as error:self.run_read() + self.assertEqual(error.exception.code,'session_mismatch');self.target.assert_not_called() + self.args['sessionId']=probe.SESSION_ID + self.target.side_effect=c.MechanicalError('stale_target','Revision changed.') + with self.assertRaises(c.MechanicalError) as error:self.run_read() + self.assertEqual(error.exception.code,'stale_target');self.assertEqual(self.f.design.reads,[]) + + def test_actual_target_guard_checks_revision_and_exact_document(self): + self.target.side_effect=lambda app,args:c.target(app,args) + with patch.object(c,'active',return_value=(self.f.document,self.f.design,'exact-doc')),patch.object(c,'document_identity',return_value='exact-doc'),patch.object(c,'revision',return_value='new-revision'): + with self.assertRaises(c.MechanicalError) as error:self.run_read() + self.assertEqual(error.exception.code,'stale_revision');self.assertEqual(self.f.design.reads,[]) + + def test_scene_change_or_document_flag_change_is_refused_without_restore(self): + original=self.f.modules['adsk.core'].Camera.create + self.args['camera']=self.camera() + def create(): + self.f.scene.values['brightness']=500 + return original() + self.f.modules['adsk.core'].Camera.create=create + with self.assertRaises(c.MechanicalError) as error:self.run_read() + self.assertEqual(error.exception.code,'scene_changed_during_inspection') + self.assertEqual(self.f.scene.values['brightness'],500) + def create2(): + self.f.document.values['isModified']=False + return original() + self.f.modules['adsk.core'].Camera.create=create2 + with self.assertRaises(c.MechanicalError):self.run_read() + self.assertFalse(self.f.document.values['isModified']) + + def test_read_registration_and_schema_validation_are_real(self): + self.assertIn('render_scene_inspect',m.OPERATIONS);self.assertNotIn('render_scene_inspect',m.WRITES) + for kind in ('orthographic','perspective'): + args={**self.args,'camera':self.camera(kind)} + frozen,write=m.prepare_request(args);self.assertFalse(write);self.assertEqual(frozen,args) + for change in ({'maxEnvironments':True},{'maxEnvironments':33},{'target':{'documentId':'exact-doc'}}, + {'camera':{**self.camera(),'unit':'cm'}}): + with self.assertRaises(c.MechanicalError):m.prepare_request({**self.args,**change}) + + def test_entire_result_is_bounded_and_unknown_graphs_never_become_complete(self): + self.args['maxEnvironments']=32 + self.f.environments.values['count']=10**9 + self.f.environment.values.update(name=RuntimeError('x'*10000),id=RuntimeError('y'*10000)) + result=self.run_read() + self.assertEqual(len(result['environments']['items']),32) + self.assertLessEqual(len(json.dumps(result,allow_nan=False).encode()),probe.MAX_OUTPUT_BYTES) + self.assertFalse(result['observationComplete']);self.assertFalse(result['sceneWitnessComplete']) + self.assertEqual(result['nativeQueueIdle'],'UNVERIFIED') + + +if __name__=='__main__':unittest.main()