diff --git a/docs/mechanical-verification/cp5-offset_chain.png b/docs/mechanical-verification/cp5-offset_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..4c60af72e967ea797ca7fcf0ae6b73c47104db94 GIT binary patch literal 60445 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

J$oQdGNTDix4#o=OZ%$mI={3 z(UT$6uo4aK(g}2>+O~lr4FAJ6eNX2zV}yc%czWwtoAeggrv(`A z0rC+XEIl_^51?+;W{BGFYGo0ywZeCrFjhoUa=ep?SicY@AwFt_ItduL)xW5pYd7xK#{x*_F*lRujq zDQbO@)h>Q%VQ%1lfL+~IK1*Q`^+)c#^S8^Gd{(8-6D#e z&ej?4#_PH$hM{-GctSl>UoJfGN=?Zh){h^#nUAVeWj{LPGZ zIiO5WWU~sL3>gO!)Ilh`)gF-rwh;_B4<{aatjJI;kAk#Z$id_3-b&UmQ7aK%>h704F9x?D+)2JL)DpDZM|3Dq69nCm)b*n)>b%NZtETKyuD)CV(4$RI zRnd;@mrJ;0Tqm}>Rw;VC=b{Aa-@|22mB~G@M*(VQ-qxcxhDb3BH_H#liw)~&Nz<(d z-Ly4evif+07hHe05ezW?l=Z~QRBCoSyTD-#?(!gJ`>TpIWjw;1YLgTyGhW;`{Wz~< zWC(FMPyrpF_hHtox|c@+5fgWLH=^8Q6_>cZ_iBv_tb06UCL{=6kKVa#R~$U%w3pjt z1nNvst4&~{FAHB)x_P7Rva8PIoG$l7efChzsav<7K5NU*H~vVqh)fB^Wa3q@8B{Er z1HI~6{56JWTnvI?tLyL71$;Akg7-*|#SZ8}U|9vW2_c6!44cD%#p_iYB5_ehUQo8_bEpbes&;0@N{-vd3|6J(fNR%v1EakOFvCR1T6 zcM9$VaLBJjHV%q|J&Bm&>%}%Q4dU=`9kff+UHKTFwj0&P^aoDPh^g36gQ@LMgJ-Fk z7Ze$-`HrLXkx8eULj!D_93}8m@r6OFZpiBVhI`miic7v=FO0SVqpV$HJ6%7Y9Q4zy zsxWS85aP$!+QSWsiH2GW4(*Q>3j6`uPV0&DxzywrwIA;UPZ*cjQgAaL23@1RjU#aM z57{K+^1~@*SdEwZKW#z){sM@MB+VzLh3=C$Sja{Ox9<+@a7nRsL3zVPx;#qhozNFf zvc=pM?RqbAmf~ z3njy+6T6*yROn*PXUXxrDdP+G?&XapD`Mtt`K(21bc|bYp}(&_Oj7nTkidW@D)_AX zOzDATU0m5~@sO`WJZ9SQ9wjLGk~xWbO0bqYs*-JC+<5BGgz&`%4K2wqm+)h2I#ceA zncj*209Hpu`UT_#dKP&NaXKv{aZ6A#SU#9ujqAQz!2udp?ZHD|z@_YB4twaHi(c7` zGpM|KW^j0MsG<$QY-X3qV;?j?iSr`FhR0fwBBN@+Hu9H)H|6UevIB_~$1Xqnk-JeE zB%iHOoyG+{6nXat7i%)7+vwAkO`a9I)i6$4hoZrW=R%5ieA*xNSPD>g1w5gtMTboz znRy}LQ6cVjR5r=m4Y8py{sf1roNl*i_5G&{&tfhw(k4w(L*_IeIdBuGQmtC-W=Avh zZ_^bLVz{#Tf->+msLczv;dv|6tn1tUDkX{!q z4Uik$d&al(F_ak?dNX>-q5%+9*h}so&G+9)=41rhk9CqQ7Bj1Yayk{=J=HQH`BfOB zC{CJQRPls^xL_DO7F^b3?*8Gr2BP8S;DpGNm4zdua%Wuw?@DcRH^0B4FI&!;BfjQhf6(00= zv~ZNKA>loxnU}t{z^F5};J|9#2?8i?ju~ES=rP~cK?+LBKdZdnbNZztbWBor;IxGv zIBANy$c^{PXA>c5d`E^h*40f1_Ux5HPMH-$^l zRL#!A2q8wtEr|HBtcVaS>bai(EJu{Y(L+7Ym72pgI%aVY(pu7Lt@Ho10RJj5;M9*( z%X6c34PzRJ%}9D4u0regu=n`HtbHg-*nj{Zk|5_9_xklhLZ!PbX8a7PTbwcLmdQN! zG6%H~z?u&O7H7Y|r6CRZWT&N>HH@@FccogTW(<>D>_Bbye!3xfWCHf~TEms0c>(2* zq?PqkAeYSGOvuFRRp%5J_fRN{8Ao->ur_=_!%>6Lo%&J@f#4kjI;>kFWEi7b5^uBuuu?}x^(i$z2l05 zm>ZHig_(62?9W5F_HEx@b>Gd+-@wO@3w zu}*`Vnd7gfZWD(vz4PblH~rXHPuFt2Uu>Zlk+;6}b)8QFPs=E{d92veTMe$cs=0sc z6gjVu>)!K7MyeNn!qjyBjz6{}!OiA}0Ffn}ouTDzNb8@O7=f;hZAP5P@gwUbzv1dN zlHBMTbGp=C$isIohhM7N5Wfra@G4D>XJvYBDjeoUu$ILr9SW&i9jTONTp)b{+1nB^ z$x`CP6d$3qpajuG`%^S<`}I`;X0ul7F7Iz}yT9Sno3(2TT>J_-qife<7IH1rg$7aq zX;1(Y7MIj1x&qcIel&-<_e{i}(ybvh^Z9IN^}#jL@8Z!<8L%L*#(lq^BSF{xE!1G7 z5Y&CS-!mH&_Orl>G`$i*KH6ho--gH!0Z$?Jj{a@?HiVM;!foEUR63onM`XNo`jVdO zgh;E=Wm(0w&~yN&ay-$rAhc&N1#vJ#M^vXD#V8%c6<A1v>DB;VwweymlmO6mr61TOc}BJw9+c4wz^b+TZLBzLxU#@{Ij>-kkJaj^ zy4hg8%6DQq8k}df@*{(sax4I1Y1QC_T&ry*G=AI=Jjr2AzW}Lc<>ofxCOsAZ;q83c zRqkgwUjSG6J}h)6u43t4hz=ml2retHcpe5po4kNH+EEt$xqt|w3vgRen%!_MgJx=RF)QXaF-+V@Cj#BnZ~Z$|x5ujw2jB4Q+^-6Fe3~Va1QzZRUnd zt{l?KBN4-!wQQf|KgiRPv5Vy$_uf_jb|QtT2|Y-VYb@nvD0%9_0YqlY4ZiS zpTn9MC+?j!WAcau_sGCvzMepzCGC6ng{S|p1Aw^&nA8PZZEpBf21qMxls1RAxZcdf zvdj*lP_MPL%*B`sT=dtzo3nXBW5k#(rl)1Yc%wnIXXgU7Z=r`s1Z^YK)5|G)KNLMw zq$9Qb4E1wvY+zx7%=sa3CZ%2Fc}})O=z2=fs6h5*2&jF&xdpY~yX)F!siKhq#-E#Q z&)`blX4x0rwQ!At7^%X`RizKAXWT^dioBA-{+aOr>I9GH_Bt~k2`xUVfLYR`rfZGI zx|Dfg|ERg5^74%(-A$(W=qjKbvhSxh6rNeXhc1^?8xR09lTS$JFZ^1T6K+*R@5&+6 zWFF}*pTrZ6D!ZZP z<|%daPZtn+>wl0O@1LSpp(fALsnaX<3?Bx*O-;~vp~wJ@y_SiNw;WqMUUGRZ3Bz^9 zO|i;GIJ=B~KgCbGess+~p6~0RqI7u1a!tF66y}H4Z=ayU{YgK-jGuj2pnYYv7=^K>{8vLS*`$0;J|I!biQCnOZ`=LB` zZ7kGv1Ke^|#I8IwgY?%U#0~fWcA~>dC09`&l$V|;6epPyv6E2( zWW0d#^7?9MVz58l@d#A5Vl_$xwcq|!0_}(fk$)>ZR7aGcZK-gvH}=g*OUH8_N_pds z5}L<@OLKJXgfvbvFo<0MA990|IyJ#PWwmtCoO?x~XroK_nOWfUM9PF{%?9Ziziobk zuMZfCIWopsRuV6V6j*B)cdgCnYk!$lZETgZ??LAqe)w{JPgw;#JCeG8U5a6B`16@F zjpx8+GCB8WJcs%zL)fn|D%6dO250Tz4Zd__N!`9o=NWb**ZW-gwA+#f+U%1TzI+>h z6(PHEx8&nHz1=?83mt8p;k|$5hWKJ^&mZv}cKl^SoX0n-!Q^r#u3wDgV^vU)?IZHO z?cC`!ZJv-bG;|OAaH!OHN{fD-OMoY5d4ap0&K_FjS7ryoi_)A7L>G3^f70q4i#g{H zW!50TZcI3(^`KnTqCV(^>=JMIOZn5HCJjj6MUQigo@!i;GGGEb$+tN*0b0)5WZA}g z&O~SF#x=!I!s5(MJQd!sI9g0Ce5`%S>j^UeWc0XXT@HlFkABPaQY#hwnspCCs2ECgg{bz4wK7*ZJM9?Cq;Dh42Y6>&N4{^aV z(0a=Dv)|G3xr!-|iSed7CG+1P_n>WRwYYwO7T{i#RhZDEX!hWAr<8 zH7)mDD0?ZF8m*3ZEx4&6t#a*VCglhSlK_?GlUkp0jX)cozx(XDpF7Td;yTwk4-HC;jBJJu$UOd0CVP3NfneL0Ma%a=O@wy00I}QYP3ROcV|_$n3{jwr z+)#I($*|caSnGP9Od~dZKX=Unt&n|h`qBeonJtB%b88aF5COf(L(IxT(h1mcx z(Vuu+W1$iUgg|n>dTHHgC2`u__QXn6mfPMZHUw(!;2QqjT>^?vYL^)sR-4YTtmjQ+ zEBQ)sY6iq;Pq3?K%>Rf`Jz)>>Q9t$y`@}J>GZ%E%Umk>ETWqfj z_d6PPrlI+hxhr+Vh`N(+P9h4>LCM=A9*>$s9}bTp=gAcyDWZ;(9Vut;U1dJ< z*KDPP6sEi=H7OUb;2!}rlblVJ`9S`<{h|^LJzwFO8@JL(=f0fzvc5;zKm#FR!^z`wvGV(Viwqc*KQWb1`0)$Z zcM5}e$>k?zdd_fS=AvqiW3_$$zXVG~=fVFW8D98?i?Bk$JsTW4 zO7u6jh`vxf1_J%O&p8DKRflDE_4~bjGZae5&V2h(1rN$Es>6?|vM@JGaS>^qPVH!X z?ZTlyiXOPMeJphC(m%`7e%f%9TE;D~2C9A}?azs9JZJ2Vc)RtCwiYV;WA#)cKS;mi zTUUQ?E}+rfts~xMhIO2ly#IuLon?34P1L@UU+RPz>oE@X!;h!$dxwn2f$3AZ1@!+Y zCZ4ZY-<3yMKQOx7{4(mVv*q-Uh}RWJAU#J${)ErHyEOVjIWZ<;*S{dVwmFHm#1xkArm;&o|DF0P}G*Moms9TZiC5n?k`No9X9Dr z3;XkD=R~c_rfw}_BHt6Gyq9f4keCHVlK+jJeVw`LGWw~Fc4)6-UFxq>=IHw`_=)Ox zlt*45BRu#lblJJnZ1l^M_74iIrI0)ZGVWqpY|Ud3Lgr3<+k7h7ljpwbNKIj&qL%d9 zkp`N4mcwZ3H@<%+fPN_ffha8f?~^$>2)$|GYY0@*Q&zny`lhb*ya$qFZH{EgSk2^4YlqbSe=I@;87^oB}O^g?IrawrIZPxtL@3URX z>rbW63=Tp3JUP``1wS!~sPb4pqmlqeEu2@8&ut3E(6A&Q*Qsmnz_LI7#fbRlq%{oA@Yx7f^8Tf5dDpY0)6KGvBeER8z1f*Pm+syk3?_^U5%@t}R8SAo1ck?p@Lj zbDQT)Bs1rF9lYe`gS;jwadh1b*`r zcrtkVT`@FuDqva_FH_~{zU$4Q5PX_a(?*cK2sPKv@ z;6xDB9{PM#-aHk=%Cg;E{+dR(f9f`lK2HQwlLHRQ3kp#oF4}|7k+h*D^Kbm2l~N)y z(zzBb>QsrSb~!&e#)w6K1%03|t}IPuE}7%&U47JnI+Yn6hq=@>^!ef|iAH#XnI)it z8so5u;0%V4R3H?zXS@nqIMub?knUBxJ>sRCS*`dfQ3pqE1i^y4Wu;gDxO$Q|+VkPS znE=1v-ig%|4L@&JyTe4rRt6?kIpgN3k8fy;z`sFL)W!nFeOT7-Um+fqIjMO#Hf1vn zLl>4_b9{9sh7!8$Xs)`RT>8aFuE72EwRmC-W}g`CB9!e!>}t?cqN4iJHD*R-L)79i zPke*%ll-^xdfH*{rk>dcu4K+*WZwVt7}HGsfg z3uEMeH5*J@adq#8zNR$F^?wN&EOrNi?>esZlh55am)&A_e0Y6Ez>MSDVHUqZ|koOCB z>4iGD&`J-7y_I0qL(_yZm5vIKKcMO18}TvzQ+^1AqZ5_Dp+OdBShe>ib@vD&QOMA! z>5mwkdTp+Qn;2VB9k0yY{L`FGffd6zloF)l-7Rhf{e_(l9H`7xk&mg{{RXVgt?>cP zE5J=drRX}(Z6aW%F&=I@JWu)xLC;if8B>|9f%t}tm)HFs@|fR{IW;u?tWjIC9+FaE za($(zdfUlAjo_ml;POa;75I}^E&|t^Fis5qa5rS?gwggxD-0S{q*shfea(gu43pE_ z+aNAg+yW~0R#l?^#x48$pTYj1@+m##%5cowqv2{>EU06w4Hsbdy(uHXH_C_WfCyd` zYE+<(Kjv9vsLN0FiAoD~`VpMgW*Zj`um0Zk6Apa%PcT)Sbw6H_59|j23vbhdd1B-- z5+smvfyAXJ)Rg6Q6ym*3{zwEVEoywv^dGY4W(HdvBOGV&yLP&lQ0gfUj{nl|p1?16 zkmtO)(X_Q5N*<$=5xUR~K zg}=&p6)G8J!@H4=#b(37T&NIj){Mof`FsP}#1kf;X1DprGAA z&$V3)GGSD%PAF3$-+}^*C-5f6NqeL53NbIS!7_`tPxvwJ%G| zWCkO4eomwr@l^cN=Jd;9;#TQq8B0o{mUR#n)X8_IZD9cf2Mn#)@zMSaUa8g;P}&zYUQ#L2cMP!K;zy%jThfb08Wmw!Bh;ZHJF*3s!A~V;fG23PDTt2_VQ=H@OiL< z)4G-q4|>xZ0wm-q^&Jm zJxR%gYaIZf9oX;>mxqO)(`@wrn_zP_TTMo&6Mom-dFvMT=McE=oRT8rVZ5TKUXS0@nNi`_?)Lx!rcEDr)n!82mgsXN(!%J68OXJQY>9f32Va%+H7^#_DAA z2m!V3lmk}OP+tp)+})WUCuAb3h)URGHCqG9f8a%D%=l?-#c(e%bi-FrMlK$ugq7;-vS4#&iWN!F}s=>KqW~t0cOg+P@$P3+Q>* zD7q;3zZO~EsLHrQ;Z~aXYOs!2--51+7Eun*+ckSnMzaoIo&h`l>#~eodfyW#JnM|b z^p%`1(zwWy#ZfhtldT%p+VD>ILbclK|IiP^Ob{dhTRUfh!TpLV>ul%jAG$%3Sa}nl zU2-yDx)oTfCG;xu=caCvz%mKkwi}t&<6W`(7tcJxXe+Nq+r2EOj=cd+;)*MUdkfw_ z&D87Tz)P?I5-_urse6oXNFRMhRS2yr;KhZMw0iuh@)~Oa zofBj;xaD3@7@~myBYwH(ZzqDe4a}%ICr7X9taxDLy3ffCTjYK4x{P|G zrj01=!pDCG4^I;sg(oul|s)w8G$LxBhp(Pp!b+h2*_Ux@zEl#0C6=D~HW>nZm%V zwyIwcs5yDxtX2!nAH9@P_nyOl@eSsBz~W7VuNIwhR9yDZNhy&|T-lD@ORX7J3=7-Y z?jj0!AC3Il{QTa&{k?f~sHBKhQ{WtpmPm>C5S33qtB`D&TQ`{?j3g7!6UL(5$OeBD zJ4_4Z7(T5{Uq9zYD}mcdoCbH|G~zj!S-z-P6h9n2?vyVs6aMUtE&}o77$8pQ^owKy z#ovKb)TtD&Q)Qd=+M}*7P{1KmNUU;uc-`l&++JAc)bYFS4$|thbR%&M0de2YyJ$_mt^%uYFaJaKh& zeYt*QyQxfoB=W{fnNcSG)!&_{^!;>zVhK(xl65v`_eyg&HjBa^YR zL?u7`VC4HaO#!42;17Z{z`N$~JkHz6sEs>?z@wk}&fMYfYzO45nuGfFJ;Q$@%I&zp zIy2}wFJBCN&FH@z{e^roAyo3c6YAmomCNa>iYnl5OkiGu@%YAzNco#GcLnKXl?!{m z3aY-y>k9wc{ye5lP#*}pLNmku?V9~Bs+(wR`FItT;bUZS^=j=Gixvi|E+fiVD$`B~w;JHd7*!QijQ&K!|MmJ}1axJGq4oL9} z7qbkXxHA}aB1%QP9JI^;0pnA^^SbOX%1rE!SCPAEOB6~u=DE^fh%jy)XTzQWu*tu{ z;z>$}T-Ehb@0d6suK)D~@G4Sm8v}2S-6k`typZk*b8KuB1wegz*S#|S32#kyjx7~_ zO`eA-e61 zQIi8@KS{)slYU{aP)O(CMD%*n$Baw~EWJ#+DQU-AJfy=Ie@=VNxk)=VDu52B0W8=h zh9Hwel@<-FHtK$1UKzVJAVE8hjTs!vXZ|)|m>DO2C@{#Mc-|r^V3ua^D@L9Sn+tw+^H zhOv}@Y0!gdkVka_ksho(JEkwscs_Ouq39cbhXeI9I24aLK_2Ndkajk&MA1+Cbl!=q zuh3Wm<;!hLu`$UjzGE72k2H&Hd);DW;`BZ1tjGO@JYo~qy1Do#<``uT?%`a))5U#V zy&ZegF}Ao^Q;s{G3LP)dKRs6{lh!~^MYWdQLJwda+7`z5ed(O{_L9r)#G#}|XBceY z9Ou%Idd9gKc4!ytXsrjMh(_N~7miG$Y?gnSS< zJi1sAtr#|RPoI{4rEtg*V(uR(wCG2|2uJitFo{OV*>V5PUuCFg@HJZsVP+Zmc^kpE zvWZsgi9nG5VRm-*FSV;IgV%pCk7BpW^4h5@a~!)_d2Q0=O!69gEQX_wwt_cf3yYEY#uB z@kD)qc(6xJNhUM#Fo**ad3LlQJ1 z(-a4%2*n9W8ZbF!UwNU0N1* zCyORpO(oL#FW9kECE7_4CVYI`Dxnsusyel*CLiye#{c(PSVP&|d!k~0b$D^EDbL%p zr|BSKBGD!rJb7Vd&+Ut4yCTaqA9o%SC05*&B>tpM&yEH-3Gnfl z*z`wd+e9Zh5P#W$0^^wAOaH`6Yg{{*(o>fA-yq5p0ZqM(E^dG0i3Y3$rlHbj?6Byh zS^Zn2)#n%U$qev{mnjQz*&0OAXQU~g9j4!jUNzmU^@iwPCF9n-mHACCvtBEK(^AK= zy3C#DORh<7iBt-TBzV8rE6bX@$u5v%!#&>UEix%Rv-hyn0u|+qytlYNW!h#`kh)>-M>U%=uZ5QWD^m?_Ta8i_kJ#j5Lb-@8uTU7uZ- z8>Ywxd6-n%36p|UzXEg5O$q@)tP4$$jTp4Rrx3hV;TFqM#wRpT{yEh`IJ=TBx?5~F zR9_^jIx3D0Lh{H-Zx;6u#ZC6Dr>~RnZYxE2psJ2ZiEhTze?r5buB)9xM2f!tSvO$A zFwy-$yI0t(P_-mlwCEWICJ(d$MPL#N45g^v$f5x zS724Z*3aj!&A9~V>G+6-va2jFy%G@yYNzA3KD{m{Sh4NH>_$h3Fq3|anlKE;QWL4z zGNJn4gKHCgw34Mg-FbNh8bAtPq4WBZ))bL?m~WGF=wp5IKK0SciSI z2hH0{mV=Si95IDzjmD!ncVlx&kKRA+3-Q9nhA-TbkNugnoYfX-5~JogkxR+{0m77h zXP&&#H!MGq?B&<8PNO5$nQ@HY)-r=7cv1n1AMM{bT}47l%AT)II4Td{LOAwKzEA}= z0!!Magp)g+g8*Zt^k1AA6EamPAOE3m3QQGvHlH;Jzb-9yts3hgUQW7($mGiM?cIEU zsr~m_jFhtw`3AMc{~%RXJWt2%iQveTY3KdcyyiI=!rRO1Rm5i$5jyHI?B_RPJ zq$dk9^a`nc z_)1pIXWO%lRmIAWQI^SJVD}hIgmpc39~nZ(A?8L~(i{RekXaOs1}_TIu00Ix2IYgQT=1txjHM_tfd`#{cY#iGi41~KMln3;-fQD6*UxWz+}z1EhbN&(nWUmb?=vNKhaK4Fl8c^<4d3Q3TLsY z@ZbKu{^()r^93SoV)pmhcuXQFXg5fUbhw6n=r|{q;}HNANss$c)0=>=jcgzGE05EM z)ZYawfBoS+;;$*BD*n`Bbw?b{km@1^IdY|iq+C25?QW<^xF18i%g(VeyuSB_eQizG z++bO;@hFH&t+yvHv+yAfZa>I`F;i3TJ-sbX3Gt1U>93XKb0`q{*jK8alfaIIkV8qb z6nSz9ia9FTNNpT%+R64hKskQ`mV66goWS9++o2{tu;{Ua*Glr*R>DnJ8mOtM)u87y zr+ha3;HUT(ll2Gh)sy^god+5?rPt%2N|=SbamTq=lu&48H=Z5=jzc6I$I^Rx)CU)K?dfR=2gPnHfcxqHttS*THg ziln_3kl9Bjc5hFMOp~XN=NqXYDYM2tDV4-AZLNN|to%AO)e zigV{vBjZcX>n4O*`5Ly8eGyEi^3Mo5il!s;Uo6Pv(S@t2XQ?L-#C9hVub=t|pQG?V zp;lV^v&u7TRe1Q%x*HfFTOa6%X=xv7$$s^Ph!%tV+j-XzdH+6P>RwTd4P{+8T%23ctkyZeeYn-82|T0Swwikdq>&&Zb@vQs1i!C%k7hYmddlA2hF zw0C#kb0gM|jv7r?d8jZ)=@6z1E}Az2P_qo8yL!JJ*TECxBB-!Xq=jY#H&_&#PaqC&bk%@CYY zdp62zP`Jz~bIg>}iAO2KBq4Er)A&nfR+jjK2WcOL%?7G>VSMHWMZSumw5{ZhhLA0< z<~!2Ct`x-&OymEOH)=nNZ zYdG%4*f~2twdwgh6mWJjI53cIKU{Q@h}le$FItmyS{rFEWoJ*)y&H0hp($vDY)MvK z@fR-RzXXYGE#>eZaxz$QqxpAVB2OK~WBsF{Vi2+!0T;5Vu8Hp`oNPKa$EEI!;03Qk zD;5Z;bu79jBqR*2;NR?cgvp(n@I96TNnGCm?zqou@J{~N9@$O}8~&Xul)4}TplJ&- zN{fgn7*N^xMANNhBK;N01Z>i-eAs@u-OE*7txu16ZO(L!59Km4zvxwudDDk!Dg!$yqWuPgD7}-yS@kzDlJ&ylAV{N4RiZB; zg6*b=$`UIrt*ghj#%0W~_W_p02%DY$XtozgP?{j8^cPt`=1JcII<_^%NpESF=AV#7 zn$kFbiSW%1Is%c&+ve98#mi;xeBNjXSk_x2`@T(+84D$*X7O+sBVt|yqQ3LVenC7C zK{}!~{{=*78HD1W6A?LXB`$M?7{yBbs&4|E%TZ0!2zY!{j{Rvrhas4uZ<6M}rVg+1 z>sWi+L%7^fU9`15uFub#qF90Mj;1BaT(rWTqfq=u7I`2xPEajw#XH}T6sm?qn8ZM~ zVoqBf6+pDb{HA2TTRVp(<%vySArA-PJ5@YTczl^F6frC@R&YZoCLVkI)2dM@_9v_= z^DIm`3fNL$-ean&bLoZJn?r&|Ng>$b86V+Wkdm=~04>SZcGa{r?Pfq73gI=&U+mQ2 zpx_l4*+9BH_5{STO?tC0@F4@&B0GjV)WbUZwCQzOY$-Kuk@k)*+ZrbJ-|lU6&rIm{ z5mZ2Z1jL{J?ok3>b$Z>#_e2R}SYrd%MtOhMf+_@kdJKVD)9tqR(RvzM*tYgn2L{xV ztu*Vh=7G1R8t-^$!vpWheiAHb?E5htcItVvQWs(Uy1PRmh;$G11%JR^Mu89yTwe*m&posdcfR2_LFWg9h!!E+UvpRA{3gZQU8+l!eGe$1zKO8%(c3wh z`W?)W*dTi{v-lXt)#wq*3t*wjCuMNG6695JUDWTj)}S(UAn1 z=gG$mC~)uu#@jEpmqV7lK$RFI`wo~aGOt?N!>ueYwq-YiA7yRIFPI5ui0}e}kfEgI zN^$2xl=z`xO{>@Fw*WlT5YN0sFe&1QVM$pG1QA)Y=}usVTilH~n2dOjHZ+x%PzXy{4i*%$g;ZAFxxIpBzOl@IQmBB9z`Fu4>=nptcz`fI? z>Kz^fES&R@&THsc)bn4&FScvewW8pK{CQuL05OdV7stv*lDNN-8TL|pN`XS%=@6Qi( zD)p}XixUPl4I{YF*ZT*SB;j8!(C$W>P+pSP(P_KR1ZJ%Jv{2v9e67|S+;_`WQv+SM zU`$TY5tbBCQh_6-b;!wnx$r*vBO_zCU;!W9VFl3cNbXWP66EPmduKmPTP5z^fiB8Y z0_Q5)G%(az;r?^_(=o!vDEI&4I;3rDDJsCUmuCqAj?c#K!-vH7W=;jt%OB~~4*Xt_ z@zw>-ae~83hnV*%d0gH%*Y5j3{>3S`PmY*G8tpX|AoT(0H#1rabfHwN;Ec4!mmaL)Lzh$-kUTf2UkfTI|5(J8O`>W4~ zv`=Ud6zKtGj_xOb$1pM}MgoWDdISh88-*cVgTLGzXRQCB2+aV#;##u;IB8N63E=q! zu%gkqlq^PlGF^ZNYO00qhL{=-_TBF9ax5=#Hfec$l7VNs=rGax@5}|0YIBC_Zp)br z0iJ!QTDj=m4bV{VYx$UgeFkWTqye^P zo1Coe9b!&ZN$~Sbq8L(3Y4|PvgO>*CZK56G;+shOyq;k`_PoeEo61tuq^6>&mpGqkj9u6P%*JEKjz7Pc zF>h%!Wr6&}fTUINroQW0-3!MZo(n40ZPZpNQ!ztMakd*zYdOJ8@^u0Dz=3+YTUt`+ z6MQgTa)-Vf&^L7V_5#-Nnq!Oqc!HXat*?o{bzJ^TlUp%ZV5=y`&hqN%M;eS4s(~EO zaNJRIM4Nu(suGbAj|ITfpZXyYMM2r`JTmf8DDlQz@U5M6Zg!aVy*)z`8^9xsgs2tL z<5y+nv!zGShPn1nL3R+#P|76w9>Grpy z8SZ^f0(U@n@#~)~5|FM8wuW|svoVqm(xRE^!;H&aEV;wGM&1Z0a5!$0Skm5>#~1Ev zA3h%Si36#PtcneM){{Ri9DNh+B-92tOc9r4`T$Wa(_&s&{^eza=&97`x$l;2|2;f7 zIMlhf5tp`NbRq&^-0KEWU2=@%F~`WGP9{h$a4w#{2bsHtG1~h>mvm!*z{mPI-}34l zDSa>02^N4?R#l06Jw;LS(W$*J(^w7=kt8-hadD_t@KZdcBE5T>dcsr1?&bD1?uU9< z7PfiCaYtKA{Vyie%{XN+fbSJg6~}q?ocd=Vd5?+xpI3Y=LjzgW-b&_rmlf$yS-~K& z+FE}|IPJsP*gEZc9$biMi~5Dm8fTA53G7hef9SiY4SNF1y3}Hq8&ddTa8Cdw?bF)9Ix(J<--xuDxzCNCMHVmaTPb{Iq}xGpY=8Y+RgUU_J9h zq)h1)pHNnU5E8O=WcQb4Ly8~DY6UYpY)E?m0MdbKvp@6WCH)S1)O|pIq_>xo)iSoU zU!+2s!Qmj2jd+`cji~c_7{bT}JWC)R%Xe}1>H9KPfRMq!75yw;2iY$yZ}4qz>;5<< zAeywEQsx`{lXW*eoKzWLd>^&%Vkx9{{%1YxVw_K!gAs|ppBxGB(#h(TC+(@Kf7uc6 zlg)*9X}q5CdFRprdh-+uK-7QobjAcw;9or-1ZvRgnFUX*cds@~(t{m&)#F|m=gs&_ zuIAb}=HnF)#6pT=uXW77to`TzPh|;GAi0qP81u1WmCSGA08amE_>{rz#uH9(gjK*pMGbozs|?*zeZcQtux`M~_j(Y6c+Dto|FV3a_|?Lq0^ z=&EU`yZXnY0V?I*sbIGT(ik!!q1#_J64vn%uj@pdTP}f>wc{G_4%xo+mBbFAuJ-)t zjkxU?B>FO@ZFZErlMJLXRY$%(R5~nDw)aLD*Y*kX>Z~ukbfqhHtLu83M9>5p#ecBV zy&$e)JZsb%(i2(KGEkRTrVggP~wFGj_Bj#UBcRSj6m%+fL%-C3)VCVip(UFr53-j-&uz zg#i*vL&~gv1G;+h$ndWruZN?>m8a6xCjONo9pMK8Quq>86VHFyo76ENDX6RaH!MjM z$lVEo0B=8g$~Vb%-PKtSr53CCA^vKO49cNmgh!IZBY?wirm7_#8PlI7&|( zUhicC^ASJ)2%Fs9?t5SIs`U&R*rD4Xg=ZP8JH6*{L^I1@{FyY2Dk%8LFo8Ye@B{@} zs=!v>W@V|?{}?Qpj-Roqk^C%<^;5js@gpOA+S2tiEyG4U0>U z*{b8#lGgM7)D2wB^(P!;hGrzG{?*;dXXYo5)hRi9 zr%U40jEc(N@HzVqx-M*ORazy;{Fge8nPbJQ%iV6Zk@H#oh!(!r@ypM~sDI7LfVC(& zitG6iO))1)p0sqe2QUU8(+zcy7bGzSLqyx^&cX`63wSt2kD@d?hBM(L3Ge6*(gDPC zK&f6o>jb9f(Cv%X<9#(+)5aR9qPg-z1h(LupbBZRh~-Q@cQU!XAwe*(_O#-jObm(rLp}sDdWnZTv#?5{KLXVA7#0FNT4N)7 zZzeY-%W}-SuaM7e9kkCC*nU`CZ}esSoWXQ7U=snCG!B%Y4F&eqIEEC~^UCbKYlSTy ztl}D^p+!j`ty}zow8;1*tnO-uPy56r&sRA)DuBRu8;UqVc1%_C;iPgcI?Zm!Y1EQ( z2hjnmhFLSeE3JZIfRhnH8Y{nU%wen`jnNR61;6Mo0$f}{8<55U^=_^5O@;HK1#m#p zkQIvx5w2TwqM&Xw+oe$gBjr1T&0+k0Q@pIh4E|!|Ed=r(7r;BJ6&CaRcfK=V=?#H? z|6WKUStrO36nBlTx+S{-(Qlc99#9P8P9btT*rAmJWZv-M(<-Zt1@7JN>6_X$fonJu;R&THaywx(JP+gz z+Q?-V5(hl+#@S?@F7o_0qqmJJnXH~aUHVlyA2|Q^AJe39cyJ(dYvk~>=%8g75uB0^ zC}Q|g%y@eFxb99OruvK~pAyK1vZi3R`(}wUW6=o$ni=Yxdue^dUzrWf+duM`=5cM{ z4X|ia1WL%$=t2#JZxNTN_zCOC#7K*lh4xlM%Gf@ z`b@%hQa@&5$sB1&E=Ks!1F?f=cEGgIg!ig5~`8Ymjd7&63VO%3Ch+TjAq=K z_#=9{+fi;rD{`g6{kVb#sAa;~844jImNOT|SOr$f4OU7!C;w9Z=qs#*<0|?V0g|ay zerX+_dc6`VW&U+*#B+XmBH^F-;vbMGyyg)@ppy%pvEs(i8%;V71LvjK+rn9M!CYiqny{Yk&so zU>qM)N2p(Kv8N@m?hhfB0uV@}=!^S9M?>brx96RRYT7DAJDx5nxLW9T(HwqBy}4>Oq;}nMnuXeJZ3|)5$~tX3>+ec_Cy&$1Z;u5)6Io8 z4K==RCGQPKRf&L;YZoGnRO$ScO`R)u^48|k}S64vGMGGh=JwWd&!xgLcvcAqy zey2>}zLG>NkIvJ=H-EGm8%~D=Lopae`^63I+hkxJjOhedntRGyS^SB z0wcz)cm0ny;J zVT>#cT6~A3(T>h0B5VK_t1{%`KyT0aK?k|7X)D*|E zKdHO@lcpqe*EWuFhSX(9|Bj4g!Q7(fX@1SjZvjw+M02H5mXD#2A+vvTw zz>BnA)?$6F86u#WuEu63Zo{P|r(Y6F>z0DFsfb~;K%@M|`UXTNK| zFcuel78JNLOP?%W+)O&7$+_1dk|NpeL}gbx=QGr!9Ay`kht#m!_lX?Sxo>{@B(aRt-rphEM&nHSnvu8; z3b72p4!gRzt$>0le4l)~a2LP#@^X70z;}{ zH4Golru!8BwQH&$omo|T#3uWEnno(6hnb5(39Fk|9X52-c-OVS(|4 zF_Lz)LmJH1ne(_2Ayy0^F4X!nqX_Le<0o)$MoVu+4*ZS;Udd8y@q_AuJ{h7(W`$YP zDkkDRV_{(s6&TyRr@M$jgZR|ALGjO%B7quIPjAIzszrN}4^_IG9Rh1u9mm*~Ql<{)E_Zj%Q70V+g%XM_8O z0z>4ybpB*Wo?&UB3)Vt~)1)2;P`;&TBYOdEq^{+ zQ+k7EX5n3m4l{85`X_|L=mE;n{#^kKeF~_0i|T0eF)!0UgPu^huVMoBX>D$o82HFd zFX4X`UyOnz3Fg4(`mwCH^p?U1Cqt`K~AG0x#|2xT<}OH74V3S{H?S+OjF6)M_2dMx1jdOz%Y8$!}MXB@#rk?8-FnM zUh#VZBbdice>OX&YSULvog(A1v-9yM{;QzHWDqRd{V@H(5JFPI~hZHwUx$|VTL!IG!DsKIxfh|1j9rhD#0zp}apF3!mY0e{} zq2-ck9|($+<{Ib(>$e-MCcErPgxA+yze}Y z1~cB@U0%n9h5(tBW0Spgn)epeMS&VN-2KA2py?d^HY{rU9)tuZTZq5EZfk9daxt5o z>ZfHlv7)*9G*pl(r|NlArDg5!-gT)o3pJ-pACg{0^ z?X{bzxx?T?jSuq+zjo8d!*6s(4%YJNe+yixqnMb)dKR8cQN^-cfkyHLZZ6-UWO|b= zUfKQGEoSt6SiK%(=pt}WCadVnnQ2R)v>)phmIu@>)cDhC7d^VHgZ_DpQm(hhUpFgdZCw!gzR?Fd+2gw%$ zJ0jCjz*myN-ObgpmlR{o8%a@oH}-XY@S`3gT%-q7sw-O_qUE>7B#Qp+NZENYTA+{X zw@MdAmaizK5bqwnQcOskSTU)P9ht@~Uqzs|R9ao~CxAcjr_m!^CcqJh_ei0B?5TFd zWH9vL>b?Qlq&Cx1(E|_tAZeM6M-3L!;B$x!$E+WMi~#ck5^uU?{Hmz5y;NgelR35X);AxF^i&t zJsCsI;q3?b&-T3)SHdd5C#4`3DjoVYFF5Fk1E6cm+2gorPq&C~>bZ84-#54R>^o90 zCPyF9StE~oAR`sPSHkslr*jy9MuuJQ<1%6ptvW4b)cI_5mdk*8_K>Qb%=OiR*P){% zZv;0hn2>n;T}1I=RiboO0w{qz4Nl90J?o_7@awGj7@`bXk=6{YJt9IEr;i)jw`Ip; z190HmO#uYKKyTxwTdgKjjZ`H~s2JnauUoRoA zdEgy9W1B<;K9rh5%*lgv)g5Vs6rxojbQVxDZhvu?^jGMg-IQHdr7|p*$!wqhs?5?3 zs6gl6@^O_q@=4KqHB;6s>xY)vYQ9I)2iCCrOTUV~0c${bJmxXtcoZg2sFM%>vgi&s zqOx{g;-zIw(%NX5&e=NR2#Jda--)LOFF64paNLawvB`?Y$>gQJsJwS~M&P$pgo*r- zPe|62Nr#`#%a%bj>eby|-}J0Xt^rAMC=21Isy#U^`3RB=urvKXahS;Uv|B?4ex=R* z^7^mVKkuXvwT>9kQJiAxPJ0F9#qD6b@HLMfZm(C(wMrvC)@7$=^!H|#GBK^S<(@6^ zuxKz;a}OE6F6e$-8r9b^_jvj~(9m$bVesv){GwAja-~f|URqvCRcMT%O?eot20>vq z2X-5?ExR~%COO$!5y6{LHCow%)V<1=*+Y6SIhG zvEUm5Eno$&?%69Qv3nFWV562GL7Bn7r+Q(RH$O!oe zOw0@>)tiTYsHtF>DFq z9KF+7r>OaGbohyca>ey(jpOK}CK2egiT=iZgU%Ns|18Yk34GHP4E%jMo;D^A#BzYvEPbcR5st} zJy~Swf5G|2fu(lG-tE=n4ZiF`J!gD=Uf&0{%!~}L!V93EkdyVb|7-8P|Ji=O|MA$Z zwACTBwCGTKbfL8=T1u@Xh^MJ@k~8Sl~z%;skX$36?;Y1u2FmMEmjF)e6Kv; zpMTzJ{Wf z=r_SWE%yl&Kk-aU5>y7*9rs2(9!<6e0E5$0iycFPWg8h$H1U^?EI#yH^BRtwF24z` z!D3bm4C&>Sz%?*+UrVvMIx&?1ymCPC07vi)874w^l1}?;k9FYDbc)4`bZhq$}4Pc zJhXsfwhW^k{X>|l66)c(qE|xhfBC(l2ilX<#jK`{TJzA1Jk@c2X1cB*CXv?|?X`9s zCzb_);~!s`Rda><=|07sNyA)M?llUq6U?FfV>zYv`_L}L)qW0tqhS}KN?HH0IZlN4 z+!39(C^$Df5n{|jxIpdImdn1)IGv3iLFGT{!o%mCv{dM&^EQ|=%XQqu>YC}Ev7`Uy zfbX;1o^`Z@8o4~*CQ=i*^aX}FdNUOfuvT(#`;U(eP!U*=Cv*DWXna92KlWAYSMZ1r zpqqF}b2fertF@k;7Xh=O`--i_l}9H^H&*z@?C!iDaZ~+TUtP%R#q)%m$E0{CGT0B$ z9I`=U0oCx=a)c0@=P--MiKZiVJ z1pZ&3UZoai+yG{1xJ*9XKPos*DrRtRaI=AN{!^+vR(L_5LWc|KC>^{lEOz28VB?4I z^=2>St-ZTFe*}1!X@O7!@8NG=UdeLXX?U-o95Bw7cXRfi0I}JQ8krmN^c3wwgv~|Y z1bS!#Ut`Rw(vQ_VQF?L)!TwZ$($Iuv>MhRYmsuH_Cf^ZjFPvqA1l}#ks>wCC%~@Le zi6@tezFxC{SsWUDNuIhkVW(?0Uvby`$Wg8NFv|B3Dg4*MHlHU@AQTweg^~vs2;Y?B zF3f*Ket9>eqQuPUA~Q^%aCv1o#f6_@K$!nQ0@49aI5xUfg{g-SNZ_jw>!5ZOIJR{;Rl<--16JpODjip4&DfPk~G! zr%viXiYT<=YaZvW7z-j~v)2|IAvGIo6w`@ex$Fm9Gi>Y%lnc_!5|m$x!dzwb`J92@ z0g_q!r?_%r=#tZ$w_?mEhrBckr*jVt&mohg6PWTdUewlcJKLofv*M~6Lt9nn{NQ{+ zAfbv!c_d;-F)ft`{Q#Mq;K)~7I}Vv@U8C|_8Xls#fTSwPKvCa&{~jzClQqJ7{J3iu z0zB(?+Q$7UDFC!dKcRP8b`k+iR?1z)RYjT3!OJWDkI2d1Gw-LGm6>wP{2xDR6qo+f z1xMcwV}=B_e^2W+vpoH@>Ra2EqQ`1Y*Sw41(QXYp+xW9{!*(B8C8;s0SA%r5E9Z`P$JoQ$#?mhL z{TB1sSLAaK>;rVkqsO{(_baje6*R6tH(1cczyul;wZk3y~E7pX@9cAP(xS#@`Phuy#I<-q~+!#21=Qw%Bkvl55e{klJXPohSK<}$96`G!-F&Xry#Rv+j zYYm4;z^~{Mnul4E=*c%lZ{=&(H2xOy+pq^>AfKpf7MZTo?&7Z*2F`*{l~TW4u`bB9 zh&d^7`iCUosqUmb=xZwU2piyY5Ikx_D@{24?fojhR;3E*7MN{j+c{Gi38?k^$ zff7VucyVQlLy_WM<&P)h#yEKvb`*aKJVp;r+$-h3I!#;Bo*zAZIUoa&{&S1SU{WF` z^Asikc(UdO7*xbGGQbAyUe!g%(lr-b+a00j_CbItswf5qNFLB#J-|68p=1|T2P z*i$^@m1cKlR)CccK`Pe(wplVOt7(I%FM*hHL>&YaqU-MIM4{` zNj4H-B3=I&4s+t@TDTHm4Pf1BZq&uDk<5wCLRPBzBY(3+;=X!wh}c5+%8dHBikzmK z1=A?Yh#SW}4?#+u%ctX&2vI78Af!uo!qT09u8q1LdNbtH;OO`DPIrIA#K_lp;pv2Z7{Y$h#fGd0cuol?A`QbeFw zf5NVMWX|vlo6PIR_7kT*29K?;0~Q{hDAKz;#Egv*e?ko=e~z*#_jDzvrPVK$q5 zg*sq2z7SS&!|}?j^}-xt_y@@OoR!1Slq$-89y@0Ht#$cTh|@Ki9mW1g@pjhSm^eM? z8M)pBWv$pLU%SQW8r3>K!a?$0D38|z6vNcLKv}l^IBCS`rZnIYhwaor%4Y|{hEF`x*J(De(-ekAn|5vu*F!oUG>6n1DG@wXLj7fJf3Xk75u_uaFiGTpZw)x;!o#vADj>3x0yguC$jEN8DIr1 zJl6WcvmsW;(0?(d3TAwEpc{UQzGFAEb~4^ys(a$}I9GywIu8I;-0Cb6vEtAp^N*fa zJUR2G;^$$QZ6Ls0(cOKZKCbD99MnWMT)Np9SC^D7?6>{aW$#LvYO6$`*jo@1#BlW7 z6aM3cfXyG7C=*q>z5{jBRRa@jNtXUu8on5eI5!{|&L&vC{{awK!#ZwK9Gz{`UHBmo z=f`o-qX!g0IX`van>Y{Dq!o}W*c!SRUnjU{%}t8^++MQgJ&zX5uIy}$x7Nnr0rm0Q zklitmNjmu`+ZL0U`?SIE-T(ChjE2BBx-Eo9Jen+C9#3hHzlfS#c1>to5D*lH>r)hPh;t6T9C|lSo5JhJ(_OOu)#stA0NMCBynsqiu?@jiHAYcV z{`gz<{{3OG@^ZdlD(+TRcS-p^aK<|2J^{qK`;@K#A(zn`2I&A21hSdHh9eaQS#fB2 zf90mPNcN`@g8P3xz}0_|RMk89)=0aGw*@ot2|G4TKI&T+Q$s2k%DqzEAf2+3fJ|%* z_$m6~)(5s~vlEG=zwV_ZP)F7L#!(tWw{+;iRjAFgXBaUF+ohJPl6 zk2aGJ^}24DU59i7OI9kUX~hkthZY8;J{foK9tdRRJ=WQn@F1lY5%>t1s&zc5i*7^c zbA6QVLCiGUSzUGg%QwqbY3n(A=o~ub$>-sHYfv>gu{S7Df z^7%5tdkQ9PAp`nYj}DIw>)vy7#BrbItD+e*RH{hU_pgsFNGq_RnrapYdim||wa$?5 ze}4M5n-oa~4SR~y3bN^52MOO&$Z!q9K((Z>_g!UN3q z6?t@)+@NiaQ1#CxaKu`Y{L}{TDC$Lm9IJoa(9IsmR+xk+?PCs@)D%Bv3-o- zy(z$W9{_=fgWm7{!J;t8qM->_!B$Eh>&nRV{L!h=M>?zu(dtx;>{)?e2;tt~$B?1d z&2VZWxYx?V6gK|;$lEC#^nZtaB#qx6_834O7Qf1LU1XS5*sDsLkx$A}gbdTbX|%+n zGw17P_-^^`2(+x+zZSlYUti>9XETqAnUmh1n|v;m$mh9&D5d;EU$KT?{#y1}jVKR< zfu39I=F2n77=r|^J?l`j@X(V-A2{@$KCxN%P?lVw>TP}-ULu39i_4(iC0&xlRDi$GAbYLgC~ zb#yy><11C)boUUhIiBOLoD;>4A~F}`nyY`;R5z3QUv37yx&QG{SINpD4UYDOwcnE!Vc&%k2ls1-&kZFL1;Arh}^@@ z&a}3psFtKXcigIc_o#@l->;96=!PuK7u+K!za^S7SFlxtlbls&*2O?UYI3N-O!iX5 zNr-p(%DurD>Ei7hdCegQ%Wm!=(A}w2ZvU`6oWE(xph5wx`t>mg95gIGCiZYtdmHRY zjKiPZ;aMDm1X96OQJeluS1lO zDALTKOi@^^K>9o_+oxrW|6vhhiW049?Ey}5)2F5SW#rQC$PQ9gT@XGzvZfmxlS2&=MeK;KB zbw%;J<#F@OOUZ8|jmJ5p;tszGiM2Aw`Xk0b$U0i?+2cpAW>tY;xNGpQ=XVC*Xl~KR z%N|xLIi7P~{XkOs5~usBUq@f;)MYo+iP4)@I!{1Xgs^Z%*3b-wIBI72GTMK&Vq`g+ z3FG{su@-r>{i%IrI7;@6qk-#!F|N_#vAaj(JJ@@OhcxctPv;zkzO21XjOgiQ}tCx5MKd;^~ zoc9C+q#6cX^)8PSPXg+^+l~ag=gO-|omZ1)B^X`LH0&zgu(|tLw5abPVgI*0`56*= z2b|5lh>Z&Wpnq{ejE#`)+`CVUiCy5!epTP(%A6_IS5EPM(Ic@%py=WMx^w$wCXDs1 zR2Ai*Cc8Lcm;L&x?1vI+4x*oaZa4)QX8@KAVwxLYGycHo5efSr3=O{T{_+8VJyLE+ zB1hEuuh>s@k@kWDB0q}H+A1Y+{pR?e?gYnkL?RKS^~q+RPxbH^Lp$(#!WNMIv?i6Bq^9p4(cMoY^DddL zd#Y-G(vRfN0)IktLw_Q3bO#2$wN1`{lHa~wa#kg{-%#c_W@_f^Bd47D^nvpqTDZm) z>;?Lyj+<2KW;Sm4HYO#1{6!Wn_wDWID6klQ>+ya`3G(!9@piefzqY=6Y=!Q*oy+S` zxfMzbCwl~2sj+|G6n^oRVn+lN=FN`Bx~w8xci)j_>SrXX^A2!cBMrHqC)glKw4mMl z3xIKMvXn}3OS*5umKFx z&oV9J@1Q+FWhD8#T7_ibT5It(Vz-~iad~xMR`?)WzqMVgeSYK}s((nk*bLey|1VGJKYqp?3DRkU`3U#{0!TE@8A`=9-fgWdX2t1j5Z*B`}q;b`E z#7p0bSACbczu=+TdEbguVihd~my+$wVyMW-tvdQTlEo0LYm(#@fA>0`bct7x8C$4u z_N&U-+VoFzyYT*UsWA}W50jRJBh64Qd}2>Th-F_n_6L_+M?P5(dv+9D^W$!|X@e6f zJO`d%Qj#mwDBB74$c?|A-s30Fe{}J3IOu;jq)$l;hLjYe(?Cr zvrxXX<0hF82<0-~H95n``65bbnJJkP%L(f8YN{DZu5Bz>M21aasmvff@w*ewWwH2$ zLi}`pd3{GVdT^3K5y}|L8Py+Np|H-qYJry|QiSaGCWi|sX+!F`iZdc|ds(P67sAK% zjtZsWr9NZ4)OBzAKo8m}TW-(A3J4exg=Bp98v!Dr8C73>trM#hzxazN>xc9t9o3$! zLQfY(<)oyF?H#_8O)WXw2|w{3#-Q9!EP29r;%hW&$cpn+R=?CX(LHm{_hN(y#K@ku zKzcyjSjt1ted4RE%o%iUJleNvH)-mq)!*@&GGBFGZ;S$z5#`6{0K-bPwwka8TQ>m3V;y7}mUs44`Rj~*4&I9c(@s{u zTsV_1y7hwUhUgpm)+5UEUV14ua)V@Td|6-CN1u|HFmsXgg9NKJ(;NK*@4uy zx<4%mGT%FO#(uGYk~9*uY*d>BuQNT>^x<<*J&tNjYCm=>WJHyN%o!zW-5V&iGOoga z=P1yX^b!3U=#Z+x@xDgI9V&HglO3U-?_(lS*Bm^SFYO1+s59xi~9z@MMkUvl-&}Gj!@i z%SSd&(X%tRSp5Pr$}osQdn*gGX;o4+^YNX%gybuZcc`LYlX*5)D|gJTIv)FqZ~Fa= zvWw_iGC``5g^xUW5DAq#oVosKqznpd@RtKt5i(#10u9T;tRg;wqu7Zeh~0{F{G{Iao9spK+=G+-BMOeHV{ z8$#(RBJv&C1sy6oLvO4H`WNfH@XTOGi5GXYE7q&zR{l(x-U^)edGoyuTLb0<5~~_Q zYg9v{8qFq`8Wna65f%(j! zU*8RZpzz%DLJq6?oqf|KVMEa%J|0LSSKzVd~xo*0SD` z3;4{fJ5(pFlJ-@tB#kV`9dzZ6`%dMfBt`KBErq-CY2KdQ5=$>Tcu5M`*EtV*D?)45 z*Do;FMBr?dCurBr5wQFy24_yjGv<^WDN$(M z>%u4%Dxq&ORG8P?=!cb9X#17s>AQOlPG)$^0s@H?ws(owsqNiOUWAy87{5ToMoWRA zAQShwNoFFCZ$e1M&ghF8kA5ahPD6@Ih+}?i@zC&QqO}oOn40b3W!F}+Ro+q^SKPNx zZ^bJWC?As}TKnd zS_<6AxRsyq0fA2x4(r99)>kbY*5$hEvHwEZcf~}>x>a4Yk|;HWyQKDKx;k-Sj@5*K z7KjBvHX0=~$tM-8--OIsC|n=5+cwtyD3@Em!_$9z4XXfch?) z%m0q$#8gzu|2jz}bZOR&zsImrL6=^yz$i-psGBNmdep=cAjQT3A=uKca1PtlP$)fH z5@Kfo>TmqWP34l=q0vU7R(0r4VU56c5*+%b!S;GDYnGVg^S>}GLdd~g9KH7l9p!SJ zm>hn+8LKGUWtsrLE5BqCY9_N_cj|XVV;P%HXzLkKhpTdR(}MDdu&WljdW$@TxnDX| z&N+HK<-rpP%^a^vUnoG!TSfLwsnoAii}?j9F2CjNrhRQAkUaQ-Co3DyK$QF-QID`p zfPUZN95*-ufLJ5*36Oiyx(ouvegmCa)Zmy+3lB!miZV8H!`-}V8|W6xt=VfBpKW@4 zQwmQN&J;c*TJ=i}{;0J}yH~V}yWZR%gcAb{4k=7R4X&L-|E4#eL#i#9bg#U0aX+yo z66%h)|Jef1bK}Oym?oWt?y0>3V~Yl)-^yMfNY(tbuZaJ3k9h36GB{`EdtlU?C03T- zn8ehL7?f6=#S_qv4fg0SV-=h{o2SRk?SqqoShYpco?sDtRMe8?}XlI%;fB;>O#W^_JQo^!=lDxy>6p<{d7h4aon8I4aeUw7bq zVXWCq{Y-v{1|+^#c<04|hUH`uhDaF9(qFY-?I1J;%8Q5QEIMAb$h?P19r$8Coy5p}p4Rv(_ivo#letliMu(EI^pEH_>4(KnFqb(D6aOhC7Zw*Bz*`7`$$8 z7DgatPX*yab1}lFN1s`pAXew$g5e4Wcz?;B=YNMoR~_*a1#!V~tjBA)Z~kd@ygJ!k zd9B3HDpw{7J%~JK(qxdJd~tqDVI}`Q8i8}*Wqk8gW6__eTf)8q!|z}Va>~UA@LAjF z*@i}?g_w>W>YyLTWh7#cI(Br*h7w(MW^9WRV45}NzB+ry|7HgCZR}^ox3BW&qnRdG zWnn9_nXboo$Uf&!kGr+Xr=d7u9q*}3cOij20I3QrD!4GS^Z=JwaX^Z!o zzcV)fOP2-@9u;9br4?ew4>OFmpw(dI{VbIz z1yRXYR}G`t@S;TpWvmO1t8w(ciJ072l_5W5Rm{vKo zUN_N+d$WNVk7%ta+4r?QJ`SEzL@2U2)=VBDcYMhP#(~Ivs)*RDmv=57j!!O$Hf}D- zQK`)_3J2q{hh{9j_Y|5$-e8W_ZZ97vNQy!&r;A@y&D0l<#0cLpJ5e!%-!^SRIxQ0c zVn7@iGHc3%lh2W@D)J?(Knd!%Dl1!Z^pIEitrNIB1#JZdy}NG1ie3&DEP;lAJ|=MW zYeCEDq8b;gf7?|mFprsrdF1Y`;H_ouGgoe=5Q-$zF8VRW73j7yg)~1V!r2hL*>Bzi z4WB|8AH;1!vW->|CV~34)ry=-AIuKiw+`Rax-NSpg<=&1L<$1+A8q z#Vvu~^(E|P)Q21EXhnvw9m|OdpPshz-n=`_67>ZW5`_;MU5l;7mqlg}!KxI!gTY?n zpyb~5JGRQEMmxT22j%RhF{Fw-_-S>vlQ7+^ZDU+1@Z)_&Ysg z{-k0x&P__dTHUdD5YPJPfP2+99p#GfW0~u#4_3qqXI=vbfhxnAes$y z1|TaXTm3+k^$UbF5Pz#jw#CU8O6Px|xXzOoJjA@Ysu%4TpZ|S7&XX`bLk9^wZO_T- z)T0Eb6h<-r@hzAoy@5q$58uU z8PN^l)fo`T*O2h}A1-=?^z0#tHbJiPMf@Sz6d`wSDfYE)G#g}>7eoS(YIziwHS7ce zR(kyPc1RNZvtLezk6MYiV0EJ3yVH+axBR&U0r7-$_E28AjqnTRC@k@TaK()*12dl{x`QbFtV0Kk(eE@frZ-deXyJD$^9{yv?xIUj^ijr6W! z-FC|@__sWeu&%Y7S4JM%+uULWqlK2xB6X+K#&=WE8R69pkU(~t6=x@hYBJqB4f1Q@ zLQ1LQg)_sRr9MGiRp|@AIGf*gqDvM#i%;B>JoVwq)B zs*Ex{#0h~|L=N*6Z=dnRLi{_%bKC`a~VVU|)?)0Oct-}z9`pWUD(3dn4ncxXG+ z-aN--a&cfJv+XwnfIHy>g&kt-ABvfV+iHhn*(0_^l9G3<_FU*-4 zf6(OOGJnmn_?0yHOpLLa?o}Vf(3PoA;rWD1M9`Rc`@g>|;b>(UjxRk?K`HYIvg)8y zbZH*SQm4X3s~75P%N{?+p-GUywalWbehwcne6%pOrf%>fRhvi}!z$o63wOpGR&qhp z-uyltgzy%0UOb6Y{TM<{cCyA^3-n)le|pmA zvXBksDwH=3@L zy3Q&=Ah4g0A1WI*>&!UmM4h((4!;QcZGDpoff7D0C(2)s?u>!C2@CQq#nqwLW*Ot_ zVhx1=h9{ka&wyhJe%`RM#2C0)muSVwW1Jm)7o_gJ=_b9Knv8GOaKqZG4r{qH zWUhdQ)cihkU&SApUSYDpLseIm6wCVLoiOw8p4_ojJ4C|5hx9Xr#)n!Pu0oVrXdbk? z9Tya>j}9iqh)YXLj`--t&D_xSRQX)--P^4*B zU%ZIDeW`?yF8NBUYr;cKRr>IJM21g{H|SZ0(SxJ11J62>orwfy?W*C{UAi2ZcP1Mh zx#{!Vt__X(+Z%Mf`a$H5BxFE_QoQY1ddVL#m=hzOnbik()v#d@Ul%zwsw<}e=46Ig z{Czl-=^#V_@K+(4*$+Ci9xcU(^#)N#A7^0DVzwp;lz7}4V3rkJ)0}0PI>|^ku_y>| z*XW_wz9S7>#oN2YF&TuM{5LF|0xtEteQO-v12@M9%#$<6K)WgMJAokuOG?ng><0u; zrez_^eeGm!lDzAJai3W z6I?m`_+;*_4E=U$s+_wClMvgDxuXN%-bvGm*k~X{-y>B%h;e2QMlTibW%n)lx~P4C zTcRfHqy3xvb920KM03yqc$&5-)e$YiOwsog&N{8?4?I_$r<8k6*3Pl0>lyPIWuGmI zvBCrFmkCUkStXkpJ~mf{kAF=m(<&g20rzEtPo9qL5c-m+d)KeEWc$4dYK;+H1vs6+ zEE?#A%eCGP9Tqo@O=u&&;uk3JWhWDqT#=hq>O$|o;s#mh>rOUkZB@T+&~c#S3)j?= z&2j`_A%#{q>M|GT?VKvv9h!Qdd2YNf-tXshusGz^@ar-MdPuDe%|lN-Cq$W{1oitr zC#-l1uZS{ZuT+@!rku`+MY9txn8#n0xdom-;i=9)VPf@$rI3M8(N6r2zo^&f=NgVB z^uDWwm;622{j0|}v1xCwD%NzU)HGXxe&1#aC+vF|$~LHfGU zYTE&w&>Z?-Mj5R=|AOMefH2eaBAC}x-*9{RhropW2Mdw9fG4}d{5f{-mF{7bQ4wqh zL!O$&+s$lD&dM5A*%q`|EW_)zPY&wy2Sf}zYCvOx1x)Pxx7F%RCVWQlQ;f0z)P-Xc z5myJMbiR$A+?dLSGUkAf{yb|k^>K|~pxud^nUJg5`e3CPU;Z1u1zH=NwOj_O|F|p^ zuW2xqq}0PHWwkC!8-G7r`^s08Ji!49KJNdFwY`>J8G4xY0@fof1V$_(6Ldqa9M#)F z%cET4aklXijVvSItne3m4n8IG8$HOs$9iX2ajl~7 z0iHP_`O`Oz!}Wv3TfFCE=1!VqoKEEn)Bt#^a9A`(ySku*gKKc48o-G5ie4Qd7)0C( zy&_(hh*KxdG!6L}zhDISE+Ef>)FP~cQXFdvjj^Y})E+yL>{>`PjZSGFD-esLx%nXFnZPFEz61KTNSNbrNG1m(v05LVT%~SkxW}sC8}8uXk#~-mUEjV^s9lv? zKs%G0+Goo8SvdFG-|e+1l*Gjnz@S48AmxGt76~N_81+v)-Hn%JHw<8lRI{!)=m-G4`Mn|7<`9f$4KYTE zd&wm=8PAcRe^)P?qsX$8=xxINGSeh-51`|&%E=f*_TcK7G81ZKN*=LJzC&!Ga6S|F zT6`p)3oa+Ge`^2RDE5rSpnZq!FFG(Q>q&D7PRItOy5h6LrgdLlmjuZ;Ea?s`sVXDy z4|Gn&FqBGJ$MZT|O(|v_GF8T3EAX)lD|9AXRu-%bGoEA#TKk<8Wo6{&j9?e>as2v) z`B<*#esXxThSqm#Qr-g8ud`&`vQv5ze<0cp9pQR*T}y^ktaf?lvfEXQ zD&O2e{WJI(X#6mysbr{}yL3K+>GcQb-Y@p2Fp>R_^Iwu@%Vq+8C83>|_0&WbL z@~XXQkbOQ>tJmKk{b(4E{u!-r8}7*IIcbS0bm1j3-H@^%6r(182aAuaPg-uy8}F9f z6#$|C7p@O;-w!JDGpxC-_p<9`HsjwtfBX~itS(8OtW~)8abC-kE~$9Mgg?1`{7KRs zj;|gz5KbD$Uhg))oXD9ZC%F@v(KcC?C7h3hhm zk;)D^Vd67{zJ^&f3u6Z@=%y_y^yJC>bBOvX$-T=Qc-yGPN}N}QcEwIg*R+_b1ODO=+WZFqai!;Wo3}CdOOifV`8IJS0~itsY!mv z9mg6k3mK#Af3osj3D1k&B#S();~f#>!o_R)-YG*YqQ6uWpvu`;SKB)D&G*?=-d3LA zc~gF>G>^0lsW7Oh_#rd)eDQVWFBQHq`Q~CfkX2dbWAIhuAFEh-DuKfsT1B4?Cn%n(2Ffc^sYKK_{~ z`*64xot2Pik(vPGn?>EMK6lzT8rgz z*|8t6;ZOFOOdS3f9g)95XHjN9Y5wxod;C;kV>(k1VuKUL>+%m6^s;229pk`oJyw<+ zQU{iOahcA_(n|YVsbp%J=#6YK#CfUxNJ6fWo`Z!nQDkLB40>`_l^baly#>P|#1^tx zVh^Smk!q!-JC0B^f}vjD!N}BnN+HxL^{|ZG5pkFkk+yxnJ;I|&vGQ3)pUp+*i_1%C zD!UQcZz6L5q+5mDU$GJdn{Yy{AO)zCtH> zusU)d+-9cwaPq-Q3WbgEjH2!4g(;2jbK4s&qRG6oaBuO-!VZoxoFn(kR>j*5Ok70% zerzQx?+gwRJ+D$V6*B5YPVZ(3%%DmN5+h^BBc!w>%95`+RwZtuXYz4=WcTNDGgv5P zs{7E)_&Pt|z`li`(?=~HwPY|l4scZj^RP~4&^!8uJ=EjpscLr_aK(B z6`{pha?p*?8qd{HvM)!EZCK&XL8W~3k+@b+%Hf{XMvXyMZc*Q`Uq1Ga@LhCpkyvzm3N=2C=h;#{P4Ls1{VgijdqQ*#yc$ph>ON!kQ^M$vo+$5-%s-# zBpp_;A(%MuEYli($4AK#ACKjCt3Y7V`)=>xg>5>Nir~!o#1v?OD%VHU{n#8%E%tQ4 z%0U3S1LP=Z1JZJ7xW6BQCZ!L?ROMyt^JesVU*l^;nLjqL)`5;15{q-QY7Iqkq`P~q zO9cvn5T4U6EQk|q{LVA#Z{_R2ob>re7P!GX?KQDTOL_l$>C=LQ|6Y%7(JTGmPkaqD z%cH&i4`})C$N&99dZqss0`kA*q2*2gz5Ztu^h*D?68|%b{~5*E+T-!}SDI)BacZ-q zx)FJi=0$Dj|8uav82M<{9 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-offset_positive.png b/docs/mechanical-verification/cp5-offset_positive.png new file mode 100644 index 0000000000000000000000000000000000000000..3d0fc4ca93871aeb3dec03d0d19c8e8c024c51dc GIT binary patch literal 55561 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 AvH$=8 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-persistence_graph.png b/docs/mechanical-verification/cp5-persistence_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0b909d80819339976c4f8fa90773b080767b5ce5 GIT binary patch literal 48569 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-query_root.png b/docs/mechanical-verification/cp5-query_root.png new file mode 100644 index 0000000000000000000000000000000000000000..625c46f7300a0eb970bfe2c0b3121ac1c7eec71e GIT binary patch literal 11664 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 QM)SY@#>4g20>Qrj15Kxn$N&HU literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp5-verification.json b/docs/mechanical-verification/cp5-verification.json new file mode 100644 index 0000000..12cc99e --- /dev/null +++ b/docs/mechanical-verification/cp5-verification.json @@ -0,0 +1,641 @@ +{ + "version": "1.12.0-dev.5", + "date": "2026-10-05", + "target": "adom_drew2", + "host": "ADOM_DREW2", + "fusionVersion": "2705.1.11", + "native": "PASS", + "assertions": { + "PASS": 254, + "FAIL": 0 + }, + "groupCount": 16, + "exactClosures": 32, + "artifactCount": 34, + "viewportCaptures": 16, + "uniqueReviewedViewportHashes": 15, + "groups": [ + { + "group": "query_root", + "assertions": { + "PASS": 13, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "query_contexts", + "assertions": { + "PASS": 24, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "measurements", + "assertions": { + "PASS": 27, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "curve_trim", + "assertions": { + "PASS": 13, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "curve_extend", + "assertions": { + "PASS": 11, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "curve_split", + "assertions": { + "PASS": 15, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "curve_break", + "assertions": { + "PASS": 13, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "offset_positive", + "assertions": { + "PASS": 11, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "offset_negative", + "assertions": { + "PASS": 11, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "offset_chain", + "assertions": { + "PASS": 20, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "axes", + "assertions": { + "PASS": 14, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "axis_context", + "assertions": { + "PASS": 12, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "diagnostics", + "assertions": { + "PASS": 14, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "persistence_graph", + "assertions": { + "PASS": 9, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "bracket", + "assertions": { + "PASS": 25, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + }, + { + "group": "assembly", + "assertions": { + "PASS": 22, + "FAIL": 0 + }, + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "exactClosures": 2 + } + ], + "artifacts": [ + { + "sha256": "10390eaeee8944fa6775779ad5bdc4ecb358944207ab127b32c043a4f86b8eac", + "bytes": 11664, + "kind": "viewport", + "group": "query_root", + "filename": "01-query_root-39f9fe05.png", + "publishedPath": "cp5-query_root.png", + "visual": { + "verdict": "PASS", + "notes": "Single tall rectangular solid, three visible planar faces and clean unbroken silhouette; dimensions established separately by native assertions." + } + }, + { + "sha256": "54a9bdcf48015682f8bd9a81c4c3393342e7d3aef11aa7b892a7bfa4a60d520a", + "bytes": 67494, + "kind": "native-archive", + "group": "query_root", + "filename": "01-query_root-39f9fe05.f3d" + }, + { + "sha256": "393f1fa36c0179ffe0b0edd46d57994026b36f8839e3128d8b65a5594b4f22c0", + "bytes": 13737, + "kind": "viewport", + "group": "query_contexts", + "filename": "01-query_contexts-f4b1302a.png", + "publishedPath": "cp5-query_contexts.png", + "visual": { + "verdict": "PASS", + "notes": "Three separate cube occurrences visible with clear spacing and consistent shape; numerical poses, parent context and clearance are established separately by native assertions." + } + }, + { + "sha256": "429e092d6b55a159dd53d484dae2b9c8c8986c525162ac76087ff3448f18fe67", + "bytes": 64843, + "kind": "native-archive", + "group": "query_contexts", + "filename": "01-query_contexts-f4b1302a.f3d" + }, + { + "sha256": "e6e0a50f48ad2697b4134299e278b1f88daf7f3c946d8827c94e7d8cbe88526d", + "bytes": 34865, + "kind": "viewport", + "group": "measurements", + "filename": "01-measurements-d168ebba.png", + "publishedPath": "cp5-measurements.png", + "visual": { + "verdict": "PASS", + "notes": "Cube, measurement sketch lines and separate circle are visible; angle/distance numerical evidence is separate." + } + }, + { + "sha256": "a15100ee82dbca520aeea2fbe79e7e476f3e95ed8e1bb13063bc2c59d27087d5", + "bytes": 94272, + "kind": "native-archive", + "group": "measurements", + "filename": "01-measurements-d168ebba.f3d" + }, + { + "sha256": "ec33c378f84ea53533d92c4065139e6cf85c5ded6b8a7cb05d1da869a6551612", + "bytes": 30459, + "kind": "viewport", + "group": "curve_trim", + "filename": "01-curve_trim-2e5ebc96.png", + "publishedPath": "cp5-curve_trim.png", + "visual": { + "verdict": "PASS", + "notes": "The line terminates at the diagonal crossing boundary with a clean T junction. Trim and extend produce this same final geometry/camera; exact before/after lengths are independently measured. Separate original-resolution visual review confirmed this artifact." + } + }, + { + "sha256": "2998e378127b42fe8e9f241b1cbcf60c8031e5a40bb61b842e317be69fbf3c0d", + "bytes": 66183, + "kind": "native-archive", + "group": "curve_trim", + "filename": "01-curve_trim-2e5ebc96.f3d" + }, + { + "sha256": "ec33c378f84ea53533d92c4065139e6cf85c5ded6b8a7cb05d1da869a6551612", + "bytes": 30459, + "kind": "viewport", + "group": "curve_extend", + "filename": "01-curve_extend-01250b17.png", + "publishedPath": "cp5-curve_extend.png", + "visual": { + "verdict": "PASS", + "notes": "The line terminates at the diagonal crossing boundary with a clean T junction. Trim and extend produce this same final geometry/camera; exact before/after lengths are independently measured. Separate original-resolution visual review confirmed this artifact." + } + }, + { + "sha256": "19cc89b7cc131dc0b1d36a4bdc1209226f193795c206b4e33f5f45dee00134e8", + "bytes": 65219, + "kind": "native-archive", + "group": "curve_extend", + "filename": "01-curve_extend-01250b17.f3d" + }, + { + "sha256": "9dd2e2f8b14f3853a6fb2f0ffeb5b8f70e32b0b5b76ad51bff368f8ea977d1d8", + "bytes": 30961, + "kind": "viewport", + "group": "curve_split", + "filename": "01-curve_split-d67ee0ff.png", + "publishedPath": "cp5-curve_split.png", + "visual": { + "verdict": "PASS", + "notes": "Collinear line geometry is visible with clean endpoints; exact two-segment split and shared point are independently verified numerically, not visually distinguishable here." + } + }, + { + "sha256": "3933d640c22329876622c2e371c774cc1a41a9933db701795b82f071536a8e55", + "bytes": 64364, + "kind": "native-archive", + "group": "curve_split", + "filename": "01-curve_split-d67ee0ff.f3d" + }, + { + "sha256": "5e440c07ad82a7ffe5c4baf1cc49ae28f8ba85a3cb8bd324c5cfb1ce10882884", + "bytes": 41921, + "kind": "viewport", + "group": "curve_break", + "filename": "01-curve_break-6522f631.png", + "publishedPath": "cp5-curve_break.png", + "visual": { + "verdict": "PASS", + "notes": "Two crossing boundaries and the divided collinear curve are visible, with constraints at intersections; exact three-segment lengths are independently measured." + } + }, + { + "sha256": "5fffa40d1bc9b10509fe74d96ece81f97a62b61a89094d9b44330686518a4a4c", + "bytes": 84521, + "kind": "native-archive", + "group": "curve_break", + "filename": "01-curve_break-6522f631.f3d" + }, + { + "sha256": "f1760c70d7ac9ada7fd8f2c22d44a7356becbe1b4c3690801cc47c6e495937ab", + "bytes": 55561, + "kind": "viewport", + "group": "offset_positive", + "filename": "01-offset_positive-15232eb5.png", + "publishedPath": "cp5-offset_positive.png", + "visual": { + "verdict": "PASS", + "notes": "Two concentric curves are visible with an outward ring and a 2.00 dimension annotation. Native signed distance/radii and parent-child links are independently verified." + } + }, + { + "sha256": "67825d37b9e7802ca38fe13366b64b46090727b894911c1ebae59d1fbdac302a", + "bytes": 106072, + "kind": "native-archive", + "group": "offset_positive", + "filename": "01-offset_positive-15232eb5.f3d" + }, + { + "sha256": "7acb8927465c61025d438a7c9983e2155f206807a5e7d64b38d59295eeaca983", + "bytes": 54900, + "kind": "viewport", + "group": "offset_negative", + "filename": "01-offset_negative-fd32bf7b.png", + "publishedPath": "cp5-offset_negative.png", + "visual": { + "verdict": "PASS", + "notes": "Two concentric curves are visible with an inward ring and a 2.00 magnitude annotation. Negative sign and the smaller child radius are established by independent native data." + } + }, + { + "sha256": "26cde0028398614078002d01d861aa8c10dc0046a918767f3d86e4bd8e201b3a", + "bytes": 105002, + "kind": "native-archive", + "group": "offset_negative", + "filename": "01-offset_negative-fd32bf7b.f3d" + }, + { + "sha256": "c52737f87161824581270161637eb21bec30c3e780bdfe3c0a1e010be7d23da4", + "bytes": 60445, + "kind": "viewport", + "group": "offset_chain", + "filename": "01-offset_chain-962f7338.png", + "publishedPath": "cp5-offset_chain.png", + "visual": { + "verdict": "PASS", + "notes": "Three parallel open bent chains and distinct refusal-fixture geometry remain visible, with signed-side offset magnitude annotations. Native linkage, exact distances and refused topology changes are established separately." + } + }, + { + "sha256": "21979eabee99b3cf1858c846fe3c22e5ad5e7ff11162a518e64b524a9f095818", + "bytes": 111059, + "kind": "native-archive", + "group": "offset_chain", + "filename": "01-offset_chain-962f7338.f3d" + }, + { + "sha256": "5d97b9509ebc4362b00de79846458ea413f3b110c84db79630da453e1d59486c", + "bytes": 18027, + "kind": "viewport", + "group": "axes", + "filename": "01-axes-fde41cfc.png", + "publishedPath": "cp5-axes.png", + "visual": { + "verdict": "PASS", + "notes": "Box and cylinder remain separate, with dashed construction axes aligned to selected straight edges and the circular face axis. Coincident axes need independent native identities, established by assertions." + } + }, + { + "sha256": "a7372fb30f8b19a60d5f0eb5439e9285ad429a638d3b11dc7c3315c75617afec", + "bytes": 72090, + "kind": "native-archive", + "group": "axes", + "filename": "01-axes-fde41cfc.f3d" + }, + { + "sha256": "579ac460b0d601adfedc28670d472aa574437092c350188bc87850142f931a2e", + "bytes": 22080, + "kind": "viewport", + "group": "axis_context", + "filename": "01-axis_context-1da902ea.png", + "publishedPath": "cp5-axis_context.png", + "visual": { + "verdict": "PASS", + "notes": "A clean cube and a dashed axis along its lower edge are visible. Component-frame and creation-occurrence identity are established by the independent native witness, not by this image." + } + }, + { + "sha256": "8b022c422b67cd4881dcbe341ad26dff617bc56f855cac2e6a7a0f203b55e535", + "bytes": 70145, + "kind": "native-archive", + "group": "axis_context", + "filename": "01-axis_context-1da902ea.f3d" + }, + { + "sha256": "48c3aa84d405edf74dbf8cae691d9f787a2ecf64f1b7e30f3baa7fb2c14979b1", + "bytes": 49349, + "kind": "viewport", + "group": "diagnostics", + "filename": "01-diagnostics-4ac22611.png", + "publishedPath": "cp5-diagnostics.png", + "visual": { + "verdict": "PASS", + "notes": "A closed four-edge rectangle remains visible without broken or stray edges. Per-entity diagnostic flags and driving dimensions are verified numerically." + } + }, + { + "sha256": "a0f3169cc132ec1263adbfa9fc2a7336124062921d55119721440363d13ea36a", + "bytes": 92181, + "kind": "native-archive", + "group": "diagnostics", + "filename": "01-diagnostics-4ac22611.f3d" + }, + { + "sha256": "0899e832fbba1234b76bf36171ef55df7d3b57a6024bc5acc593adbb4ea3e7cf", + "bytes": 48569, + "kind": "viewport", + "group": "persistence_graph", + "filename": "01-persistence_graph-194e2b9f.png", + "publishedPath": "cp5-persistence_graph.png", + "visual": { + "verdict": "PASS", + "notes": "Separate spline, linked angled lines with an aligned dashed construction axis, and concentric offset circles remain visible. Exact coincidence, spline shape and offset relationships are verified independently across recovery and archive reopening." + } + }, + { + "sha256": "1575a3c08eec94af271a4a32e116e81372a82ce724143f0854bf0ad0fb0887d7", + "bytes": 101182, + "kind": "native-archive", + "group": "persistence_graph", + "filename": "01-persistence_graph-194e2b9f.f3d" + }, + { + "sha256": "9f6189f217ba40dc6197af7cd16ff4df3df9cdee3bb096769dbc5a2c20d057b8", + "bytes": 28410, + "kind": "viewport", + "group": "bracket", + "filename": "01-bracket-eabc11a1.png", + "publishedPath": "cp5-bracket.png", + "visual": { + "verdict": "PASS", + "notes": "A rectangular solid plate has one clean circular through-hole and intact outer faces. Hole diameter, volume and archive equivalence are independently verified." + } + }, + { + "sha256": "9228c3e7902bba82f153c83013df5fa13eea1fbbb4382e6c1c5bf9f9ffe225f7", + "bytes": 75655, + "kind": "native-archive", + "group": "bracket", + "filename": "01-bracket-eabc11a1.f3d" + }, + { + "sha256": "fe68716a17d4c9584b7acebfb52bd53c52ba1aad79f7899c603dd54166a941e8", + "bytes": 381, + "kind": "bom", + "group": "assembly", + "filename": "01-assembly-flat.csv" + }, + { + "sha256": "3205ed136bce6915d3ba6354731ba2baf993199545f7b149966c913812c80cfe", + "bytes": 580, + "kind": "bom", + "group": "assembly", + "filename": "01-assembly-structured.csv" + }, + { + "sha256": "2239949ef5b91fc362fd746ee2e8a81e235d7dc33a48e587501c561a2aee8e01", + "bytes": 13874, + "kind": "viewport", + "group": "assembly", + "filename": "01-assembly-8de8c58e.png", + "publishedPath": "cp5-assembly.png", + "visual": { + "verdict": "PASS", + "notes": "Three separated rectangular components are visible; two repeated tall instances and an independent short copy have clean silhouettes. Instance identity, placement, physical totals and BOM quantities are verified numerically." + } + }, + { + "sha256": "a7a224ece16bba79a75b9b28c284b311d20fbd3238df17ceacb4b2fe63c09368", + "bytes": 79116, + "kind": "native-archive", + "group": "assembly", + "filename": "01-assembly-8de8c58e.f3d" + } + ], + "mainGateHarnessSha256": { + "ralph_everyday.py": [ + "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71" + ], + "ralph_mechanical.py": [ + "ad829db283072950b514c499cde8788fdf923e8ef30a64724e1adc4a31bb007a" + ], + "ralph_support.py": [ + "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27" + ], + "fusion_harness.py": [ + "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8" + ] + }, + "finalSupportSha256": { + "tests/ralph_mechanical.py": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "tests/test_ralph_everyday.py": "20487252a3ab759e5236c71e22009a84cc7e80e4f9aa0af5d243e36e7ef60fb8", + "tools/package-mechanical-dev.py": "d8522a4fa8c9b48a93f6c50ebeb84e90fb840eed5d3c8e706fb5951a9aec6f3d" + }, + "offline": { + "python": { + "status": "PASS", + "tests": 230 + }, + "rust": { + "status": "PASS", + "tests": 56 + }, + "windowsFreshIsolatedBuild": "PASS", + "dashboard": "BUILD_ONLY_NO_TESTS", + "portability": "PASS_WITH_RECORDED_EXISTING_EXCEPTIONS", + "shadow": "PASS_WITH_THREE_UNEXPANDED_TEMPLATES_EXCLUDED" + }, + "runtime": { + "package": { + "version": "1.12.0-dev.5", + "fileCount": 53, + "bytes": 4142539, + "sha256": "217fff7d48422c1288b8a273bc46f4ed31535cecd778d9c104184854195da247" + }, + "installedFiles": 191, + "allInstalledHashesMatch": true, + "devPinned": true, + "catalogProof": { + "negativeStaleBinary": "PASS", + "negativeMessage": "Native executable embeds a stale/missing verb catalog; rebuild in an isolated target directory", + "negativeArchiveCreated": false, + "freshCatalogBytesEmbedded": true, + "freshBinarySha256": "01adf44fc2c26765bcf51add2771d5340aba90104530dc105c89532a201d26b0", + "catalogSha256": "94a8688b7eb55124c0b7e874780bb933ad6c28e086e1dbb5667317fb57c7606a" + } + }, + "controlledRecovery": { + "acceptance": { + "status": "PASS", + "checks": { + "recoveryExitZero": true, + "originalFailurePreserved": true, + "cleanupPassed": true, + "twoExactClosures": true, + "historicalRefusalsPreserved": true, + "originalPristine": true, + "recoveredCountsExact": true, + "originalMismatchPreserved": true + }, + "intentionalNativeReport": "FAIL", + "cleanup": "PASS", + "nativeAssertions": { + "PASS": 15, + "FAIL": 0 + }, + "reportNativeRemainsIntentionalFailure": true, + "uniqueClosedDocuments": 2, + "historicalRefusals": 2, + "artifacts": [ + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp5-r4-recovery-diagnostic/artifacts/01-offset_negative-b10e7134.png", + "sha256": "7acb8927465c61025d438a7c9983e2155f206807a5e7d64b38d59295eeaca983", + "bytes": 54900 + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp5-r4-recovery-diagnostic/artifacts/01-offset_negative-b10e7134.f3d", + "sha256": "a0de63ffd78ec65fc517d6733a9a99b1b148a05d6c0417744bba2ccf32059d41", + "bytes": 104949 + } + ], + "finalHost": { + "activeCreationId": "07afe348-c874-481c-90eb-fd0c7e11f9bb", + "documents": [ + { + "creationId": "07afe348-c874-481c-90eb-fd0c7e11f9bb", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "success": true + } + }, + "intentionalNative": "FAIL", + "cleanup": "PASS", + "assertionsAfterInitialRecoveryAndIdempotentRepeat": { + "PASS": 15, + "FAIL": 0 + }, + "exactOwnedClosures": 2, + "historicalFailurePreserved": true, + "countCorrection": "Initial recovery reported7PASS despite11retained checks. Corrected idempotent repeat preserves original failure and reports all15checks." + }, + "firstPass": { + "runs": 15, + "assertions": { + "PASS": 162, + "FAIL": 2 + }, + "failedNativeReports": 6, + "allCleanupPassed": true, + "interpretation": "Preserved3product defects,2runner error-code mismatches and1transient native metadata failure; partial failed groups are not accepted." + }, + "visualObservationCorrection": "A repeated-image tool placeholder initially looked blank. Original bytes were unchanged; individual original-resolution review confirmed identical trim/extend T-junction captures. No replacement image was used.", + "limitations": [ + "Assertions are not counts of unique workflows.", + "Background capture transfer is not per-frame visual approval or proof of foreground invariance.", + "No new native rendering, animation, configuration or cloud entitlement claim.", + "macOS and electronics/library/cloud/UI flows require separate campaigns." + ] +} diff --git a/docs/mechanical-verification/cp6-asbuilt-1.png b/docs/mechanical-verification/cp6-asbuilt-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c94cdf803c11beb815b6c4e3f2609b2b4f7294a GIT binary patch literal 12899 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-legacy_regressions-1.png b/docs/mechanical-verification/cp6-legacy_regressions-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e99f6d302c3a3e7c54196239ff222387b5d8d1 GIT binary patch literal 28410 zcmeFZc|4Ts|1f^f7>s>HNn~ilA(XNdMx;$qR8%x0p-zgD-Ix*4&S|kks1qs9$x@aXDLaE{%rM*Uy2m-^^Euz=_xwR^<%T6Wv74i@S zDed01-3@}I!JkqIXc_QJv@}Z!{8IMw-0i<_AM^|O8x8)$|310j0YBw}cI*g|e1?B~ z{pD2)1nEM%w{JTbku}lBxUl96u{#oSq}?hJK(WxBzME6|yN+qxn%>g+%J{3#&h9lo z+M?F~W`4K!>%H&Z*2b5+EK@sQk7keR*g;sbM~oWd=nBH{$pQ7}v!ug*hx|k>!}X`W z;UALkJTTZxVknkh{{Au*cLOrNDW=mLU-_QtXkCT6}eP*6|WH%5{Q zmK%h#(-B4O*4vLlK~RMa0zdX!^-!qG+gb8$}0tp^kL2hafT=10j}g4(((Z zevkp%SgC+*j#~?e^FNYWGNOld;YW>~AylsWHIkvgFHN4DfdL#&Q3Ur%agLBe)0D{> zLIl{`Wi^D{KdM0bQil8sycv`|x$fp=+Qj|8z#CG75b~+t7ZxQ;ZdRx z2SN5%!7Y%RV7&Ty&}UxS&-HS}c89NDGDNO3L|r3;>!-nWrSYRvJqLe7!hU%KhTvP3%D0drd>`=$4}^-aIccWH51L*E5bFK{ zuC884<)<#;SKW}Nk6El#rHrTNVGNLfP^y3*jMD01?kP-b&Rq+cG{DEwT?HP>n;T#a zHe^N(FM)E_uY}m8WjL@K<|>4yI2ei!4Vbcb^^JNh5{irl@GiAZ=XebNR@Gi9MM!nX zMFXk_-UD|dYX?eNeh+QR`-{w!L*Nuk_sNqoc8;g!NfAPGY(11-!HY|-+W4Oh!aWl@p(26wm@b6$^33LNeUPH7vu!!#l>2 z%;znds7aN-AP7bnit?t@zVp)1)>#LLl|k)AytIgyI-&2^zLv#z ziO4`st^vFRn5m04B7!5&$dRvpfxkQoBvE1P>u^ajR8g~8n!ZN3k`^=bXpwV@ogkFw zE@BStqyf}&i{xz+Rqka39mZD&km!41)`D-aIza5ihyA>4H#9xcccB@wIwT*r3Y

g$_@LL#RM7T~Ns5bD%O&u|dO=6-q6X2>E` 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-legacy_regressions-5.png b/docs/mechanical-verification/cp6-legacy_regressions-5.png new file mode 100644 index 0000000000000000000000000000000000000000..84b9226d9614e74df3289eceb4adcc5fb5e3069e GIT binary patch literal 13874 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 U-}KiASQg~5z}xM*D=+@P0FT^pYybcN literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-link_single-1.png b/docs/mechanical-verification/cp6-link_single-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8c5e32e64e1bef8189547b98613de48b7dd242 GIT binary patch literal 21638 zcmeIai9gg^{5X7O>`S3+;f7Wvj8arGlWw*osauj5b)}G{WM@WMZdqHY6kUl*xLHfg zAQYiRO2SA|){$*&<9VMM_kMrRfAD)=&v#z0d-Yk)Iq!Wt@AJ7}ZDqPZTuB@uw7}f# zcN>I+;GY8FqQdZpE0-()e-=91njhc28?A+Zi^6~S_io=6_`jH^iOCt>HU8h{wS^4` zsUh>XSm{SIo?>24B2=rmxs)mARj93U}MVT+P}IiMj*!wfWOq zOs)qCP3LS2IsPu+-0!k?@}}&^9F4;wclI!=i!xX4kfzYT5!sIm+V!Ob#KW1++0N%? zCb#N^{!*CxM;R|nw{UHk#{WR{pE8I5e^V<2Dfl{*M3BaR*IFV$_(K<8{QtwpnU@@A zXXakD13BU&0#tzx?-NZKenai`9{QebwH`Deq_>r+AYx|e1(HY4_Jjb z|MI$Bfk;3Pw*&1po*K@~PHgqN6TzqxWF||)lnaPzh;pHdqfqJCq&j<1ls=i#@igSH zAiS&#TuTj~%9vjG?8Hpn0u$!T6R_&9MZi3ZZ&~cbTPEnWSQtXx%MlS>W#*pcn%p>m zVj6GJEJb0s6bx7MPHUc2{{Cdx)0!sPFGYWr=G7*8_6~*tqtn4W98!{>x%384by9`Qms%fIFGX~IkXbZmJ zd{pJ0?mBu{{HyN5t@rt>Oky$ne&SOmW38@|G@^1bg*Imf@+tZnuSnW)R)Tgu9PYQ^ zmyfTgW|ZuybZn!cJR>#4?8j^GyBPJUq`)1V@Z(b z2bx)(pFvsa(;IE#K#=$9KoHCAF|+_qofy5bPJpV-=aD}qc9^i~YM%E$+N!n(D*CLmlOwK=k9vuxlo@!em zK~$Xj{w&wwOUs1b_z|vY))p>IDmX%}k=7s*k$nsx>1CB>Iy)9Wx)|xWHf2)YpCce` z6BwEF=1`~3Y9wDd1z1*Lm8}Lcx0OuXY13b8Ek>_WoEuxFQ9(9(Rz*#fWTOvcy09mxceTw1em3@|@+A;6jX?tV!_$00%H{^X4tF+{x- zz-R5rcW1fF2)UoDA1_b@VW(Wf;B>$CxXq|rB<3=ZrFbF)#y-RotUu0Z=x`RJkLaxx zRstaR#{!U7+h>|5OV$y*+Ownp_jZ>he5G5G=bY1 z>GMS1a#EPFok+EqI>yTFTg?+8jpg`-Yuuk@-G2qU$e_9v!p6W*`g+hxx{YFCLkiMB z4K_x`qz)~EMMQW2!b<;E#qsNDxD8ezrNj}*B9{lWi(cGN$*^T=C}9iCXx4nFWcoUp zyOT)0A=yfL0nAI41f0}1yF@UOk!{lk(u2KQg?lg#_bh-emvt4nN53h{9T8;yeJ9L3 zR)RixECz^XgKdHNU&EeWFFL3w%Ve}~HM;)xkb3Uiv1So?j5XuTAG2q<4a?Ahs@w&} z%Rv0;vY=;7`){2?gKa@_Dc^(S3At-cPDx*Oti*%9o5O;~AChOfBdf0T)-cRa*2TR0 zLKBX4w~9QRi-7HIvdsPFHA7sOZ3?6yGP-0*x_FrRhi-o6>#81yn4V=arNTimIsW2Y!x(nSv* zuK>CgUp1U5ogQrKFAUu}=@5xtp71v9Y`t}>Wg2GjS^~3pIq7n{v6|h9f~UIZ`%zI@ zz&IN7>x{ArmTE&OLc-fA0qUPHtJhu_L;5GL!qJLxW%<=F z7$b|&l2iM6_Lq4N7{#)j?VA}BDKoVCD>P9Zoi;kZm&BdC-C6|ZmSu_O+;7y2$=h;D za=}qYP|Sv*h)ZFmtuq+8{pP>tBMt3(+tw(r6_Gg4V?~6BU0x? z+v@8Nw>$>7@jJ|zP(|+aTq;P>UL75_gE(*EK-yBPW2SED6B39qPen1U0lG}}P8~U- znotsZnKY4*T83}Qbn0w`TLwKl)dY!@S&#th#m$quE+I35w!e(6sx<1|fduIn>r7`c zh40=HB<+Fsi(l-d0>Dk@0bscgVDyPpS3!!n*M(@c)}6&Y;{)~BTG3sBzNzPq&Xk<# zu{xo5v$0JF-8Vt^kdPqLo+tMEvH6!<@80BSHN#&tKt?i}ehHBK076O;N|wWOUxc}> zy?AuC{tb}6`iaVkzU0}YGs1sHN=HeH0i_v0N#lXyoUrN40%6KqowFF*ik+l&;&y;Z zEpU&1dCA7MgZ-Mzfijjqmnq5-maD@P5JdWAzS(`!TJG2 X^bbj?d4?eM(&!V+P~ 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-links_two-1.png b/docs/mechanical-verification/cp6-links_two-1.png new file mode 100644 index 0000000000000000000000000000000000000000..144ceda90208da97baaf6a98e51c53ee839b4c36 GIT binary patch literal 38750 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

d=&UGM=G(x|Hz>r&dh(G0TF>emO-Nlj)Imt_R7 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-links_two-3.png b/docs/mechanical-verification/cp6-links_two-3.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5c9db79c5bcc19feab30b260ebfc623ad4fc8e GIT binary patch literal 26438 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-redefinition-1.png b/docs/mechanical-verification/cp6-redefinition-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9b48a6ebbf1e3d8bcbbdce3079c44abedb6160 GIT binary patch literal 17214 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 CO1WPE literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-regular_ball-1.png b/docs/mechanical-verification/cp6-regular_ball-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3d935149f442b995d0b4f79b4a9c3e9945bb71ab GIT binary patch literal 19152 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-regular_cylindrical-1.png b/docs/mechanical-verification/cp6-regular_cylindrical-1.png new file mode 100644 index 0000000000000000000000000000000000000000..08ce0d45d64fd31015065bb4c5fa35453024122c GIT binary patch literal 18115 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 NW$TvSS;9T?e*geg={^7e literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-regular_rigid-1.png b/docs/mechanical-verification/cp6-regular_rigid-1.png new file mode 100644 index 0000000000000000000000000000000000000000..368e2818e202db0494f04a25493b94b2345d8f25 GIT binary patch literal 14636 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 aYdIlt-_?+8=~K$Yf_Y2kUY{-4_rCzb^S3Sl literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-root_attachment-1.png b/docs/mechanical-verification/cp6-root_attachment-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb5ef730cfa247db57dcb6bcfd4dce4351847e9 GIT binary patch literal 14641 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 literal 0 HcmV?d00001 diff --git a/docs/mechanical-verification/cp6-verification.json b/docs/mechanical-verification/cp6-verification.json new file mode 100644 index 0000000..7de1958 --- /dev/null +++ b/docs/mechanical-verification/cp6-verification.json @@ -0,0 +1,2245 @@ +{ + "checkpoint": 6, + "version": "1.12.0-dev.6", + "typedOperations": 53, + "publicVerbs": 167, + "nativeFusionVersion": "2705.1.11", + "target": "adom_drew2", + "mainAcceptance": { + "native": "PASS", + "visualRequired": true, + "groupCount": 15, + "groups": [ + { + "group": "regular_rigid", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 21, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "redefinition", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 33, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "links_two", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 37, + "FAIL": 0 + }, + "closures": 3, + "artifactCount": 4, + "visual": "PASS" + }, + { + "group": "link_single", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 22, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "regular_revolute", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 21, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "regular_slider", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 22, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "regular_cylindrical", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 29, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "regular_pin_slot", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 29, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "regular_planar", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 37, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "regular_ball", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 37, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "placement_frames", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 54, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "root_attachment", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 8, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "nested_context", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 26, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + }, + { + "group": "origins", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 26, + "FAIL": 0 + }, + "closures": 3, + "artifactCount": 4, + "visual": "PASS" + }, + { + "group": "asbuilt", + "checks": { + "nativePass": true, + "cleanupPass": true, + "countsExact": true, + "allAssertionsPass": true, + "wholeRequestedGroupPassed": true, + "exactOwnedClosures": true, + "originalRestored": true, + "originalIdentity": true, + "runtimeIdentity": true, + "nativeCheckpoints": true, + "exactOwnedDocumentCount": true, + "exactArtifactKindsAndCount": true, + "nonemptyNativeAssertions": true, + "exactHarnessSourceNames": true, + "visualPass": true + }, + "assertions": { + "PASS": 13, + "FAIL": 0 + }, + "closures": 2, + "artifactCount": 2, + "visual": "PASS" + } + ], + "assertions": { + "PASS": 415, + "FAIL": 0 + }, + "exactClosures": 32, + "rawCalls": 1603, + "verbs": { + "fusion_state": 30, + "fusion_addin_status": 30, + "bridge_list": 30, + "run_script": 30, + "fusion_document_info": 15, + "fusion_run_modeling_script": 553, + "fusion_get_preferences": 30, + "fusion_mech_capabilities": 15, + "fusion_mechanical": 870 + }, + "mechanicalOperations": { + "new_design": 15, + "inspect": 404, + "component_create": 34, + "sketch_create": 35, + "sketch_geometry": 35, + "feature_create": 35, + "occurrence_update": 26, + "inspect_entity": 69, + "geometry_query": 70, + "regular_joint_create": 29, + "joint_edit": 58, + "regular_joint_edit": 10, + "export": 17, + "motion_link_create": 4, + "motion_link_edit": 8, + "motion_link_delete": 1, + "joint_delete": 8, + "occurrence_insert": 2, + "joint_origin_create": 2, + "joint_origin_edit": 5, + "joint_origin_delete": 2, + "joint_create": 1 + }, + "artifacts": 34, + "originalCreationId": "2da536b0-f828-4586-ba8c-2b9600e78152", + "errors": [], + "limitations": "Representative native API options; native geometry and visual review are separate. First-pass failures are preserved in their original reports." + }, + "compositeProvenance": { + "kind": "Explicit composite of whole groups on identical installed payload/session/process/original document", + "originalCampaign": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-full-r4-final-summary.json", + "originalSha256": "6ee2e65a12231d8c3d91ed5900ce90ac9b998aa8f3667a6c3afd4d2838fd0267", + "qualifiedReplay": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-full-r4-qualified2-summary.json", + "qualifiedSha256": "269f434720a6066c0f6911c6fbfe250de7965492c56329f98a62beb09937414e", + "preservedFailures": [ + "cp6-r4-final-redefinition", + "cp6-r4-qualified-redefinition" + ], + "replacementReason": "Native snapshot-history limitation: exact verified refusal plus same-family reattachment and independent unlocked snapshot-free conversion. No product or runtime change between accepted groups." + }, + "legacyRegression": { + "status": "PASS", + "groups": [ + "bracket", + "assembly" + ], + "assertions": { + "PASS": 43, + "FAIL": 0 + }, + "exactClosures": 4, + "artifacts": 6, + "visual": "PASS", + "report": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/report.json", + "originalRestored": true + }, + "recoveryAcceptance": { + "status": "PASS", + "checks": { + "recoveryExitZero": true, + "originalFailurePreserved": true, + "cleanupPassed": true, + "twoExactClosures": true, + "historicalRefusalsPreserved": true, + "countsExact": true, + "closuresMatchRegisteredIds": true, + "originalPristine": true + }, + "intentionalNativeReport": "FAIL", + "cleanup": "PASS", + "assertions": { + "PASS": 29, + "FAIL": 0 + }, + "exactClosures": 2, + "artifacts": 2, + "scope": "Same-session exact-owned close recovery; not process restart" + }, + "campaignReports": [ + { + "campaign": "regular_rigid", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 21, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-regular_rigid" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_rigid/report.json", + "reportSha256": "88a2dd19e6df3a383cd91069bed15688b53e6995baedc4fa5c8a4b6105a8ff70" + }, + { + "campaign": "redefinition", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 33, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-redefinition" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified2-redefinition/report.json", + "reportSha256": "e9ce059ba3f5913d45a7ef35623cfa8c8265d086384350ca360f1797d90f3bf0" + }, + { + "campaign": "links_two", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 37, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-links_two" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/report.json", + "reportSha256": "83b6659f5a7b07c938e86f946157716306515b14848862224fad0e79d4ae9e92" + }, + { + "campaign": "link_single", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 22, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-link_single" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-link_single/report.json", + "reportSha256": "a60198619e8cf5f2a24f972443e09a0fe12af6e7a52d56cf5b0db8f3cf53fc1b" + }, + { + "campaign": "regular_revolute", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 21, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-regular_revolute" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_revolute/report.json", + "reportSha256": "ed0742a01d9d6c22391877c6cd8d8ce9eb455a4a1dc3c3b8c889abf30d016b5d" + }, + { + "campaign": "regular_slider", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 22, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-regular_slider" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_slider/report.json", + "reportSha256": "852fb925d449af11032b1a596dc8692b490c0084072ca9cbffa88f8fc9b3cf01" + }, + { + "campaign": "regular_cylindrical", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 29, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-regular_cylindrical" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_cylindrical/report.json", + "reportSha256": "947ffa52462b17e9d91a40b8624eb01dfc73b0d2e3cf919bef6aaacc67757589" + }, + { + "campaign": "regular_pin_slot", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 29, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-regular_pin_slot" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_pin_slot/report.json", + "reportSha256": "cee3427ab1466ba92f98c6608c53dbed03f27d84026b461ca03a8fb11bb32858" + }, + { + "campaign": "regular_planar", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 37, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-regular_planar" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/report.json", + "reportSha256": "60d4ded22243cbd9c600b9c80f6151d1e5d33e7c85b4d5d706e1dd270700147d" + }, + { + "campaign": "regular_ball", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 37, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-regular_ball" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_ball/report.json", + "reportSha256": "dcc6117e181994967ff272be94d52f1d97e497454a8e63e438f9e5fd6ee529c6" + }, + { + "campaign": "placement_frames", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 54, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-placement_frames" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-placement_frames/report.json", + "reportSha256": "dd1389c2923982886f172fa6d05c7ee38eaf7430dcea71bee0d3aece0634dd72" + }, + { + "campaign": "root_attachment", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 8, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-root_attachment" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-root_attachment/report.json", + "reportSha256": "679babec1f28bd39191a1efe37f913bffcbef8510358d0a7fdb49927c2cbbb4c" + }, + { + "campaign": "nested_context", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 26, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-nested_context" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-nested_context/report.json", + "reportSha256": "7cb31b8d40f8553ed1ff746799f5e67b4cb96865a69778f2a67a0a7082ef5b02" + }, + { + "campaign": "origins", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 26, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-origins" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/report.json", + "reportSha256": "2e91a0b80b7abfcccad4f43d555282edf1558f45db9c10b89e3b6328dddc1c3e" + }, + { + "campaign": "asbuilt", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 13, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-asbuilt" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-asbuilt/report.json", + "reportSha256": "88b4b0f892c46da892a20eb4cc40a9a3df8198f711686d491f3195be541aedea" + }, + { + "campaign": "legacy_regressions", + "native": "PASS", + "cleanup": "PASS", + "visual": "PASS", + "overall": "PASS", + "counts": { + "PASS": 43, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-bracket", + "01-assembly" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/report.json", + "reportSha256": "8514fb0e1f97eabab87601eb227902c686fce0a8cb61a411c048bf735b3a3640" + }, + { + "campaign": "recovery_diagnostic", + "native": "FAIL", + "cleanup": "PASS", + "visual": "PASS", + "overall": "FAIL", + "counts": { + "PASS": 29, + "FAIL": 0 + }, + "requestedFixtures": [ + "01-regular_cylindrical" + ], + "reportPath": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-recovery-diagnostic/report.json", + "reportSha256": "08cf451cb6f4761a14f58f09201573d648c09de02aa982801eb716c90d2bb71d" + } + ], + "preservedFailures": [ + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-redefinition/report.json", + "sha256": "8b261794cc6476935976c3bd815e68528db6bcee2d8ba39e1aee35fe2f2ff4c7", + "native": "FAIL", + "cleanup": "PASS", + "counts": { + "PASS": 17, + "FAIL": 0 + }, + "failure": { + "type": "RuntimeError", + "message": "fusion_mechanical: semantic failure: [{\"path\": \"$\", \"error\": \"Recompute or feature health check failed.\", \"code\": \"mutation_failed\", \"cause\": null, \"status\": \"error\"}, {\"path\": \"$.output\", \"error\": \"Recompute or feature health check failed.\", \"code\": \"mutation_failed\", \"cause\": null, \"status\": null}]; no explicit successful response", + "fixture": "01-redefinition" + } + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified-redefinition/report.json", + "sha256": "7fceec5942809c50760cffc1ca60a480db8cbf5add15f172d1a9286d31efa82e", + "native": "FAIL", + "cleanup": "PASS", + "counts": { + "PASS": 26, + "FAIL": 1 + }, + "failure": { + "type": "RuntimeError", + "message": "Fresh moving joint has no downstream snapshot", + "fixture": "01-redefinition" + } + } + ], + "artifacts": [ + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_rigid/artifacts/01-regular_rigid-dcc5c535.png", + "sha256": "138f098d003767eb28589e3020ccdb8db06302daf2ed0ae7cdb8842cb9e9dd69", + "bytes": 14636, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T184409Z-4a101ded3c6744ac9f2887668c82d15a/01-regular_rigid-dcc5c535.png", + "fixture": "01-regular_rigid", + "campaign": "regular_rigid", + "publishedPath": "cp6-regular_rigid-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_rigid/artifacts/01-regular_rigid-dcc5c535.f3d", + "sha256": "34a3f7bb7ae14ff8ee1b442bff8de5c2f5f5ad062e87514637a1f610013c65a8", + "bytes": 83262, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T184409Z-4a101ded3c6744ac9f2887668c82d15a/01-regular_rigid-dcc5c535.f3d", + "fixture": "01-regular_rigid", + "campaign": "regular_rigid" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified2-redefinition/artifacts/01-redefinition-2c5139bc.png", + "sha256": "13984e5cc243964a81fe2090e7442116755c7aad112e48918f1ce8a841601ea9", + "bytes": 17214, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193353Z-8e679faa4557441496d003c270c758dc/01-redefinition-2c5139bc.png", + "fixture": "01-redefinition", + "campaign": "redefinition", + "publishedPath": "cp6-redefinition-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified2-redefinition/artifacts/01-redefinition-2c5139bc.f3d", + "sha256": "7ad5e9c5c3b3a614d2a6cbff16d41eda04b55607c60a46ec05d4fcc7342be918", + "bytes": 108674, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193353Z-8e679faa4557441496d003c270c758dc/01-redefinition-2c5139bc.f3d", + "fixture": "01-redefinition", + "campaign": "redefinition" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/artifacts/01-links_two-e788593d.png", + "sha256": "154628d0f14c28fae41cd92e970d087199347bd7b40ab4a7defdb119c4d51c26", + "bytes": 38750, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/01-links_two-e788593d.png", + "fixture": "01-links_two", + "campaign": "links_two", + "publishedPath": "cp6-links_two-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/artifacts/01-links_two-e788593d.f3d", + "sha256": "77f76a78d391cdae06795dd46f5c850c0c97f0cb9ec6750d4f141f2976c5ef12", + "bytes": 105126, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/01-links_two-e788593d.f3d", + "fixture": "01-links_two", + "campaign": "links_two" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/artifacts/01-links_two-0d140b6e.png", + "sha256": "a4901773c3e8d98870834a9030b68a63962f62247fc8b69aba94441c5db8feff", + "bytes": 26438, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/01-links_two-0d140b6e.png", + "fixture": "01-links_two", + "campaign": "links_two", + "publishedPath": "cp6-links_two-3.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/artifacts/01-links_two-0d140b6e.f3d", + "sha256": "11354297ca5baebcafdbd0f70a82c96c13ef7678e691ff62aa55b5cac8c485d4", + "bytes": 104232, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/01-links_two-0d140b6e.f3d", + "fixture": "01-links_two", + "campaign": "links_two" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-link_single/artifacts/01-link_single-dc495a9f.png", + "sha256": "8dae95a91ce5fbda84186ab36071cf4351462ff2e4d014046b35103b3f676196", + "bytes": 21638, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T185302Z-1d461ff14b7242b7a06a0f2bdf310009/01-link_single-dc495a9f.png", + "fixture": "01-link_single", + "campaign": "link_single", + "publishedPath": "cp6-link_single-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-link_single/artifacts/01-link_single-dc495a9f.f3d", + "sha256": "d1a51c5707f8c9b8b21f7bd214592c81cfd60966d9ae6ec6bab2a43a0ad4cf1f", + "bytes": 88217, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T185302Z-1d461ff14b7242b7a06a0f2bdf310009/01-link_single-dc495a9f.f3d", + "fixture": "01-link_single", + "campaign": "link_single" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_revolute/artifacts/01-regular_revolute-3e93cb0b.png", + "sha256": "4844930d53107c059d0e832aa7471487b00379b8ae1d70f570c979ea58094eb3", + "bytes": 17511, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T185520Z-7629b43d51184c44b3308d4fd7ba60b6/01-regular_revolute-3e93cb0b.png", + "fixture": "01-regular_revolute", + "campaign": "regular_revolute", + "publishedPath": "cp6-regular_revolute-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_revolute/artifacts/01-regular_revolute-3e93cb0b.f3d", + "sha256": "cc5dc3998f85123931c2114730f8346577346c2074421b706e6296fe811db943", + "bytes": 85143, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T185520Z-7629b43d51184c44b3308d4fd7ba60b6/01-regular_revolute-3e93cb0b.f3d", + "fixture": "01-regular_revolute", + "campaign": "regular_revolute" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_slider/artifacts/01-regular_slider-3f1fb2b6.png", + "sha256": "632173b51ce8fa2edb7db743e70c7878f84a7742ca0023fd546024a338cfbcc0", + "bytes": 17026, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T185743Z-50deee63bd124a8a82e2e141f8e1d97f/01-regular_slider-3f1fb2b6.png", + "fixture": "01-regular_slider", + "campaign": "regular_slider", + "publishedPath": "cp6-regular_slider-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_slider/artifacts/01-regular_slider-3f1fb2b6.f3d", + "sha256": "a8d6267fac460e0d8ec2eb04d10c609724a3ab4866e356f3bc09586031e4343e", + "bytes": 85151, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T185743Z-50deee63bd124a8a82e2e141f8e1d97f/01-regular_slider-3f1fb2b6.f3d", + "fixture": "01-regular_slider", + "campaign": "regular_slider" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_cylindrical/artifacts/01-regular_cylindrical-f3c6161f.png", + "sha256": "0a5d0f1a7acf479243982e01832d156959702430001bc16bccf808889de71bef", + "bytes": 18115, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T185959Z-0d81b8bc1b684b638e534f9d31a45924/01-regular_cylindrical-f3c6161f.png", + "fixture": "01-regular_cylindrical", + "campaign": "regular_cylindrical", + "publishedPath": "cp6-regular_cylindrical-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_cylindrical/artifacts/01-regular_cylindrical-f3c6161f.f3d", + "sha256": "4d056214dbbe3e0c94d204fe57a279f79d0822e9f14762966647f8e8d033938c", + "bytes": 86811, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T185959Z-0d81b8bc1b684b638e534f9d31a45924/01-regular_cylindrical-f3c6161f.f3d", + "fixture": "01-regular_cylindrical", + "campaign": "regular_cylindrical" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_pin_slot/artifacts/01-regular_pin_slot-ae190031.png", + "sha256": "bc4f9aeadb0eb81bccd0440dd698fbf7d68ea3b4f8f6f5bd4e9da22f36f45d6f", + "bytes": 19493, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T190224Z-092484950bab411c8a43dc59e52b5b06/01-regular_pin_slot-ae190031.png", + "fixture": "01-regular_pin_slot", + "campaign": "regular_pin_slot", + "publishedPath": "cp6-regular_pin_slot-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_pin_slot/artifacts/01-regular_pin_slot-ae190031.f3d", + "sha256": "0e34c7fd22da4b8a49dbb4619b409f0825c49b84673c5ed7eecd9281948a40bc", + "bytes": 86720, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T190224Z-092484950bab411c8a43dc59e52b5b06/01-regular_pin_slot-ae190031.f3d", + "fixture": "01-regular_pin_slot", + "campaign": "regular_pin_slot" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/artifacts/01-regular_planar-d3aabd2c.png", + "sha256": "ead37fe7c757ea2a513206a5dcd908f57d45728c819b1b625f6a49d80a36b931", + "bytes": 19605, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T190447Z-006259a5a8c9403186d263fe44b72f11/01-regular_planar-d3aabd2c.png", + "fixture": "01-regular_planar", + "campaign": "regular_planar", + "publishedPath": "cp6-regular_planar-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/artifacts/01-regular_planar-d3aabd2c.f3d", + "sha256": "23435826ed9e703d6ee49bfa97a2cdea821020b0b2b99cdf2d5ead5dc597f8f0", + "bytes": 87358, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T190447Z-006259a5a8c9403186d263fe44b72f11/01-regular_planar-d3aabd2c.f3d", + "fixture": "01-regular_planar", + "campaign": "regular_planar" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_ball/artifacts/01-regular_ball-de1fe8f6.png", + "sha256": "2f0cc21e759615654141dcc00e550bcba991061557f80e239d337b3db13dccce", + "bytes": 19152, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T190730Z-bc86d24debe1409482935eca5510ee91/01-regular_ball-de1fe8f6.png", + "fixture": "01-regular_ball", + "campaign": "regular_ball", + "publishedPath": "cp6-regular_ball-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_ball/artifacts/01-regular_ball-de1fe8f6.f3d", + "sha256": "14c31e3f0fe35c5f7c0df7981b20cb2a5c7fa3a1b650ed49b146768026a23054", + "bytes": 87534, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T190730Z-bc86d24debe1409482935eca5510ee91/01-regular_ball-de1fe8f6.f3d", + "fixture": "01-regular_ball", + "campaign": "regular_ball" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-placement_frames/artifacts/01-placement_frames-24960e86.png", + "sha256": "30ac2f313034486f854333c6985fdaa63b017b8fc9cd8cd062c64db22bf1e1ea", + "bytes": 42038, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191015Z-69428c7109b042c7906e9c64aedf66cb/01-placement_frames-24960e86.png", + "fixture": "01-placement_frames", + "campaign": "placement_frames", + "publishedPath": "cp6-placement_frames-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-placement_frames/artifacts/01-placement_frames-24960e86.f3d", + "sha256": "7dbedaa9b65e10e1c8921fac51696c65a5e8542b051291d211bacff62d137bea", + "bytes": 79077, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191015Z-69428c7109b042c7906e9c64aedf66cb/01-placement_frames-24960e86.f3d", + "fixture": "01-placement_frames", + "campaign": "placement_frames" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-root_attachment/artifacts/01-root_attachment-e974f8c3.png", + "sha256": "71be4a177d7aba7a8466841c86f5b50e02e120def9dd5f6bc02af660914fc9c4", + "bytes": 14641, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191442Z-2bc31ddc870b42d7ab1f7bb8cebe2c21/01-root_attachment-e974f8c3.png", + "fixture": "01-root_attachment", + "campaign": "root_attachment", + "publishedPath": "cp6-root_attachment-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-root_attachment/artifacts/01-root_attachment-e974f8c3.f3d", + "sha256": "e2b1b990767de3218a0b73831c263ad51852da059840c2ff1f557ca4bc7251f7", + "bytes": 79694, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191442Z-2bc31ddc870b42d7ab1f7bb8cebe2c21/01-root_attachment-e974f8c3.f3d", + "fixture": "01-root_attachment", + "campaign": "root_attachment" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-nested_context/artifacts/01-nested_context-f4a31943.png", + "sha256": "ad55cc056321482bac5d25c0e1b88f58dbd5879d07df15358822b9816ccb23d2", + "bytes": 11339, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191613Z-9bd61c4ca7204627b0e73024d07b91df/01-nested_context-f4a31943.png", + "fixture": "01-nested_context", + "campaign": "nested_context", + "publishedPath": "cp6-nested_context-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-nested_context/artifacts/01-nested_context-f4a31943.f3d", + "sha256": "568e2f9b2444f163bac14e23f350f88b53068cfe34f7f7d998ed62384a439212", + "bytes": 83215, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191613Z-9bd61c4ca7204627b0e73024d07b91df/01-nested_context-f4a31943.f3d", + "fixture": "01-nested_context", + "campaign": "nested_context" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/artifacts/01-origins-a11662f3.png", + "sha256": "3ddb025bbf8aff139d01d1ea16748e8718d0a2cc989cc1412543e814aa8c1eb0", + "bytes": 16123, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/01-origins-a11662f3.png", + "fixture": "01-origins", + "campaign": "origins", + "publishedPath": "cp6-origins-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/artifacts/01-origins-a11662f3.f3d", + "sha256": "26f1116cb9c88cdf480fe4a24260b099ad6db89f764e7284511f31fd06910cf8", + "bytes": 88732, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/01-origins-a11662f3.f3d", + "fixture": "01-origins", + "campaign": "origins" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/artifacts/01-origins-07575545.png", + "sha256": "3ddb025bbf8aff139d01d1ea16748e8718d0a2cc989cc1412543e814aa8c1eb0", + "bytes": 16123, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/01-origins-07575545.png", + "fixture": "01-origins", + "campaign": "origins", + "publishedPath": "cp6-origins-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/artifacts/01-origins-07575545.f3d", + "sha256": "52d04edd1d61775d7c9ca0afbd1839d75cc03f4dd03a0d9984c0dc41f45a17a4", + "bytes": 88539, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/01-origins-07575545.f3d", + "fixture": "01-origins", + "campaign": "origins" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-asbuilt/artifacts/01-asbuilt-50506168.png", + "sha256": "533eaebd4a66cbdce89efebd6751a9bbd49e35f90aa53c9d3e25f498a735e371", + "bytes": 12899, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T192234Z-56eabcd85f7e430aa4fda9620343ff72/01-asbuilt-50506168.png", + "fixture": "01-asbuilt", + "campaign": "asbuilt", + "publishedPath": "cp6-asbuilt-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-asbuilt/artifacts/01-asbuilt-50506168.f3d", + "sha256": "65a63d6a21e9e7f69a26bcb49cf2b597e70a0992194cc78cca036a3c34a0d192", + "bytes": 69290, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T192234Z-56eabcd85f7e430aa4fda9620343ff72/01-asbuilt-50506168.f3d", + "fixture": "01-asbuilt", + "campaign": "asbuilt" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/artifacts/01-bracket-2d148101.png", + "sha256": "9f6189f217ba40dc6197af7cd16ff4df3df9cdee3bb096769dbc5a2c20d057b8", + "bytes": 28410, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/01-bracket-2d148101.png", + "fixture": "01-bracket", + "campaign": "legacy_regressions", + "publishedPath": "cp6-legacy_regressions-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/artifacts/01-bracket-2d148101.f3d", + "sha256": "ec81b7da926a301986cb86bee00321be54b29e0752329be78de07cef6aabcf8c", + "bytes": 76019, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/01-bracket-2d148101.f3d", + "fixture": "01-bracket", + "campaign": "legacy_regressions" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/artifacts/01-assembly-flat.csv", + "sha256": "be2bb6639c0463b79f4c9f674b2d80dc7f96fb744b23637a86c583f2835b380a", + "bytes": 381, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/01-assembly-flat.csv", + "fixture": "01-assembly", + "campaign": "legacy_regressions" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/artifacts/01-assembly-structured.csv", + "sha256": "0508e0ac81600f29e7744b002577b57b9e7570af5397b03d9d30712af182afdf", + "bytes": 580, + "kind": "bom", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/01-assembly-structured.csv", + "fixture": "01-assembly", + "campaign": "legacy_regressions" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/artifacts/01-assembly-5f25aa80.png", + "sha256": "2239949ef5b91fc362fd746ee2e8a81e235d7dc33a48e587501c561a2aee8e01", + "bytes": 13874, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/01-assembly-5f25aa80.png", + "fixture": "01-assembly", + "campaign": "legacy_regressions", + "publishedPath": "cp6-legacy_regressions-5.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/artifacts/01-assembly-5f25aa80.f3d", + "sha256": "21d8d2b65cebb86c07892e6db1e95ee49a9e4987a7debc6d47743a8af76f468a", + "bytes": 79209, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/01-assembly-5f25aa80.f3d", + "fixture": "01-assembly", + "campaign": "legacy_regressions" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-recovery-diagnostic/artifacts/01-regular_cylindrical-59076a23.png", + "sha256": "0a5d0f1a7acf479243982e01832d156959702430001bc16bccf808889de71bef", + "bytes": 18115, + "width": 1280, + "height": 900, + "kind": "viewport", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193019Z-5385b04d1155442693645553582cbf8f/01-regular_cylindrical-59076a23.png", + "fixture": "01-regular_cylindrical", + "campaign": "recovery_diagnostic", + "publishedPath": "cp6-regular_cylindrical-1.png" + }, + { + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-recovery-diagnostic/artifacts/01-regular_cylindrical-59076a23.f3d", + "sha256": "3e1b111a89766c8afa9a2593112b2f0bbb5e99df6026b9add86a7d6c499714a4", + "bytes": 86969, + "kind": "native-archive", + "hostPath": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T193019Z-5385b04d1155442693645553582cbf8f/01-regular_cylindrical-59076a23.f3d", + "fixture": "01-regular_cylindrical", + "campaign": "recovery_diagnostic" + } + ], + "harnessSources": [ + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_rigid/harness-20261005T184409Z-4a101ded3c6744ac9f2887668c82d15a/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "regular_rigid" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_rigid/harness-20261005T184409Z-4a101ded3c6744ac9f2887668c82d15a/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "regular_rigid" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_rigid/harness-20261005T184409Z-4a101ded3c6744ac9f2887668c82d15a/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "regular_rigid" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_rigid/harness-20261005T184409Z-4a101ded3c6744ac9f2887668c82d15a/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "regular_rigid" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_rigid/harness-20261005T184409Z-4a101ded3c6744ac9f2887668c82d15a/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "regular_rigid" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified2-redefinition/harness-20261005T193353Z-8e679faa4557441496d003c270c758dc/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "redefinition" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified2-redefinition/harness-20261005T193353Z-8e679faa4557441496d003c270c758dc/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "redefinition" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified2-redefinition/harness-20261005T193353Z-8e679faa4557441496d003c270c758dc/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "redefinition" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified2-redefinition/harness-20261005T193353Z-8e679faa4557441496d003c270c758dc/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2", + "campaign": "redefinition" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-qualified2-redefinition/harness-20261005T193353Z-8e679faa4557441496d003c270c758dc/ralph_assemblies.py", + "sha256": "9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903", + "campaign": "redefinition" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/harness-20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "links_two" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/harness-20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "links_two" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/harness-20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "links_two" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/harness-20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "links_two" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-links_two/harness-20261005T184904Z-c20e18ff24264a6aba3500b2e548151e/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "links_two" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-link_single/harness-20261005T185302Z-1d461ff14b7242b7a06a0f2bdf310009/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "link_single" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-link_single/harness-20261005T185302Z-1d461ff14b7242b7a06a0f2bdf310009/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "link_single" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-link_single/harness-20261005T185302Z-1d461ff14b7242b7a06a0f2bdf310009/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "link_single" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-link_single/harness-20261005T185302Z-1d461ff14b7242b7a06a0f2bdf310009/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "link_single" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-link_single/harness-20261005T185302Z-1d461ff14b7242b7a06a0f2bdf310009/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "link_single" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_revolute/harness-20261005T185520Z-7629b43d51184c44b3308d4fd7ba60b6/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "regular_revolute" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_revolute/harness-20261005T185520Z-7629b43d51184c44b3308d4fd7ba60b6/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "regular_revolute" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_revolute/harness-20261005T185520Z-7629b43d51184c44b3308d4fd7ba60b6/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "regular_revolute" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_revolute/harness-20261005T185520Z-7629b43d51184c44b3308d4fd7ba60b6/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "regular_revolute" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_revolute/harness-20261005T185520Z-7629b43d51184c44b3308d4fd7ba60b6/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "regular_revolute" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_slider/harness-20261005T185743Z-50deee63bd124a8a82e2e141f8e1d97f/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "regular_slider" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_slider/harness-20261005T185743Z-50deee63bd124a8a82e2e141f8e1d97f/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "regular_slider" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_slider/harness-20261005T185743Z-50deee63bd124a8a82e2e141f8e1d97f/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "regular_slider" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_slider/harness-20261005T185743Z-50deee63bd124a8a82e2e141f8e1d97f/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "regular_slider" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_slider/harness-20261005T185743Z-50deee63bd124a8a82e2e141f8e1d97f/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "regular_slider" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_cylindrical/harness-20261005T185959Z-0d81b8bc1b684b638e534f9d31a45924/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "regular_cylindrical" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_cylindrical/harness-20261005T185959Z-0d81b8bc1b684b638e534f9d31a45924/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "regular_cylindrical" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_cylindrical/harness-20261005T185959Z-0d81b8bc1b684b638e534f9d31a45924/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "regular_cylindrical" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_cylindrical/harness-20261005T185959Z-0d81b8bc1b684b638e534f9d31a45924/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "regular_cylindrical" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_cylindrical/harness-20261005T185959Z-0d81b8bc1b684b638e534f9d31a45924/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "regular_cylindrical" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_pin_slot/harness-20261005T190224Z-092484950bab411c8a43dc59e52b5b06/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "regular_pin_slot" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_pin_slot/harness-20261005T190224Z-092484950bab411c8a43dc59e52b5b06/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "regular_pin_slot" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_pin_slot/harness-20261005T190224Z-092484950bab411c8a43dc59e52b5b06/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "regular_pin_slot" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_pin_slot/harness-20261005T190224Z-092484950bab411c8a43dc59e52b5b06/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "regular_pin_slot" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_pin_slot/harness-20261005T190224Z-092484950bab411c8a43dc59e52b5b06/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "regular_pin_slot" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/harness-20261005T190447Z-006259a5a8c9403186d263fe44b72f11/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "regular_planar" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/harness-20261005T190447Z-006259a5a8c9403186d263fe44b72f11/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "regular_planar" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/harness-20261005T190447Z-006259a5a8c9403186d263fe44b72f11/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "regular_planar" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/harness-20261005T190447Z-006259a5a8c9403186d263fe44b72f11/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "regular_planar" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/harness-20261005T190447Z-006259a5a8c9403186d263fe44b72f11/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "regular_planar" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_ball/harness-20261005T190730Z-bc86d24debe1409482935eca5510ee91/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "regular_ball" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_ball/harness-20261005T190730Z-bc86d24debe1409482935eca5510ee91/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "regular_ball" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_ball/harness-20261005T190730Z-bc86d24debe1409482935eca5510ee91/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "regular_ball" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_ball/harness-20261005T190730Z-bc86d24debe1409482935eca5510ee91/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "regular_ball" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_ball/harness-20261005T190730Z-bc86d24debe1409482935eca5510ee91/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "regular_ball" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-placement_frames/harness-20261005T191015Z-69428c7109b042c7906e9c64aedf66cb/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "placement_frames" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-placement_frames/harness-20261005T191015Z-69428c7109b042c7906e9c64aedf66cb/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "placement_frames" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-placement_frames/harness-20261005T191015Z-69428c7109b042c7906e9c64aedf66cb/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "placement_frames" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-placement_frames/harness-20261005T191015Z-69428c7109b042c7906e9c64aedf66cb/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "placement_frames" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-placement_frames/harness-20261005T191015Z-69428c7109b042c7906e9c64aedf66cb/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "placement_frames" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-root_attachment/harness-20261005T191442Z-2bc31ddc870b42d7ab1f7bb8cebe2c21/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "root_attachment" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-root_attachment/harness-20261005T191442Z-2bc31ddc870b42d7ab1f7bb8cebe2c21/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "root_attachment" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-root_attachment/harness-20261005T191442Z-2bc31ddc870b42d7ab1f7bb8cebe2c21/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "root_attachment" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-root_attachment/harness-20261005T191442Z-2bc31ddc870b42d7ab1f7bb8cebe2c21/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "root_attachment" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-root_attachment/harness-20261005T191442Z-2bc31ddc870b42d7ab1f7bb8cebe2c21/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "root_attachment" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-nested_context/harness-20261005T191613Z-9bd61c4ca7204627b0e73024d07b91df/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "nested_context" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-nested_context/harness-20261005T191613Z-9bd61c4ca7204627b0e73024d07b91df/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "nested_context" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-nested_context/harness-20261005T191613Z-9bd61c4ca7204627b0e73024d07b91df/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "nested_context" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-nested_context/harness-20261005T191613Z-9bd61c4ca7204627b0e73024d07b91df/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "nested_context" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-nested_context/harness-20261005T191613Z-9bd61c4ca7204627b0e73024d07b91df/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "nested_context" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/harness-20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "origins" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/harness-20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "origins" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/harness-20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "origins" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/harness-20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "origins" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-origins/harness-20261005T191905Z-834970947b3b4263922e4ef45f9b32f5/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "origins" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-asbuilt/harness-20261005T192234Z-56eabcd85f7e430aa4fda9620343ff72/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "asbuilt" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-asbuilt/harness-20261005T192234Z-56eabcd85f7e430aa4fda9620343ff72/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "asbuilt" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-asbuilt/harness-20261005T192234Z-56eabcd85f7e430aa4fda9620343ff72/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "asbuilt" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-asbuilt/harness-20261005T192234Z-56eabcd85f7e430aa4fda9620343ff72/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "asbuilt" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-asbuilt/harness-20261005T192234Z-56eabcd85f7e430aa4fda9620343ff72/ralph_assemblies.py", + "sha256": "63887179683952bb4103f9365b7284f4c28f822ff6565531133374d96e7aa607", + "campaign": "asbuilt" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/harness-20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "legacy_regressions" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/harness-20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "legacy_regressions" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/harness-20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "legacy_regressions" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-legacy-regressions/harness-20261005T193845Z-44b1eb902b1c408893aa227d8a2789c7/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2", + "campaign": "legacy_regressions" + }, + { + "name": "ralph_everyday.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-recovery-diagnostic/harness-20261005T193019Z-5385b04d1155442693645553582cbf8f/ralph_everyday.py", + "sha256": "b9fc306d311a29257301496186a56aa7bd0159f5bba35df4cde3f49b29d31c71", + "campaign": "recovery_diagnostic" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-recovery-diagnostic/harness-20261005T193019Z-5385b04d1155442693645553582cbf8f/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e", + "campaign": "recovery_diagnostic" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-recovery-diagnostic/harness-20261005T193019Z-5385b04d1155442693645553582cbf8f/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27", + "campaign": "recovery_diagnostic" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-recovery-diagnostic/harness-20261005T193019Z-5385b04d1155442693645553582cbf8f/fusion_harness.py", + "sha256": "504d32363f392c9877e6628395d62f97d93ad478bd9e25abee2a88e9d65ecfa8", + "campaign": "recovery_diagnostic" + }, + { + "name": "ralph_assemblies.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-recovery-diagnostic/harness-20261005T193019Z-5385b04d1155442693645553582cbf8f/ralph_assemblies.py", + "sha256": "9e39b06e8a819e3ce5b98020751258583d4bcd6eb2a2ed49e01053d6fa010903", + "campaign": "recovery_diagnostic" + } + ], + "offline": { + "status": "PASS", + "groups": [ + { + "group": "python", + "command": [ + "/usr/bin/python3", + "-m", + "unittest", + "discover", + "-s", + "tests", + "-p", + "test_*.py" + ], + "cwd": "/home/adom/project/fusion-assemblies-next", + "status": "PASS", + "coverageKind": "tests", + "returncode": 0, + "testCount": 340, + "seconds": 3.983 + }, + { + "group": "shadow", + "command": [ + "/usr/bin/python3", + "tools/shadow_check.py", + "/home/adom/project/fusion-assemblies-next/ab_client.py", + "/home/adom/project/fusion-assemblies-next/ad_client.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/AdomBridge.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/__init__.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/activity_palette.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/app_state.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/assembly_bom.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/close_document.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/cloud_documents.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/design_info.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/document_hygiene.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/document_info.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/electron_view.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/electronics.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/export.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/import_file.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/manufacturing.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/__init__.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/assemblies.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/assembly_state.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/bill_of_materials.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/core.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/exporting.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/features.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/geometry.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/joint_state.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/motion_links.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/operations.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/purchased.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/readback.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/regular_joints.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/sketch_edits.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/sketches.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/mechanical/transactions.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/modeling.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/open_electronics_file.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/open_lbr.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/parameters.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/physical_properties.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/screenshot.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/commands/silkscreen_capture.py", + "/home/adom/project/fusion-assemblies-next/addin/AdomBridge/http_server.py", + "/home/adom/project/fusion-assemblies-next/aps.py", + "/home/adom/project/fusion-assemblies-next/describe.py", + "/home/adom/project/fusion-assemblies-next/eagle_lbr.py", + "/home/adom/project/fusion-assemblies-next/fusion_detect.py", + "/home/adom/project/fusion-assemblies-next/fusion_helper.py", + "/home/adom/project/fusion-assemblies-next/fusion_ui.py", + "/home/adom/project/fusion-assemblies-next/handlers/__init__.py", + "/home/adom/project/fusion-assemblies-next/handlers/close_fusion.py", + "/home/adom/project/fusion-assemblies-next/handlers/dialog_classify.py", + "/home/adom/project/fusion-assemblies-next/handlers/dismiss_recovery.py", + "/home/adom/project/fusion-assemblies-next/handlers/fusion_ui.py", + "/home/adom/project/fusion-assemblies-next/handlers/open_design.py", + "/home/adom/project/fusion-assemblies-next/handlers/taskbar_overlay.py", + "/home/adom/project/fusion-assemblies-next/install_addin.py", + "/home/adom/project/fusion-assemblies-next/kicad_lbr.py", + "/home/adom/project/fusion-assemblies-next/library_bundle.py", + "/home/adom/project/fusion-assemblies-next/rust/bridge/src/attach_orient_block.py", + "/home/adom/project/fusion-assemblies-next/rust/bridge/src/inspect_bodies_script.py", + "/home/adom/project/fusion-assemblies-next/rust/bridge/src/make3d_orient_block.py", + "/home/adom/project/fusion-assemblies-next/rust/bridge/src/make3d_placement_block.py", + "/home/adom/project/fusion-assemblies-next/rust/bridge/src/pref_script.py", + "/home/adom/project/fusion-assemblies-next/rust/bridge/src/routing_planner.py", + "/home/adom/project/fusion-assemblies-next/rust/bridge/src/routing_script.py", + "/home/adom/project/fusion-assemblies-next/server.py", + "/home/adom/project/fusion-assemblies-next/tests/fusion_harness.py", + "/home/adom/project/fusion-assemblies-next/tests/ralph_assemblies.py", + "/home/adom/project/fusion-assemblies-next/tests/ralph_everyday.py", + "/home/adom/project/fusion-assemblies-next/tests/ralph_mechanical.py", + "/home/adom/project/fusion-assemblies-next/tests/ralph_support.py", + "/home/adom/project/fusion-assemblies-next/tests/run_verb_tests.py", + "/home/adom/project/fusion-assemblies-next/tests/test_bridge_contracts.py", + "/home/adom/project/fusion-assemblies-next/tests/test_document_hygiene.py", + "/home/adom/project/fusion-assemblies-next/tests/test_fusion_harness.py", + "/home/adom/project/fusion-assemblies-next/tests/test_http_server.py", + "/home/adom/project/fusion-assemblies-next/tests/test_live_feed_drain.py", + "/home/adom/project/fusion-assemblies-next/tests/test_mechanical.py", + "/home/adom/project/fusion-assemblies-next/tests/test_mechanical_assemblies.py", + "/home/adom/project/fusion-assemblies-next/tests/test_mechanical_everyday.py", + "/home/adom/project/fusion-assemblies-next/tests/test_mechanical_regular_joints.py", + "/home/adom/project/fusion-assemblies-next/tests/test_mechanical_transactions.py", + "/home/adom/project/fusion-assemblies-next/tests/test_portable_tree.py", + "/home/adom/project/fusion-assemblies-next/tests/test_ralph_assemblies.py", + "/home/adom/project/fusion-assemblies-next/tests/test_ralph_campaign.py", + "/home/adom/project/fusion-assemblies-next/tests/test_ralph_everyday.py", + "/home/adom/project/fusion-assemblies-next/tests/test_routing.py", + "/home/adom/project/fusion-assemblies-next/timings.py", + "/home/adom/project/fusion-assemblies-next/tools/abrun.py", + "/home/adom/project/fusion-assemblies-next/tools/adrun.py", + "/home/adom/project/fusion-assemblies-next/tools/check-bridge.py", + "/home/adom/project/fusion-assemblies-next/tools/check_portable_tree.py", + "/home/adom/project/fusion-assemblies-next/tools/freeze-contract.py", + "/home/adom/project/fusion-assemblies-next/tools/gen-readme-verbs.py", + "/home/adom/project/fusion-assemblies-next/tools/live_feed_drain.py", + "/home/adom/project/fusion-assemblies-next/tools/package-mechanical-dev.py", + "/home/adom/project/fusion-assemblies-next/tools/promote.py", + "/home/adom/project/fusion-assemblies-next/tools/shadow_check.py" + ], + "cwd": "/home/adom/project/fusion-assemblies-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": 2.025 + }, + { + "group": "portability", + "command": [ + "bash", + "tools/check-portable.sh" + ], + "cwd": "/home/adom/project/fusion-assemblies-next", + "status": "PASS", + "coverageKind": "static", + "returncode": 0, + "seconds": 0.266 + } + ], + "binaryBuildAndReuse": { + "binarySha256": "4e68cad7678736b5c659097d85e610f5928717aa451a851905541b127e1f9baf", + "binaryOrigin": "cp6-runtime-source-r2 fresh isolated Windows build, cp6-offline-r2/report.json", + "reuseReason": "Only Python regular-joint handler, tests/harness and docs changed from r3; all150 prior native binary inputs remain byte identical", + "checkedUnchangedInputs": [ + "rust/Cargo.lock", + "rust/Cargo.toml", + "rust/PORTING.md", + "rust/bridge/Cargo.toml", + "rust/core/Cargo.toml", + "rust/os-win/Cargo.toml", + "rust/lbr/Cargo.toml", + "rust/os-mac/Cargo.toml", + "rust/bridge/src/signin.rs", + "rust/bridge/src/routing_script.py", + "rust/bridge/src/etiquette.rs", + "rust/bridge/src/pref_script.py", + "rust/bridge/src/routing.rs", + "rust/bridge/src/mint.rs", + "rust/bridge/src/seat.rs", + "rust/bridge/src/attach_orient_block.py", + "rust/bridge/src/managed.rs", + "rust/bridge/src/timings.rs", + "rust/bridge/src/tour.rs", + "rust/bridge/src/addin.rs", + "rust/bridge/src/services.rs", + "rust/bridge/src/janitor.rs", + "rust/bridge/src/demo.rs", + "rust/bridge/src/testproject.rs", + "rust/bridge/src/aps_signin.rs", + "rust/bridge/src/addin_install.rs", + "rust/bridge/src/fusion_prefs.rs", + "rust/bridge/src/maintenance.rs", + "rust/bridge/src/orchestrations.rs", + "rust/bridge/src/prove.rs", + "rust/bridge/src/launch.rs", + "rust/bridge/src/fusionpath.rs", + "rust/bridge/src/epg_types.json", + "rust/bridge/src/palette.rs", + "rust/bridge/src/lbr_wrap_parts.json", + "rust/bridge/src/chainexec.rs", + "rust/bridge/src/epg_template.py", + "rust/bridge/src/lifecycle.rs", + "rust/bridge/src/make3d_template.py", + "rust/bridge/src/chains.rs", + "rust/bridge/src/make3d_orient_block.py", + "rust/bridge/src/make3d_placement_block.py", + "rust/bridge/src/livefeed.rs", + "rust/bridge/src/mcp.rs", + "rust/bridge/src/small_verbs.rs", + "rust/bridge/src/epg.rs", + "rust/bridge/src/main.rs", + "rust/bridge/src/inspect_bodies_script.py", + "rust/bridge/src/electronics.rs", + "rust/bridge/src/routing_planner.py", + "rust/bridge/src/attach_template.py", + "rust/bridge/src/readiness_exec.rs", + "rust/bridge/tests/fixtures/board_info_sample.json", + "rust/bridge/tests/golden/make3d_script.json", + "rust/bridge/tests/golden/mtp.json", + "rust/bridge/tests/golden/attach_script.json", + "rust/bridge/tests/golden/epg_script.json", + "rust/core/src/ab.rs", + "rust/core/src/aps.rs", + "rust/core/src/contract.rs", + "rust/core/src/dialogs.rs", + "rust/core/src/dialog_rules.json", + "rust/core/src/readiness_hints.json", + "rust/core/src/windows_facts.rs", + "rust/core/src/readiness.rs", + "rust/core/src/alerts.rs", + "rust/core/src/lib.rs", + "rust/core/src/host.rs", + "rust/core/tests/alerts_golden.rs", + "rust/core/tests/dialogs_golden.rs", + "rust/core/tests/readiness_golden.rs", + "rust/core/tests/golden/alerts.json", + "rust/core/tests/golden/dialog_titles.json", + "rust/core/tests/golden/readiness.json", + "rust/os-win/src/lib.rs", + "rust/lbr/src/lib.rs", + "rust/lbr/tests/golden.rs", + "rust/lbr/tests/fixtures/LAN7800.lbr", + "rust/lbr/tests/fixtures/Demo_Board.lbr", + "rust/lbr/tests/fixtures/syn_deadconnect.lbr", + "rust/lbr/tests/fixtures/syn_truncated.lbrx", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbr", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbrx", + "rust/lbr/tests/fixtures/syn_noteagle.lbrx", + "rust/lbr/tests/fixtures/IN-S63BTG.lbrx", + "rust/lbr/tests/fixtures/syn_duppad.lbrx", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbrx", + "rust/lbr/tests/fixtures/IN-S63BTG.lbr", + "rust/lbr/tests/fixtures/Demo_Board.bundle.zip", + "rust/lbr/tests/fixtures/LAN7800.lbrx", + "rust/lbr/tests/fixtures/syn_duppad.lbr", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbr", + "rust/lbr/tests/fixtures/CH340G.lbr", + "rust/lbr/tests/fixtures/CH340G.lbrx", + "rust/lbr/tests/fixtures/syn_truncated.lbr", + "rust/lbr/tests/fixtures/syn_deadconnect.lbrx", + "rust/lbr/tests/fixtures/syn_noteagle.lbr", + "rust/lbr/tests/fixtures/Demo_Board.lbrx", + "rust/lbr/tests/fixtures/zipslip.zip", + "rust/lbr/tests/golden/LAN7800.json", + "rust/lbr/tests/golden/ABM8-16.000MHZ-B2-T.json", + "rust/lbr/tests/golden/pair_parts.json", + "rust/lbr/tests/golden/IN-S63BTG.json", + "rust/lbr/tests/golden/STM32L431RCT6TR.json", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbr", + "rust/lbr/tests/golden/CH340G.json", + "rust/lbr/tests/golden/preflight_and_parts.json", + "rust/lbr/tests/golden/Demo_Board.json", + "rust/lbr/tests/golden/Demo_Board.metadata.json", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbrx", + "rust/lbr/tests/golden/Demo_Board.bound5.lbr", + "rust/lbr/tests/golden/Demo_Board.bound5.lbrx", + "rust/lbr/tests/golden/bundle_files.json", + "rust/lbr/tests/golden/Demo_Board.bound3.lbr", + "rust/lbr/tests/golden/Demo_Board.bound3.lbrx", + "rust/lbr/tests/golden/inject_bindings.json", + "rust/lbr/tests/golden/split/index.json", + "rust/lbr/tests/golden/split/LAN7800.lbr", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbr", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbr", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbrx", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbrx", + "rust/lbr/tests/golden/split/IN-S63BTG.lbrx", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbr", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbrx", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbrx", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbr", + "rust/lbr/tests/golden/split/IN-S63BTG.lbr", + "rust/lbr/tests/golden/split/LAN7800.lbrx", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbr", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbr", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbrx", + "rust/lbr/tests/golden/split/CH340G.lbr", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbr", + "rust/lbr/tests/golden/split/CH340G.lbrx", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbrx", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbrx", + "rust/os-mac/src/lib.rs", + "dashboard/Cargo.lock", + "dashboard/.gitignore", + "dashboard/Cargo.toml", + "dashboard/src/demo_audio.rs", + "dashboard/src/main.rs", + "dashboard/ui/index.html", + "dashboard/ui/quick-actions.html", + "dashboard/ui/fusion-icon.png", + "dashboard/ui/vendor/newbie-panel.js", + "contracts/describe.json", + "describe.py", + "BRIDGE_VERSION" + ], + "newSourceFileCount": 936, + "changedSinceR3": [ + "CHANGELOG.md", + "docs/MECHANICAL.md", + "tests/ralph_assemblies.py", + "tests/test_ralph_assemblies.py", + "tests/test_mechanical_regular_joints.py", + "addin/AdomBridge/commands/mechanical/regular_joints.py" + ] + } + }, + "package": { + "version": "1.12.0-dev.6", + "path": "/tmp/fusion-mechanical-1.12.0-dev.6-r4.zip", + "fileCount": 56, + "bytes": 4167439, + "sha256": "1fa72a886ef9d3c309515e4f022c89ecce11b0009d92c748adb06e1a95681ca2" + }, + "installed": { + "verifiedCopies": 203, + "devPinned": true, + "version": "1.12.0-dev.6" + }, + "productSource": { + "status": "PASS", + "source": "/home/adom/project/fusion-assemblies-next", + "installedManifest": "cp6-runtime-manifest-r4.json", + "checkedNonbinaryPayloadFiles": 55, + "binaryProof": "cp6-r4-binary-reuse-proof.json", + "changesOutsideProduct": "Reviewed runner/client plus documentation; no installed product source changed" + }, + "foregroundObservation": { + "status": "OBSERVED_BACKGROUND", + "checks": { + "hostExact": true, + "processStable": true, + "sameInteractiveSession": true, + "hookRemoved": true, + "noErrorOrOverflow": true, + "nonzeroForegroundRead": true, + "fusionNeverForegroundObserved": true, + "boundedObservation": true, + "samplingLoopExecuted": true, + "wallClockCorrelationFound": true + }, + "observationWindowUtc": [ + "2026-10-05T19:05:12.6214961Z", + "2026-10-05T19:05:57.6281886Z" + ], + "samples": 2912, + "foregroundEvents": 0, + "fusionPid": 71196, + "scope": "No Fusion foreground observed by this observer on its current desktop during the bounded 45-second window. Same Windows session does not independently attest shared desktop identity. Native call times are wall-clock-correlated only. This does not prove continuous sampling or campaign-wide background behavior. Observer sent no input and made no focus changes.", + "wallClockCorrelatedNativeCalls": [ + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0040-fusion_mechanical.json", + "sha256": "af561bea0b75934088b62c7384118de16e86739adbab830fe16e31b68024771e", + "verb": "fusion_mechanical", + "operation": "regular_joint_create", + "startedAt": 1791227136.2920878, + "finishedAt": 1791227137.725886, + "semanticSuccess": true + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0021-fusion_mechanical.json", + "sha256": "fd67186302333981ddc0fd762066fb395345cad7f4b4176964c99a86bc26dbec", + "verb": "fusion_mechanical", + "operation": "component_create", + "startedAt": 1791227115.8916862, + "finishedAt": 1791227116.8320851, + "semanticSuccess": true + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0024-fusion_mechanical.json", + "sha256": "0965f0237f3cd0e5aa11d6f6a0a9f9898d60e871aeef39c33fa4d68cc5005e7e", + "verb": "fusion_mechanical", + "operation": "sketch_create", + "startedAt": 1791227118.6039429, + "finishedAt": 1791227119.5411582, + "semanticSuccess": true + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0048-fusion_mechanical.json", + "sha256": "019812664f35cacd520858d28fd8f9074cacbdb351d862a4b67b4baf6cd24599", + "verb": "fusion_mechanical", + "operation": "joint_edit", + "startedAt": 1791227148.774446, + "finishedAt": 1791227151.111336, + "semanticSuccess": false + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0018-fusion_mechanical.json", + "sha256": "9869a57acc76c6b4cafd3d79def8def65f2c1e4fed59ea5656f9474f9fde9c5a", + "verb": "fusion_mechanical", + "operation": "feature_create", + "startedAt": 1791227113.1731217, + "finishedAt": 1791227114.1115317, + "semanticSuccess": true + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0025-fusion_mechanical.json", + "sha256": "5562e93b651e33c0ddbb5934c2e1a3b7152dd0e075eba1138343f34128e5a720", + "verb": "fusion_mechanical", + "operation": "sketch_geometry", + "startedAt": 1791227119.5466113, + "finishedAt": 1791227120.545181, + "semanticSuccess": true + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0026-fusion_mechanical.json", + "sha256": "1106230e0ccfd47b10f77f2fadf778b1f75edb6ef70e1b53a78eca3396717912", + "verb": "fusion_mechanical", + "operation": "feature_create", + "startedAt": 1791227120.5519552, + "finishedAt": 1791227121.639866, + "semanticSuccess": true + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0052-fusion_mechanical.json", + "sha256": "68b30ea977a8048385795bc6088eedb9e3813db3475dc02c6ae6586cfd91b0d9", + "verb": "fusion_mechanical", + "operation": "joint_edit", + "startedAt": 1791227154.911455, + "finishedAt": 1791227156.078179, + "semanticSuccess": true + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0030-fusion_mechanical.json", + "sha256": "fe41bbdf2cba7c7cb927eccb429150cef18f77a01aebde2d52489db922b9f7b3", + "verb": "fusion_mechanical", + "operation": "occurrence_update", + "startedAt": 1791227124.4357092, + "finishedAt": 1791227125.4091537, + "semanticSuccess": true + }, + { + "group": "cp6-r4-final-regular_planar", + "call": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp6-r4-final-regular_planar/calls/0044-fusion_mechanical.json", + "sha256": "f64cc81bca29c13798742638ab7ada6d5ad9e082f836c66c093bc2776da62bf6", + "verb": "fusion_mechanical", + "operation": "joint_edit", + "startedAt": 1791227142.6202374, + "finishedAt": 1791227143.82297, + "semanticSuccess": true + } + ], + "clockAlignment": "UNVERIFIED: observer Windows UTC and harness container wall clock have no measured offset bound", + "samplingQualification": "Loop executed 2912 samples; per-sample timestamps and maximum gaps were not recorded." + }, + "visual": { + "status": "PASS", + "viewportArtifactRecords": 20, + "uniqueReviewedImages": 18 + }, + "limitations": [ + "Finite native options, not exhaustive solver or whole-bridge acceptance.", + "Main acceptance is an explicit whole-group composite; original failures remain visible.", + "Assertion totals include expected refusals, persistence and cleanup checks.", + "Capture Position conflicts are refused with measured rollback; no history repair is attempted.", + "Dashboard compilation only; macOS, electronics/cloud/wiki UI, linked components, configuration writes, rendering and animation are outside this result." + ] +} diff --git a/docs/mechanical-verification/cp8/accepted-scope.json b/docs/mechanical-verification/cp8/accepted-scope.json new file mode 100644 index 0000000..0298ece --- /dev/null +++ b/docs/mechanical-verification/cp8/accepted-scope.json @@ -0,0 +1,17 @@ +{ + "ordinary": "PASS (35 checks)", + "busyMainThread": "QUALIFIED_PASS (unchanged authoritative bytes; original checker FAIL retained)", + "terminalHistoryAfterGracefulRestart": "QUALIFIED_PASS (three exact records; original postcheck harness FAIL retained)", + "staleSessionMutation": "PASS (session_mismatch; complete current model inspection and historical status unchanged)", + "nativeInterruptedExecution": "NOT_RUN", + "nativeDiskOrCommitFaults": "NOT_RUN", + "rendering": "NOT_IMPLEMENTED", + "configurationWrites": "DISABLED", + "captureSinceUserCorrection": { + "localFinalViewports": 1, + "shotlogUploads": 0, + "continuousCapture": false + }, + "runtimeVersion": "1.12.0-dev.8", + "fusionVersion": "2705.1.30" +} diff --git a/docs/mechanical-verification/cp8/busy/calls/0001-run_script.json b/docs/mechanical-verification/cp8/busy/calls/0001-run_script.json new file mode 100644 index 0000000..710cf05 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0001-run_script.json @@ -0,0 +1,31 @@ +{ + "target": "adom_drew2", + "verb": "run_script", + "args": { + "interpreter": "powershell", + "scriptB64": "CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcSA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUp5ZFc1SlpDSTZJQ0l5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGaklpd2dJbk5sYzNOcGIyNUpaQ0k2SUNJell6VmxOamMwTkMxa01XRmpMVFF5TnpZdE9USTJOQzFpTURWaE9UWmpOVEZsTTJRaUxDQWlhRzl6ZENJNklDSkJSRTlOWDBSU1JWY3lJaXdnSW5CcFpDSTZJRFF4TnpJNExDQWljMk55WVhSamFDSTZJQ0pET2k5VmMyVnljeTlrY21WM0wwRndjRVJoZEdFdlRHOWpZV3d2VkdWdGNDOWhaRzl0TFdaMWMybHZiaTF5WVd4d2FDOHlNREkyTVRBd05WUXlNVEF6TVRCYUxUVTJPR1psTnpnMk9XUXdZalF4WkRWaE9ETXdNVFE0TVRGbVpURTNNR0ZqSWl3Z0ltNXZibU5sSWpvZ0lqYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwSWl3Z0ltOXlhV2RwYm1Gc0lqb2dleUpqY21WaGRHbHZia2xrSWpvZ0lqY3dZakpqTlRjMUxXWTRNekF0TkRjMU1TMDVaamc0TFRKbU1XWXpZV0k1TVdaaU1TSXNJQ0p0YjJScFptbGxaQ0k2SUdaaGJITmxMQ0FpYm1GdFpTSTZJQ0pWYm5ScGRHeGxaQ0lzSUNKellYWmxaQ0k2SUdaaGJITmxmU3dnSW5CaGRHaHpJam9nZXlKbGJuUmxjbVZrSWpvZ0lrTTZYRnhWYzJWeWMxeGNaSEpsZDF4Y1FYQndSR0YwWVZ4Y1RHOWpZV3hjWEZSbGJYQmNYR0ZrYjIwdFpuVnphVzl1TFhKaGJIQm9YRnd5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGalhGeGlkWE41TFRjMU56VmpOV0ppTjJJellqUTNOR0ZpTmpJeFpqVTFaRFkwT1RReE5tRTBYRnhsYm5SbGNtVmtMbXB6YjI0aUxDQWlaWGhwZEdWa0lqb2dJa002WEZ4VmMyVnljMXhjWkhKbGQxeGNRWEJ3UkdGMFlWeGNURzlqWVd4Y1hGUmxiWEJjWEdGa2IyMHRablZ6YVc5dUxYSmhiSEJvWEZ3eU1ESTJNVEF3TlZReU1UQXpNVEJhTFRVMk9HWmxOemcyT1dRd1lqUXhaRFZoT0RNd01UUTRNVEZtWlRFM01HRmpYRnhpZFhONUxUYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwWEZ4bGVHbDBaV1F1YW5OdmJpSjlMQ0FpYlc5a1pTSTZJQ0pwYm1sMGFXRnNJbjA9JykpIHwgQ29udmVydEZyb20tSnNvbgogIGlmIChbRW52aXJvbm1lbnRdOjpNYWNoaW5lTmFtZSAtaW5lICRxLmhvc3QpIHsgdGhyb3cgJ0hvc3QgaWRlbnRpdHkgZGlmZmVycycgfQogICRwID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX1Byb2Nlc3MgLUZpbHRlciAoJ1Byb2Nlc3NJZD0nICsgW2ludF0kcS5waWQpCiAgaWYgKC1ub3QgJHAgLW9yICRwLk5hbWUgLWluZSAnRnVzaW9uMzYwLmV4ZScpIHsgdGhyb3cgJ0V4cGVjdGVkIEZ1c2lvbiBwcm9jZXNzIGlzIGFic2VudCcgfQogICRzY3JhdGNoID0gW0lPLlBhdGhdOjpHZXRGdWxsUGF0aChbc3RyaW5nXSRxLnNjcmF0Y2gpCiAgaWYgKFtJTy5QYXRoXTo6R2V0RmlsZU5hbWUoJHNjcmF0Y2gpIC1jbmUgJHEucnVuSWQpIHsgdGhyb3cgJ1NjcmF0Y2ggcnVuIGlkZW50aXR5IGRpZmZlcnMnIH0KICAkd2FsayA9IEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyYXRjaAogIHdoaWxlICgkbnVsbCAtbmUgJHdhbGspIHsKICAgIGlmICgoJHdhbGsuQXR0cmlidXRlcyAtYmFuZCBbSU8uRmlsZUF0dHJpYnV0ZXNdOjpSZXBhcnNlUG9pbnQpIC1uZSAwKSB7IHRocm93ICdTY3JhdGNoIHRyYXZlcnNlcyBhIHJlcGFyc2UgcG9pbnQnIH0KICAgICR3YWxrID0gJHdhbGsuUGFyZW50CiAgfQogIGZ1bmN0aW9uIFJlYWQtTWFya2VyKFtzdHJpbmddJHBhdGgpIHsKICAgICRmdWxsID0gW0lPLlBhdGhdOjpHZXRGdWxsUGF0aCgkcGF0aCkKICAgICRmb2xkZXIgPSBbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJGZ1bGwpCiAgICBpZiAoW0lPLlBhdGhdOjpHZXREaXJlY3RvcnlOYW1lKCRmb2xkZXIpIC1pbmUgJHNjcmF0Y2ggLW9yIFtJTy5QYXRoXTo6R2V0RmlsZU5hbWUoJGZvbGRlcikgLWNuZSAoJ2J1c3ktJyArICRxLm5vbmNlKSkgeyB0aHJvdyAnTWFya2VyIGVzY2FwZWQgb3duZWQgc2NyYXRjaCcgfQogICAgZm9yZWFjaCAoJGl0ZW0gaW4gQCgoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmb2xkZXIpLCAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmdWxsKSkpIHsKICAgICAgaWYgKCgkaXRlbS5BdHRyaWJ1dGVzIC1iYW5kIFtJTy5GaWxlQXR0cmlidXRlc106OlJlcGFyc2VQb2ludCkgLW5lIDApIHsgdGhyb3cgJ01hcmtlciBpcyBsaW5rZWQnIH0KICAgIH0KICAgICRmaWxlID0gR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmdWxsCiAgICBpZiAoJGZpbGUuTGVuZ3RoIC1ndCA0MDk2IC1vciAkZmlsZS5MZW5ndGggLWxlIDApIHsgdGhyb3cgJ01hcmtlciBzaXplIGludmFsaWQnIH0KICAgICRieXRlcyA9IFtJTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRmdWxsKQogICAgaWYgKCRieXRlcy5MZW5ndGggLWd0IDQwOTYpIHsgdGhyb3cgJ01hcmtlciBleGNlZWRlZCByZWFkIGJ1ZGdldCcgfQogICAgJHNoYSA9IFtTZWN1cml0eS5DcnlwdG9ncmFwaHkuU0hBMjU2XTo6Q3JlYXRlKCkKICAgIHRyeSB7ICRoYXNoID0gW0JpdENvbnZlcnRlcl06OlRvU3RyaW5nKCRzaGEuQ29tcHV0ZUhhc2goJGJ5dGVzKSkuUmVwbGFjZSgnLScsJycpLlRvTG93ZXJJbnZhcmlhbnQoKSB9IGZpbmFsbHkgeyAkc2hhLkRpc3Bvc2UoKSB9CiAgICByZXR1cm4gQHsgdmFsdWU9KFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoJGJ5dGVzKSB8IENvbnZlcnRGcm9tLUpzb24pOyBzaGEyNTY9JGhhc2g7IGJ5dGVzPSRieXRlcy5MZW5ndGg7IHJhd0Jhc2U2ND1bQ29udmVydF06OlRvQmFzZTY0U3RyaW5nKCRieXRlcykgfQogIH0KICAkdmFsdWVzID0gQHt9CiAgaWYgKCRxLm1vZGUgLWVxICdpbml0aWFsJykgewogICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggKFtJTy5QYXRoXTo6R2V0RGlyZWN0b3J5TmFtZSgkcS5wYXRocy5lbnRlcmVkKSkpIHsgdGhyb3cgJ1Byb2JlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cycgfQogIH0KICBpZiAoJHEubW9kZSAtZXEgJ2VudGVyZWQnKSB7CiAgICAkd2FpdCA9IFtEaWFnbm9zdGljcy5TdG9wd2F0Y2hdOjpTdGFydE5ldygpCiAgICB3aGlsZSAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcS5wYXRocy5lbnRlcmVkKSkgewogICAgICBpZiAoJHdhaXQuRWxhcHNlZC5Ub3RhbFNlY29uZHMgLWdlIDUpIHsgdGhyb3cgJ0VudGVyZWQgbWFya2VyIHdhcyBub3Qgb2JzZXJ2ZWQgd2l0aGluIGZpdmUgc2Vjb25kcycgfQogICAgICBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDI1CiAgICB9CiAgICAkdmFsdWVzLmVudGVyZWQgPSBSZWFkLU1hcmtlciAkcS5wYXRocy5lbnRlcmVkCiAgfQogIGlmICgkcS5tb2RlIC1lcSAnZmluYWwnKSB7CiAgICAkdmFsdWVzLmVudGVyZWQgPSBSZWFkLU1hcmtlciAkcS5wYXRocy5lbnRlcmVkCiAgICAkdmFsdWVzLmV4aXRlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmV4aXRlZAogIH0KICAkd2FsbCA9IChbRGF0ZVRpbWVPZmZzZXRdOjpVdGNOb3cgLSBbRGF0ZVRpbWVPZmZzZXRdJzE5NzAtMDEtMDFUMDA6MDA6MDBaJykuVG90YWxTZWNvbmRzCiAgaWYgKC1ub3QgW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OklzSGlnaFJlc29sdXRpb24pIHsgdGhyb3cgJ1N0b3B3YXRjaCBpcyBub3QgdXNpbmcgdGhlIGhpZ2gtcmVzb2x1dGlvbiBwZXJmb3JtYW5jZSBjb3VudGVyJyB9CiAgJHRpY2tzID0gW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OkdldFRpbWVzdGFtcCgpCiAgJGFnYWluID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX1Byb2Nlc3MgLUZpbHRlciAoJ1Byb2Nlc3NJZD0nICsgW2ludF0kcS5waWQpCiAgaWYgKC1ub3QgJGFnYWluIC1vciAkYWdhaW4uQ3JlYXRpb25EYXRlIC1uZSAkcC5DcmVhdGlvbkRhdGUgLW9yICRhZ2Fpbi5FeGVjdXRhYmxlUGF0aCAtaW5lICRwLkV4ZWN1dGFibGVQYXRoKSB7IHRocm93ICdOYXRpdmUgcHJvY2VzcyBjaGFuZ2VkIGR1cmluZyBob3N0IHJlYWQnIH0KICBAeyBzdWNjZXNzPSR0cnVlOyBob3N0PVtFbnZpcm9ubWVudF06Ok1hY2hpbmVOYW1lOyBwaWQ9W2ludF0kcS5waWQ7IHByb2Nlc3NDcmVhdGVkVXRjPSRwLkNyZWF0aW9uRGF0ZS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygnbycpOwogICAgIGV4ZWN1dGFibGVQYXRoPSRwLkV4ZWN1dGFibGVQYXRoOyB3YWxsPSR3YWxsOyBtYXJrZXJzPSR2YWx1ZXM7IGNvdW50ZXJLaW5kPSd3aW5kb3dzX3FwYyc7IGNvdW50ZXJUaWNrcz0kdGlja3M7CiAgICAgY291bnRlckZyZXF1ZW5jeT1bRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6RnJlcXVlbmN5OyBoaWdoUmVzb2x1dGlvbj0kdHJ1ZSB9IHwgQ29udmVydFRvLUpzb24gLURlcHRoIDEyIC1Db21wcmVzcwp9IGNhdGNoIHsgW0NvbnNvbGVdOjpFcnJvci5Xcml0ZUxpbmUoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpOyBleGl0IDEgfQo=", + "timeoutSeconds": 12, + "reason": "Read exact owned busy-probe markers and native host clock without changing Fusion" + }, + "requestJson": "{\"interpreter\": \"powershell\", \"scriptB64\": \"CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcSA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUp5ZFc1SlpDSTZJQ0l5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGaklpd2dJbk5sYzNOcGIyNUpaQ0k2SUNJell6VmxOamMwTkMxa01XRmpMVFF5TnpZdE9USTJOQzFpTURWaE9UWmpOVEZsTTJRaUxDQWlhRzl6ZENJNklDSkJSRTlOWDBSU1JWY3lJaXdnSW5CcFpDSTZJRFF4TnpJNExDQWljMk55WVhSamFDSTZJQ0pET2k5VmMyVnljeTlrY21WM0wwRndjRVJoZEdFdlRHOWpZV3d2VkdWdGNDOWhaRzl0TFdaMWMybHZiaTF5WVd4d2FDOHlNREkyTVRBd05WUXlNVEF6TVRCYUxUVTJPR1psTnpnMk9XUXdZalF4WkRWaE9ETXdNVFE0TVRGbVpURTNNR0ZqSWl3Z0ltNXZibU5sSWpvZ0lqYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwSWl3Z0ltOXlhV2RwYm1Gc0lqb2dleUpqY21WaGRHbHZia2xrSWpvZ0lqY3dZakpqTlRjMUxXWTRNekF0TkRjMU1TMDVaamc0TFRKbU1XWXpZV0k1TVdaaU1TSXNJQ0p0YjJScFptbGxaQ0k2SUdaaGJITmxMQ0FpYm1GdFpTSTZJQ0pWYm5ScGRHeGxaQ0lzSUNKellYWmxaQ0k2SUdaaGJITmxmU3dnSW5CaGRHaHpJam9nZXlKbGJuUmxjbVZrSWpvZ0lrTTZYRnhWYzJWeWMxeGNaSEpsZDF4Y1FYQndSR0YwWVZ4Y1RHOWpZV3hjWEZSbGJYQmNYR0ZrYjIwdFpuVnphVzl1TFhKaGJIQm9YRnd5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGalhGeGlkWE41TFRjMU56VmpOV0ppTjJJellqUTNOR0ZpTmpJeFpqVTFaRFkwT1RReE5tRTBYRnhsYm5SbGNtVmtMbXB6YjI0aUxDQWlaWGhwZEdWa0lqb2dJa002WEZ4VmMyVnljMXhjWkhKbGQxeGNRWEJ3UkdGMFlWeGNURzlqWVd4Y1hGUmxiWEJjWEdGa2IyMHRablZ6YVc5dUxYSmhiSEJvWEZ3eU1ESTJNVEF3TlZReU1UQXpNVEJhTFRVMk9HWmxOemcyT1dRd1lqUXhaRFZoT0RNd01UUTRNVEZtWlRFM01HRmpYRnhpZFhONUxUYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwWEZ4bGVHbDBaV1F1YW5OdmJpSjlMQ0FpYlc5a1pTSTZJQ0pwYm1sMGFXRnNJbjA9JykpIHwgQ29udmVydEZyb20tSnNvbgogIGlmIChbRW52aXJvbm1lbnRdOjpNYWNoaW5lTmFtZSAtaW5lICRxLmhvc3QpIHsgdGhyb3cgJ0hvc3QgaWRlbnRpdHkgZGlmZmVycycgfQogICRwID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX1Byb2Nlc3MgLUZpbHRlciAoJ1Byb2Nlc3NJZD0nICsgW2ludF0kcS5waWQpCiAgaWYgKC1ub3QgJHAgLW9yICRwLk5hbWUgLWluZSAnRnVzaW9uMzYwLmV4ZScpIHsgdGhyb3cgJ0V4cGVjdGVkIEZ1c2lvbiBwcm9jZXNzIGlzIGFic2VudCcgfQogICRzY3JhdGNoID0gW0lPLlBhdGhdOjpHZXRGdWxsUGF0aChbc3RyaW5nXSRxLnNjcmF0Y2gpCiAgaWYgKFtJTy5QYXRoXTo6R2V0RmlsZU5hbWUoJHNjcmF0Y2gpIC1jbmUgJHEucnVuSWQpIHsgdGhyb3cgJ1NjcmF0Y2ggcnVuIGlkZW50aXR5IGRpZmZlcnMnIH0KICAkd2FsayA9IEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyYXRjaAogIHdoaWxlICgkbnVsbCAtbmUgJHdhbGspIHsKICAgIGlmICgoJHdhbGsuQXR0cmlidXRlcyAtYmFuZCBbSU8uRmlsZUF0dHJpYnV0ZXNdOjpSZXBhcnNlUG9pbnQpIC1uZSAwKSB7IHRocm93ICdTY3JhdGNoIHRyYXZlcnNlcyBhIHJlcGFyc2UgcG9pbnQnIH0KICAgICR3YWxrID0gJHdhbGsuUGFyZW50CiAgfQogIGZ1bmN0aW9uIFJlYWQtTWFya2VyKFtzdHJpbmddJHBhdGgpIHsKICAgICRmdWxsID0gW0lPLlBhdGhdOjpHZXRGdWxsUGF0aCgkcGF0aCkKICAgICRmb2xkZXIgPSBbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJGZ1bGwpCiAgICBpZiAoW0lPLlBhdGhdOjpHZXREaXJlY3RvcnlOYW1lKCRmb2xkZXIpIC1pbmUgJHNjcmF0Y2ggLW9yIFtJTy5QYXRoXTo6R2V0RmlsZU5hbWUoJGZvbGRlcikgLWNuZSAoJ2J1c3ktJyArICRxLm5vbmNlKSkgeyB0aHJvdyAnTWFya2VyIGVzY2FwZWQgb3duZWQgc2NyYXRjaCcgfQogICAgZm9yZWFjaCAoJGl0ZW0gaW4gQCgoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmb2xkZXIpLCAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmdWxsKSkpIHsKICAgICAgaWYgKCgkaXRlbS5BdHRyaWJ1dGVzIC1iYW5kIFtJTy5GaWxlQXR0cmlidXRlc106OlJlcGFyc2VQb2ludCkgLW5lIDApIHsgdGhyb3cgJ01hcmtlciBpcyBsaW5rZWQnIH0KICAgIH0KICAgICRmaWxlID0gR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmdWxsCiAgICBpZiAoJGZpbGUuTGVuZ3RoIC1ndCA0MDk2IC1vciAkZmlsZS5MZW5ndGggLWxlIDApIHsgdGhyb3cgJ01hcmtlciBzaXplIGludmFsaWQnIH0KICAgICRieXRlcyA9IFtJTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRmdWxsKQogICAgaWYgKCRieXRlcy5MZW5ndGggLWd0IDQwOTYpIHsgdGhyb3cgJ01hcmtlciBleGNlZWRlZCByZWFkIGJ1ZGdldCcgfQogICAgJHNoYSA9IFtTZWN1cml0eS5DcnlwdG9ncmFwaHkuU0hBMjU2XTo6Q3JlYXRlKCkKICAgIHRyeSB7ICRoYXNoID0gW0JpdENvbnZlcnRlcl06OlRvU3RyaW5nKCRzaGEuQ29tcHV0ZUhhc2goJGJ5dGVzKSkuUmVwbGFjZSgnLScsJycpLlRvTG93ZXJJbnZhcmlhbnQoKSB9IGZpbmFsbHkgeyAkc2hhLkRpc3Bvc2UoKSB9CiAgICByZXR1cm4gQHsgdmFsdWU9KFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoJGJ5dGVzKSB8IENvbnZlcnRGcm9tLUpzb24pOyBzaGEyNTY9JGhhc2g7IGJ5dGVzPSRieXRlcy5MZW5ndGg7IHJhd0Jhc2U2ND1bQ29udmVydF06OlRvQmFzZTY0U3RyaW5nKCRieXRlcykgfQogIH0KICAkdmFsdWVzID0gQHt9CiAgaWYgKCRxLm1vZGUgLWVxICdpbml0aWFsJykgewogICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggKFtJTy5QYXRoXTo6R2V0RGlyZWN0b3J5TmFtZSgkcS5wYXRocy5lbnRlcmVkKSkpIHsgdGhyb3cgJ1Byb2JlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cycgfQogIH0KICBpZiAoJHEubW9kZSAtZXEgJ2VudGVyZWQnKSB7CiAgICAkd2FpdCA9IFtEaWFnbm9zdGljcy5TdG9wd2F0Y2hdOjpTdGFydE5ldygpCiAgICB3aGlsZSAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcS5wYXRocy5lbnRlcmVkKSkgewogICAgICBpZiAoJHdhaXQuRWxhcHNlZC5Ub3RhbFNlY29uZHMgLWdlIDUpIHsgdGhyb3cgJ0VudGVyZWQgbWFya2VyIHdhcyBub3Qgb2JzZXJ2ZWQgd2l0aGluIGZpdmUgc2Vjb25kcycgfQogICAgICBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDI1CiAgICB9CiAgICAkdmFsdWVzLmVudGVyZWQgPSBSZWFkLU1hcmtlciAkcS5wYXRocy5lbnRlcmVkCiAgfQogIGlmICgkcS5tb2RlIC1lcSAnZmluYWwnKSB7CiAgICAkdmFsdWVzLmVudGVyZWQgPSBSZWFkLU1hcmtlciAkcS5wYXRocy5lbnRlcmVkCiAgICAkdmFsdWVzLmV4aXRlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmV4aXRlZAogIH0KICAkd2FsbCA9IChbRGF0ZVRpbWVPZmZzZXRdOjpVdGNOb3cgLSBbRGF0ZVRpbWVPZmZzZXRdJzE5NzAtMDEtMDFUMDA6MDA6MDBaJykuVG90YWxTZWNvbmRzCiAgaWYgKC1ub3QgW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OklzSGlnaFJlc29sdXRpb24pIHsgdGhyb3cgJ1N0b3B3YXRjaCBpcyBub3QgdXNpbmcgdGhlIGhpZ2gtcmVzb2x1dGlvbiBwZXJmb3JtYW5jZSBjb3VudGVyJyB9CiAgJHRpY2tzID0gW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OkdldFRpbWVzdGFtcCgpCiAgJGFnYWluID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX1Byb2Nlc3MgLUZpbHRlciAoJ1Byb2Nlc3NJZD0nICsgW2ludF0kcS5waWQpCiAgaWYgKC1ub3QgJGFnYWluIC1vciAkYWdhaW4uQ3JlYXRpb25EYXRlIC1uZSAkcC5DcmVhdGlvbkRhdGUgLW9yICRhZ2Fpbi5FeGVjdXRhYmxlUGF0aCAtaW5lICRwLkV4ZWN1dGFibGVQYXRoKSB7IHRocm93ICdOYXRpdmUgcHJvY2VzcyBjaGFuZ2VkIGR1cmluZyBob3N0IHJlYWQnIH0KICBAeyBzdWNjZXNzPSR0cnVlOyBob3N0PVtFbnZpcm9ubWVudF06Ok1hY2hpbmVOYW1lOyBwaWQ9W2ludF0kcS5waWQ7IHByb2Nlc3NDcmVhdGVkVXRjPSRwLkNyZWF0aW9uRGF0ZS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygnbycpOwogICAgIGV4ZWN1dGFibGVQYXRoPSRwLkV4ZWN1dGFibGVQYXRoOyB3YWxsPSR3YWxsOyBtYXJrZXJzPSR2YWx1ZXM7IGNvdW50ZXJLaW5kPSd3aW5kb3dzX3FwYyc7IGNvdW50ZXJUaWNrcz0kdGlja3M7CiAgICAgY291bnRlckZyZXF1ZW5jeT1bRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6RnJlcXVlbmN5OyBoaWdoUmVzb2x1dGlvbj0kdHJ1ZSB9IHwgQ29udmVydFRvLUpzb24gLURlcHRoIDEyIC1Db21wcmVzcwp9IGNhdGNoIHsgW0NvbnNvbGVdOjpFcnJvci5Xcml0ZUxpbmUoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpOyBleGl0IDEgfQo=\", \"timeoutSeconds\": 12, \"reason\": \"Read exact owned busy-probe markers and native host clock without changing Fusion\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234609.7131336, + "mutating": false, + "stdout": "{\n \"durationMs\": 1374,\n \"exitCode\": 0,\n \"ok\": true,\n \"schemaVersion\": 1,\n \"status\": \"ok\",\n \"stderr\": \"\",\n \"stdout\": \"{\\\"markers\\\":{},\\\"counterKind\\\":\\\"windows_qpc\\\",\\\"executablePath\\\":\\\"C:\\\\\\\\Users\\\\\\\\drew\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Autodesk\\\\\\\\webdeploy\\\\\\\\production\\\\\\\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\\\\\\\Fusion360.exe\\\",\\\"highResolution\\\":true,\\\"counterFrequency\\\":10000000,\\\"processCreatedUtc\\\":\\\"2026-10-05T21:01:46.6536380Z\\\",\\\"success\\\":true,\\\"counterTicks\\\":3663021206800,\\\"host\\\":\\\"ADOM_DREW2\\\",\\\"pid\\\":41728,\\\"wall\\\":1791234610.6331239}\\r\\n\",\n \"success\": true,\n \"timedOut\": false,\n \"timeoutSeconds\": 27\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234611.1058235, + "raw": { + "durationMs": 1374, + "exitCode": 0, + "ok": true, + "schemaVersion": 1, + "status": "ok", + "stderr": "", + "stdout": "{\"markers\":{},\"counterKind\":\"windows_qpc\",\"executablePath\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\Autodesk\\\\webdeploy\\\\production\\\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\\\Fusion360.exe\",\"highResolution\":true,\"counterFrequency\":10000000,\"processCreatedUtc\":\"2026-10-05T21:01:46.6536380Z\",\"success\":true,\"counterTicks\":3663021206800,\"host\":\"ADOM_DREW2\",\"pid\":41728,\"wall\":1791234610.6331239}\r\n", + "success": true, + "timedOut": false, + "timeoutSeconds": 27 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0002-fusion_state.json b/docs/mechanical-verification/cp8/busy/calls/0002-fusion_state.json new file mode 100644 index 0000000..434969a --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0002-fusion_state.json @@ -0,0 +1,439 @@ +{ + "target": "adom_drew2", + "verb": "fusion_state", + "args": { + "screenshot": false, + "nativeViewport": false + }, + "requestJson": "{\"screenshot\": false, \"nativeViewport\": false}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234611.1065354, + "mutating": false, + "stdout": "{\n \"_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).\",\n \"_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.\",\n \"activeDocument\": \"Untitled\",\n \"addinResponding\": true,\n \"blockingDialogs\": [],\n \"dialogs\": [],\n \"drivingBadge\": {\n \"active\": false,\n \"enabled\": true,\n \"idleShedSeconds\": 300,\n \"lastDrivingVerbAt\": 1791234265.3772285,\n \"lastError\": null\n },\n \"durationMs\": 103,\n \"error\": \"\",\n \"focusEvents\": [],\n \"hwnd\": 29757446,\n \"mainThreadBusy\": null,\n \"output\": \"{\\\"running\\\":true,\\\"activeDocument\\\":\\\"Untitled\\\",\\\"mainThreadBusy\\\":null,\\\"blockingDialogs\\\":[],\\\"screenshot\\\":null}\",\n \"rect\": {\n \"bottom\": 1549,\n \"height\": 1549,\n \"left\": -11,\n \"right\": 2572,\n \"top\": 0,\n \"width\": 2583\n },\n \"running\": true,\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60,\n \"timings\": {\n \"launch\": {\n \"cold\": {\n \"count\": 10,\n \"lastAt\": 1791234147,\n \"p50\": 41.1,\n \"p90\": 216.2\n },\n \"warm\": {\n \"count\": 2,\n \"lastAt\": 1791230617,\n \"p50\": 0.0,\n \"p90\": 1.0\n }\n },\n \"verb:activate_document\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1789145672,\n \"p50\": 3.1,\n \"p90\": 5.6\n }\n },\n \"verb:addin_status\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1788899767,\n \"p50\": 2.0,\n \"p90\": 2.0\n }\n },\n \"verb:aps_browse\": {\n \"any\": {\n \"count\": 4,\n \"lastAt\": 1789143968,\n \"p50\": 1.9,\n \"p90\": 2.3\n }\n },\n \"verb:aps_file_info\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1789144745,\n \"p50\": 34.8,\n \"p90\": 36.2\n }\n },\n \"verb:aps_get_browser\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1787944552,\n \"p50\": 0.0,\n \"p90\": 0.0\n }\n },\n \"verb:aps_open\": {\n \"any\": {\n \"count\": 5,\n \"lastAt\": 1788196241,\n \"p50\": 0.2,\n \"p90\": 37.2\n }\n },\n \"verb:aps_search\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1789684900,\n \"p50\": 35.7,\n \"p90\": 65.6\n }\n },\n \"verb:aps_signin\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1787949063,\n \"p50\": 0.4,\n \"p90\": 1.1\n }\n },\n \"verb:aps_status\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788899782,\n \"p50\": 0.0,\n \"p90\": 0.0\n }\n },\n \"verb:assembly_bom\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1790955710,\n \"p50\": 0.1,\n \"p90\": 0.6\n }\n },\n \"verb:check_dialogs\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1788195388,\n \"p50\": 1.4,\n \"p90\": 1.4\n }\n },\n \"verb:close_document\": {\n \"any\": {\n \"count\": 9,\n \"lastAt\": 1789145809,\n \"p50\": 6.7,\n \"p90\": 46.1\n }\n },\n \"verb:describe\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1789144008,\n \"p50\": 0.0,\n \"p90\": 0.0\n }\n },\n \"verb:document_info\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234195,\n \"p50\": 0.2,\n \"p90\": 0.2\n }\n },\n \"verb:eagle_import_status\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1790978404,\n \"p50\": 1.8,\n \"p90\": 1.8\n }\n },\n \"verb:electron_run\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788456727,\n \"p50\": 6.3,\n \"p90\": 13.3\n }\n },\n \"verb:export_cloud_file\": {\n \"any\": {\n \"count\": 4,\n \"lastAt\": 1789685179,\n \"p50\": 223.4,\n \"p90\": 290.3\n }\n },\n \"verb:export_eagle_source\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788456713,\n \"p50\": 1.7,\n \"p90\": 2.2\n }\n },\n \"verb:export_f3d\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1790955227,\n \"p50\": 3.7,\n \"p90\": 4.4\n }\n },\n \"verb:export_obj\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1787944913,\n \"p50\": 0.7,\n \"p90\": 0.7\n }\n },\n \"verb:export_step\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788456783,\n \"p50\": 5.5,\n \"p90\": 7.9\n }\n },\n \"verb:get_app_state\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234147,\n \"p50\": 1.3,\n \"p90\": 3.6\n }\n },\n \"verb:get_design_info\": {\n \"any\": {\n \"count\": 5,\n \"lastAt\": 1788900070,\n \"p50\": 5.2,\n \"p90\": 10.8\n }\n },\n \"verb:help\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1788194522,\n \"p50\": 1.0,\n \"p90\": 1.0\n }\n },\n \"verb:kill\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1787833443,\n \"p50\": 66.9,\n \"p90\": 66.9\n }\n },\n \"verb:list_cloud_files\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1787832975,\n \"p50\": 15.8,\n \"p90\": 15.8\n }\n },\n \"verb:mcp_call\": {\n \"any\": {\n \"count\": 5,\n \"lastAt\": 1788455586,\n \"p50\": 0.0,\n \"p90\": 1.8\n }\n },\n \"verb:mech_capabilities\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234199,\n \"p50\": 0.1,\n \"p90\": 0.1\n }\n },\n \"verb:mech_operation_status\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791229196,\n \"p50\": 0.1,\n \"p90\": 0.1\n }\n },\n \"verb:mechanical\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234246,\n \"p50\": 0.7,\n \"p90\": 1.9\n }\n },\n \"verb:open_by_urn\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1789144985,\n \"p50\": 43.4,\n \"p90\": 59.1\n }\n },\n \"verb:open_cloud_file\": {\n \"any\": {\n \"count\": 8,\n \"lastAt\": 1789666231,\n \"p50\": 24.2,\n \"p90\": 87.5\n }\n },\n \"verb:open_design\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1790955721,\n \"p50\": 5.9,\n \"p90\": 6.1\n }\n },\n \"verb:open_lbr\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1788195396,\n \"p50\": 2.7,\n \"p90\": 5.0\n }\n },\n \"verb:physical_properties\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1790955710,\n \"p50\": 0.1,\n \"p90\": 0.2\n }\n },\n \"verb:readiness\": {\n \"any\": {\n \"count\": 5,\n \"lastAt\": 1788900108,\n \"p50\": 14.9,\n \"p90\": 56.9\n }\n },\n \"verb:restart_for_addin\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234174,\n \"p50\": 0.0,\n \"p90\": 125.2\n }\n },\n \"verb:run_modeling_script\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234267,\n \"p50\": 1.7,\n \"p90\": 1.9\n }\n },\n \"verb:search_cloud_files\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1789143642,\n \"p50\": 0.0,\n \"p90\": 0.4\n }\n },\n \"verb:show_2d_board\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1788456656,\n \"p50\": 26.6,\n \"p90\": 34.9\n }\n },\n \"verb:show_3d_board\": {\n \"any\": {\n \"count\": 6,\n \"lastAt\": 1788456760,\n \"p50\": 10.2,\n \"p90\": 19.6\n }\n },\n \"verb:signin\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1788899909,\n \"p50\": 56.1,\n \"p90\": 56.1\n }\n },\n \"verb:start\": {\n \"any\": {\n \"count\": 7,\n \"lastAt\": 1791230617,\n \"p50\": 57.4,\n \"p90\": 64.9\n }\n },\n \"verb:status\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1788194217,\n \"p50\": 0.8,\n \"p90\": 1.0\n }\n },\n \"verb:stop\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1787831926,\n \"p50\": 19.7,\n \"p90\": 19.7\n }\n },\n \"verb:window_info\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788899841,\n \"p50\": 7.2,\n \"p90\": 10.9\n }\n }\n },\n \"timingsSentence\": \"on this machine Fusion starts in cold 41s, warm 0s (measured)\",\n \"title\": \"Untitled - Autodesk Fusion \"\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234611.2149422, + "raw": { + "_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": 1791234265.3772285, + "lastError": null + }, + "durationMs": 103, + "error": "", + "focusEvents": [], + "hwnd": 29757446, + "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": 1791234195, + "p50": 0.2, + "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": 1791234199, + "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": 1791234246, + "p50": 0.7, + "p90": 1.9 + } + }, + "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": 1791234267, + "p50": 1.7, + "p90": 1.9 + } + }, + "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 " + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0003-fusion_document_info.json b/docs/mechanical-verification/cp8/busy/calls/0003-fusion_document_info.json new file mode 100644 index 0000000..c2df7a4 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0003-fusion_document_info.json @@ -0,0 +1,62 @@ +{ + "target": "adom_drew2", + "verb": "fusion_document_info", + "args": {}, + "requestJson": "{}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234611.215667, + "mutating": false, + "stdout": "{\n \"_hint\": \"Use fusion_get_app_state to check workspace type. For exports: fusion_export_gerbers, fusion_export_bom, fusion_export_cpl, fusion_export_source (.fsch/.fbrd), fusion_export_eagle_source (.sch/.brd). Use fusion_activate_document to switch tabs.\",\n \"_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.\",\n \"data\": {\n \"activeDocument\": \"Untitled\",\n \"activeWorkspace\": \"Design\",\n \"documentName\": \"Untitled\",\n \"isCloudDocument\": false,\n \"isSaved\": false,\n \"openDocumentCount\": 1,\n \"openDocuments\": [\n {\n \"documentType\": \"unknown\",\n \"documentTypeRaw\": \"None\",\n \"isActive\": true,\n \"isCloudDocument\": false,\n \"isSaved\": false,\n \"name\": \"Untitled\"\n }\n ],\n \"productType\": \"DesignProductType\"\n },\n \"documentHygiene\": {\n \"documents\": [\n {\n \"isModified\": false,\n \"isSaved\": false,\n \"name\": \"Untitled\",\n \"needsSave\": false,\n \"saveStateKnown\": true\n }\n ],\n \"inspectionComplete\": true,\n \"needsSaveCount\": 0,\n \"openDocumentCount\": 1,\n \"ownership\": \"notInferred\",\n \"recoveryHealth\": \"notInspected\"\n },\n \"durationMs\": 161,\n \"error\": \"\",\n \"output\": \"1 document(s) open, active: Untitled, workspace: Design\",\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234611.3827107, + "raw": { + "_hint": "Use fusion_get_app_state to check workspace type. For exports: fusion_export_gerbers, fusion_export_bom, fusion_export_cpl, fusion_export_source (.fsch/.fbrd), fusion_export_eagle_source (.sch/.brd). Use fusion_activate_document to switch tabs.", + "_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.", + "data": { + "activeDocument": "Untitled", + "activeWorkspace": "Design", + "documentName": "Untitled", + "isCloudDocument": false, + "isSaved": false, + "openDocumentCount": 1, + "openDocuments": [ + { + "documentType": "unknown", + "documentTypeRaw": "None", + "isActive": true, + "isCloudDocument": false, + "isSaved": false, + "name": "Untitled" + } + ], + "productType": "DesignProductType" + }, + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 0, + "openDocumentCount": 1, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 161, + "error": "", + "output": "1 document(s) open, active: Untitled, workspace: Design", + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0004-fusion_run_modeling_script.json b/docs/mechanical-verification/cp8/busy/calls/0004-fusion_run_modeling_script.json new file mode 100644 index 0000000..d96bdbe --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0004-fusion_run_modeling_script.json @@ -0,0 +1,62 @@ +{ + "target": "adom_drew2", + "verb": "fusion_run_modeling_script", + "args": { + "script": "import threading, builtins\nif threading.current_thread() is not threading.main_thread():\n raise RuntimeError('Busy probe requires the native main thread')\n_registry = getattr(builtins, '_adom_mechanical_ralph_runs', None)\nif not isinstance(_registry, dict) or '20261005T210310Z-568fe7869d0b41d5a83014811fe170ac' not in _registry:\n raise RuntimeError('Existing exact run registry is required')\nimport json\nREQUEST = json.loads('{\"action\": \"inventory\", \"runId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\", \"host\": \"ADOM_DREW2\", \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\"}')\n\nimport base64, builtins, csv, hashlib, json, math, os, platform, re, sys, tempfile\n\ndef require(condition, message):\n if not condition:\n raise RuntimeError(message)\n\ndef same(a, b):\n if isinstance(a, bool) or isinstance(b, bool):\n return type(a) is type(b) and a == b\n if isinstance(a, (int, float)) and isinstance(b, (int, float)):\n return math.isfinite(a) and math.isfinite(b) and math.isclose(a, b, rel_tol=1e-7, abs_tol=1e-7)\n if isinstance(a, dict) and isinstance(b, dict):\n return a.keys() == b.keys() and all(same(a[k], b[k]) for k in a)\n if isinstance(a, list) and isinstance(b, list):\n return len(a) == len(b) and all(same(x, y) for x, y in zip(a, b))\n return a == b\n\ndef vector(p):\n return [p.x * 10, p.y * 10, p.z * 10]\n\ndef body_measure(body):\n properties = body.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)\n box = body.boundingBox\n return {'name': body.name, 'volume': properties.volume * 1000, 'mass': properties.mass,\n 'centerOfMass': vector(properties.centerOfMass), 'faces': body.faces.count,\n 'bounds': [vector(box.minPoint), vector(box.maxPoint)],\n 'material': body.material.name if body.material else None}\n\ndef witness(document):\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\n require(design is not None, 'Owned document is no longer a design')\n root = design.rootComponent\n components, occurrences = [], []\n all_bodies = [body_measure(b) for b in root.bRepBodies]\n for comp in design.allComponents:\n components.append({'name': '' if comp == root else comp.name,\n 'partNumber': comp.partNumber, 'description': comp.description,\n 'material': comp.material.name if comp.material else None,\n 'attributes': {a.name: a.value for a in comp.attributes if a.groupName == 'AdomMechanical'},\n 'bodies': [body_measure(b) for b in comp.bRepBodies],\n 'sketches': [{'name': s.name, 'fullyConstrained': s.isFullyConstrained,\n 'curves': s.sketchCurves.count, 'profiles': s.profiles.count} for s in comp.sketches]})\n for occurrence in root.allOccurrences:\n matrix = list(occurrence.transform2.asArray())\n for index in (3, 7, 11): matrix[index] *= 10\n bodies = [body_measure(b) for b in occurrence.bRepBodies]\n all_bodies.extend(bodies)\n occurrences.append({'path': occurrence.fullPathName, 'component': occurrence.component.name,\n 'transform': matrix, 'bodies': bodies})\n props = root.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)\n return {'parameters': {p.name: p.expression for p in design.allParameters},\n 'timelineCount': design.timeline.count,\n 'components': sorted(components, key=lambda c: c['name']),\n 'occurrences': sorted(occurrences, key=lambda o: o['path']),\n 'physical': {'volume': props.volume * 1000, 'mass': props.mass,\n 'centerOfMass': vector(props.centerOfMass)},\n 'instanceVolume': sum(b['volume'] for b in all_bodies),\n 'instanceCount': len(all_bodies)}\n\nrequire(platform.node().lower() == REQUEST['host'].lower(), 'Host identity differs from expected host')\nrequire(re.fullmatch(r'[A-Za-z0-9_-]{12,100}', REQUEST['runId']) is not None, 'Invalid run ID')\nmodules = [m for n, m in list(sys.modules.items())\n if n.endswith('.mechanical.core') and getattr(m, 'SESSION_ID', None) == REQUEST['sessionId']]\nrequire(len(modules) == 1, 'Exact serving mechanical session is unavailable; no ownership inference')\ncore = modules[0]\nregistries = getattr(builtins, '_adom_mechanical_ralph_runs', None)\nif registries is None:\n registries = {}\n builtins._adom_mechanical_ralph_runs = registries\naction = REQUEST['action']\nrun = registries.get(REQUEST['runId'])\n\ndef documents():\n return [{'creationId': d.creationId, 'name': d.name, 'modified': d.isModified, 'saved': d.isSaved}\n for d in app.documents]\n\ndef idle():\n require(ui.activeCommand in ('', 'SelectCommand', 'Select'), 'Interactive command active; refusing document lifecycle action')\n\ndef fingerprint(document):\n return {'creationId': document.creationId, 'name': document.name,\n 'modified': document.isModified, 'saved': document.isSaved}\n\ndef owned(document_id, allow_closed=False):\n require(document_id in run['documents'], 'Document has no exact native ownership entry')\n row = run['documents'][document_id]\n if row.get('closed'):\n require(allow_closed, 'Owned document is already closed')\n return row\n document = row['object']\n require(any(d == document for d in app.documents), 'Exact owned document is no longer open')\n require(not any(d == document for d in run['baselineObjects']), 'Refusing a baseline document')\n require(document.name == row['name'] and not document.isSaved, 'Owned document was renamed or saved externally')\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\n marker = design.rootComponent.attributes.itemByName('AdomRalph', 'owner')\n require(marker and marker.value == REQUEST['runId'], 'Run ownership marker changed')\n marker = design.rootComponent.attributes.itemByName('AdomRalph', 'documentId')\n require(marker and marker.value == document_id, 'Runtime document marker changed')\n return row\n\ndef path_in_scratch(path):\n root = os.path.realpath(run['scratch'])\n path = os.path.abspath(path)\n require(os.path.commonpath([root, os.path.realpath(path)]) == root and os.path.realpath(path) != root,\n 'Artifact is not inside the owned scratch directory')\n require(not os.path.islink(path), 'Artifact is a symlink')\n return path\n\ndef file_info(path):\n path = path_in_scratch(path)\n require(os.path.isfile(path), 'Checkpoint file is absent')\n require(os.path.getsize(path) <= 32 * 1024 * 1024, 'Fixture artifact exceeds 32 MiB budget')\n with open(path, 'rb') as stream: data = stream.read()\n return {'path': path.replace('\\\\', '/'), 'sha256': hashlib.sha256(data).hexdigest(), 'bytes': len(data)}\n\ndef register(document, document_id, role):\n require(not any(d == document for d in run['baselineObjects']), 'Creation returned a baseline document')\n require(document_id not in run['documents'], 'Runtime ID is already registered')\n # Retain exact object first, including if marker creation later fails.\n row = {'object': document, 'documentId': document_id, 'role': role,\n 'creationId': document.creationId, 'name': document.name, 'closed': False, 'checkpoint': None}\n run['documents'][document_id] = row\n require(not document.isSaved and document.name.startswith('Untitled'), 'Only new unnamed designs are owned')\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\n design.rootComponent.attributes.add('AdomRalph', 'owner', REQUEST['runId'])\n design.rootComponent.attributes.add('AdomRalph', 'documentId', document_id)\n return row\n\ndef public_row(row):\n return {k: v for k, v in row.items() if k not in ('object', 'witness')}\n\nif action == 'begin':\n idle()\n require(run is None, 'Native run registry already exists; use recover')\n require(app.documents.count > 0, 'An existing active design is required for a read-only baseline')\n baseline = documents()\n require(baseline == REQUEST['baseline'], 'Documents changed after baseline; refusing to start')\n scratch = os.path.join(tempfile.gettempdir(), 'adom-fusion-ralph', REQUEST['runId'])\n require(not os.path.exists(scratch), 'Run scratch already exists')\n parent = os.path.dirname(scratch)\n require(os.path.realpath(parent) == os.path.abspath(parent), 'Scratch parent resolves through a link')\n os.makedirs(scratch)\n run = {'sessionId': REQUEST['sessionId'], 'documents': {}, 'scratch': scratch,\n 'baselineObjects': list(app.documents), 'baseline': baseline,\n 'activeObject': app.activeDocument, 'activeFingerprint': fingerprint(app.activeDocument)}\n registries[REQUEST['runId']] = run\n result = {'success': True, 'scratch': scratch.replace('\\\\', '/'), 'documents': baseline}\nelse:\n require(run is not None and run['sessionId'] == REQUEST['sessionId'], 'Native registry/session missing; no close attempted')\n if action == 'inventory':\n result = {'success': True, 'documents': [public_row(r) for r in run['documents'].values()],\n 'provisionalImportCount': len(run.get('provisionalImports', [])),\n 'scratch': run['scratch'].replace('\\\\', '/')}\n elif action == 'register':\n idle()\n document, design, document_id = core.active(app)\n require(document_id == REQUEST['documentId'], 'Active runtime document differs from typed creation result')\n row = register(document, document_id, REQUEST['role'])\n result = {'success': True, **public_row(row)}\n elif action in ('witness', 'verify', 'activate', 'close', 'checkpoint', 'capture'):\n row = owned(REQUEST['documentId'], action in ('close', 'verify'))\n document = row['object']\n if action == 'verify':\n if not row.get('closed'):\n checkpoint = row['checkpoint']\n require(checkpoint is not None, 'No verified native checkpoint')\n require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed')\n require(same(witness(document), row['witness']), 'Model changed since checkpoint')\n result = {'success': True, 'documentId': row['documentId'], 'ownerRunId': REQUEST['runId'], 'closed': row['closed']}\n elif action == 'witness':\n require(app.activeDocument == document, 'Active document changed; no implicit activation')\n result = {'success': True, 'documentId': row['documentId'], 'witness': witness(document)}\n elif action == 'activate':\n idle()\n require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']),\n 'User selected an external document; refusing activation')\n if app.activeDocument != document:\n require(document.activate(), 'Owned document activation failed')\n result = {'success': True, 'documentId': row['documentId']}\n elif action == 'close':\n idle()\n if not row['closed']:\n require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']),\n 'User selected an external document; refusing lifecycle changes')\n checkpoint = row['checkpoint']\n require(checkpoint is not None, 'No verified native checkpoint')\n require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed')\n require(same(witness(document), row['witness']), 'Model changed since checkpoint')\n require(document.close(False), 'Owned document close returned false')\n require(not any(d == document for d in app.documents), 'Owned document still appears in open documents')\n row['closed'] = True\n result = {'success': True, 'closedDocumentId': row['documentId'], 'closed': True}\n elif action == 'capture':\n require(app.activeDocument == document, 'Active document changed before capture')\n path = path_in_scratch(REQUEST['path'])\n require(not os.path.exists(path), 'Capture destination already exists')\n viewport = app.activeViewport\n viewport.fit()\n viewport.refresh()\n require(viewport.saveAsImageFile(path, 1280, 900), 'Viewport capture failed')\n result = {'success': True, **file_info(path)}\n else:\n idle()\n require(app.activeDocument == document, 'Active document changed before roundtrip')\n path = path_in_scratch(REQUEST['path'])\n archive = file_info(path)\n before = witness(document)\n options = app.importManager.createFusionArchiveImportOptions(path)\n imported = app.importManager.importToNewDocument(options)\n # Keep the actual returned API object before any fragile getter or\n # identity lookup. A provisional object can only be retained/reported.\n provisional = {'object': imported}\n run.setdefault('provisionalImports', []).append(provisional)\n require(imported is not None and app.activeDocument == imported, 'Archive import returned no active document')\n reopened_doc, reopened_design, reopened_id = core.active(app)\n require(reopened_doc == imported, 'Imported document identity mismatch')\n reopened = register(imported, reopened_id, row['role'] + '-reopened')\n run['provisionalImports'].remove(provisional)\n after = witness(imported)\n require(same(before, after), 'Native archive roundtrip changed measured model state')\n # Mark both sides only after independent semantic comparison.\n for item in (row, reopened):\n item['checkpoint'] = archive\n item['witness'] = before\n result = {'success': True, 'archive': archive, 'before': before, 'after': after,\n 'reopened': public_row(reopened), 'source': public_row(row)}\n elif action == 'file':\n info = file_info(REQUEST['path'])\n with open(info['path'], 'rb') as stream: data = stream.read()\n result = {'success': True, **info, 'base64': base64.b64encode(data).decode('ascii')}\n if REQUEST.get('csv'):\n with open(info['path'], encoding='utf-8', newline='') as stream:\n result['rows'] = list(csv.DictReader(stream))\n elif action == 'restore':\n idle()\n require(not run.get('provisionalImports'), 'Unresolved imported object remains; restoration refused')\n require(all(row['closed'] for row in run['documents'].values()), 'Owned documents remain open')\n require(len(list(app.documents)) == len(run['baselineObjects']) and\n all(any(d == original for d in app.documents) for original in run['baselineObjects']),\n 'Document set changed; refusing to change active document')\n require(documents() == run['baseline'], 'Original document flags changed')\n original = run['activeObject']\n if app.activeDocument != original:\n require(original.activate(), 'Original document activation failed')\n require(fingerprint(original) == run['activeFingerprint'], 'Original active document changed')\n result = {'success': True, 'documents': documents(), 'activeCreationId': original.creationId}\n else:\n raise RuntimeError('Unknown native action')\n\nEXPECTED = json.loads('{\"runId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\", \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\", \"host\": \"ADOM_DREW2\", \"pid\": 41728, \"scratch\": \"C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\", \"nonce\": \"7575c5bb7b3b474ab621f55d649416a4\", \"original\": {\"creationId\": \"70b2c575-f830-4751-9f88-2f1f3ab91fb1\", \"modified\": false, \"name\": \"Untitled\", \"saved\": false}}')\n\nimport time, threading\nrequire(threading.current_thread() is threading.main_thread(), 'Main thread changed')\nrequire(os.getpid() == EXPECTED['pid'], 'Native Fusion PID changed')\nrequire(not run.get('provisionalImports') and not run.get('retainRequired'), 'Native recovery remains unresolved')\nrequire(len(run['documents']) <= 1024 and all(row.get('closed') is True and not row.get('retainRequired') for row in run['documents'].values()), 'Owned native document remains open or retained')\nrequire(len(run['baselineObjects']) == 1 and app.documents.count == 1, 'Native original inventory differs')\noriginal = run['activeObject']\nrequire(app.activeDocument == original and app.documents.item(0) == original and run['baselineObjects'][0] == original, 'Exact original object differs')\nrequire(run['activeFingerprint'] == EXPECTED['original'] and fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed')\nrequire(not original.isModified and not original.isSaved, 'Original is not pristine')\nrequire(documents() == run['baseline'] == [EXPECTED['original']], 'Original baseline changed')\nidle()\ndesign = adsk.fusion.Design.cast(original.products.itemByProductType('DesignProductType'))\nrequire(design is not None and design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry is not pristine')\nrequire(os.path.normcase(os.path.abspath(run['scratch'])) == os.path.normcase(os.path.abspath(EXPECTED['scratch'])), 'Scratch differs from native registry')\nrequire(os.path.isdir(run['scratch']) and os.path.realpath(run['scratch']) == os.path.abspath(run['scratch']), 'Scratch root is linked or absent')\ndef state():\n require(app.activeDocument == original and app.documents.count == 1 and app.documents.item(0) == original, 'Original object changed during hold')\n require(fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed during hold')\n require(design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry changed during hold')\n idle()\n return fingerprint(original)\nresult = {'success': True, 'sessionId': EXPECTED['sessionId'], 'runId': EXPECTED['runId'], 'pid': os.getpid(), 'original': state()}\n" + }, + "requestJson": "{\"script\": \"import threading, builtins\\nif threading.current_thread() is not threading.main_thread():\\n raise RuntimeError('Busy probe requires the native main thread')\\n_registry = getattr(builtins, '_adom_mechanical_ralph_runs', None)\\nif not isinstance(_registry, dict) or '20261005T210310Z-568fe7869d0b41d5a83014811fe170ac' not in _registry:\\n raise RuntimeError('Existing exact run registry is required')\\nimport json\\nREQUEST = json.loads('{\\\"action\\\": \\\"inventory\\\", \\\"runId\\\": \\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\", \\\"host\\\": \\\"ADOM_DREW2\\\", \\\"sessionId\\\": \\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\"}')\\n\\nimport base64, builtins, csv, hashlib, json, math, os, platform, re, sys, tempfile\\n\\ndef require(condition, message):\\n if not condition:\\n raise RuntimeError(message)\\n\\ndef same(a, b):\\n if isinstance(a, bool) or isinstance(b, bool):\\n return type(a) is type(b) and a == b\\n if isinstance(a, (int, float)) and isinstance(b, (int, float)):\\n return math.isfinite(a) and math.isfinite(b) and math.isclose(a, b, rel_tol=1e-7, abs_tol=1e-7)\\n if isinstance(a, dict) and isinstance(b, dict):\\n return a.keys() == b.keys() and all(same(a[k], b[k]) for k in a)\\n if isinstance(a, list) and isinstance(b, list):\\n return len(a) == len(b) and all(same(x, y) for x, y in zip(a, b))\\n return a == b\\n\\ndef vector(p):\\n return [p.x * 10, p.y * 10, p.z * 10]\\n\\ndef body_measure(body):\\n properties = body.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)\\n box = body.boundingBox\\n return {'name': body.name, 'volume': properties.volume * 1000, 'mass': properties.mass,\\n 'centerOfMass': vector(properties.centerOfMass), 'faces': body.faces.count,\\n 'bounds': [vector(box.minPoint), vector(box.maxPoint)],\\n 'material': body.material.name if body.material else None}\\n\\ndef witness(document):\\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\\n require(design is not None, 'Owned document is no longer a design')\\n root = design.rootComponent\\n components, occurrences = [], []\\n all_bodies = [body_measure(b) for b in root.bRepBodies]\\n for comp in design.allComponents:\\n components.append({'name': '' if comp == root else comp.name,\\n 'partNumber': comp.partNumber, 'description': comp.description,\\n 'material': comp.material.name if comp.material else None,\\n 'attributes': {a.name: a.value for a in comp.attributes if a.groupName == 'AdomMechanical'},\\n 'bodies': [body_measure(b) for b in comp.bRepBodies],\\n 'sketches': [{'name': s.name, 'fullyConstrained': s.isFullyConstrained,\\n 'curves': s.sketchCurves.count, 'profiles': s.profiles.count} for s in comp.sketches]})\\n for occurrence in root.allOccurrences:\\n matrix = list(occurrence.transform2.asArray())\\n for index in (3, 7, 11): matrix[index] *= 10\\n bodies = [body_measure(b) for b in occurrence.bRepBodies]\\n all_bodies.extend(bodies)\\n occurrences.append({'path': occurrence.fullPathName, 'component': occurrence.component.name,\\n 'transform': matrix, 'bodies': bodies})\\n props = root.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)\\n return {'parameters': {p.name: p.expression for p in design.allParameters},\\n 'timelineCount': design.timeline.count,\\n 'components': sorted(components, key=lambda c: c['name']),\\n 'occurrences': sorted(occurrences, key=lambda o: o['path']),\\n 'physical': {'volume': props.volume * 1000, 'mass': props.mass,\\n 'centerOfMass': vector(props.centerOfMass)},\\n 'instanceVolume': sum(b['volume'] for b in all_bodies),\\n 'instanceCount': len(all_bodies)}\\n\\nrequire(platform.node().lower() == REQUEST['host'].lower(), 'Host identity differs from expected host')\\nrequire(re.fullmatch(r'[A-Za-z0-9_-]{12,100}', REQUEST['runId']) is not None, 'Invalid run ID')\\nmodules = [m for n, m in list(sys.modules.items())\\n if n.endswith('.mechanical.core') and getattr(m, 'SESSION_ID', None) == REQUEST['sessionId']]\\nrequire(len(modules) == 1, 'Exact serving mechanical session is unavailable; no ownership inference')\\ncore = modules[0]\\nregistries = getattr(builtins, '_adom_mechanical_ralph_runs', None)\\nif registries is None:\\n registries = {}\\n builtins._adom_mechanical_ralph_runs = registries\\naction = REQUEST['action']\\nrun = registries.get(REQUEST['runId'])\\n\\ndef documents():\\n return [{'creationId': d.creationId, 'name': d.name, 'modified': d.isModified, 'saved': d.isSaved}\\n for d in app.documents]\\n\\ndef idle():\\n require(ui.activeCommand in ('', 'SelectCommand', 'Select'), 'Interactive command active; refusing document lifecycle action')\\n\\ndef fingerprint(document):\\n return {'creationId': document.creationId, 'name': document.name,\\n 'modified': document.isModified, 'saved': document.isSaved}\\n\\ndef owned(document_id, allow_closed=False):\\n require(document_id in run['documents'], 'Document has no exact native ownership entry')\\n row = run['documents'][document_id]\\n if row.get('closed'):\\n require(allow_closed, 'Owned document is already closed')\\n return row\\n document = row['object']\\n require(any(d == document for d in app.documents), 'Exact owned document is no longer open')\\n require(not any(d == document for d in run['baselineObjects']), 'Refusing a baseline document')\\n require(document.name == row['name'] and not document.isSaved, 'Owned document was renamed or saved externally')\\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\\n marker = design.rootComponent.attributes.itemByName('AdomRalph', 'owner')\\n require(marker and marker.value == REQUEST['runId'], 'Run ownership marker changed')\\n marker = design.rootComponent.attributes.itemByName('AdomRalph', 'documentId')\\n require(marker and marker.value == document_id, 'Runtime document marker changed')\\n return row\\n\\ndef path_in_scratch(path):\\n root = os.path.realpath(run['scratch'])\\n path = os.path.abspath(path)\\n require(os.path.commonpath([root, os.path.realpath(path)]) == root and os.path.realpath(path) != root,\\n 'Artifact is not inside the owned scratch directory')\\n require(not os.path.islink(path), 'Artifact is a symlink')\\n return path\\n\\ndef file_info(path):\\n path = path_in_scratch(path)\\n require(os.path.isfile(path), 'Checkpoint file is absent')\\n require(os.path.getsize(path) <= 32 * 1024 * 1024, 'Fixture artifact exceeds 32 MiB budget')\\n with open(path, 'rb') as stream: data = stream.read()\\n return {'path': path.replace('\\\\\\\\', '/'), 'sha256': hashlib.sha256(data).hexdigest(), 'bytes': len(data)}\\n\\ndef register(document, document_id, role):\\n require(not any(d == document for d in run['baselineObjects']), 'Creation returned a baseline document')\\n require(document_id not in run['documents'], 'Runtime ID is already registered')\\n # Retain exact object first, including if marker creation later fails.\\n row = {'object': document, 'documentId': document_id, 'role': role,\\n 'creationId': document.creationId, 'name': document.name, 'closed': False, 'checkpoint': None}\\n run['documents'][document_id] = row\\n require(not document.isSaved and document.name.startswith('Untitled'), 'Only new unnamed designs are owned')\\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\\n design.rootComponent.attributes.add('AdomRalph', 'owner', REQUEST['runId'])\\n design.rootComponent.attributes.add('AdomRalph', 'documentId', document_id)\\n return row\\n\\ndef public_row(row):\\n return {k: v for k, v in row.items() if k not in ('object', 'witness')}\\n\\nif action == 'begin':\\n idle()\\n require(run is None, 'Native run registry already exists; use recover')\\n require(app.documents.count > 0, 'An existing active design is required for a read-only baseline')\\n baseline = documents()\\n require(baseline == REQUEST['baseline'], 'Documents changed after baseline; refusing to start')\\n scratch = os.path.join(tempfile.gettempdir(), 'adom-fusion-ralph', REQUEST['runId'])\\n require(not os.path.exists(scratch), 'Run scratch already exists')\\n parent = os.path.dirname(scratch)\\n require(os.path.realpath(parent) == os.path.abspath(parent), 'Scratch parent resolves through a link')\\n os.makedirs(scratch)\\n run = {'sessionId': REQUEST['sessionId'], 'documents': {}, 'scratch': scratch,\\n 'baselineObjects': list(app.documents), 'baseline': baseline,\\n 'activeObject': app.activeDocument, 'activeFingerprint': fingerprint(app.activeDocument)}\\n registries[REQUEST['runId']] = run\\n result = {'success': True, 'scratch': scratch.replace('\\\\\\\\', '/'), 'documents': baseline}\\nelse:\\n require(run is not None and run['sessionId'] == REQUEST['sessionId'], 'Native registry/session missing; no close attempted')\\n if action == 'inventory':\\n result = {'success': True, 'documents': [public_row(r) for r in run['documents'].values()],\\n 'provisionalImportCount': len(run.get('provisionalImports', [])),\\n 'scratch': run['scratch'].replace('\\\\\\\\', '/')}\\n elif action == 'register':\\n idle()\\n document, design, document_id = core.active(app)\\n require(document_id == REQUEST['documentId'], 'Active runtime document differs from typed creation result')\\n row = register(document, document_id, REQUEST['role'])\\n result = {'success': True, **public_row(row)}\\n elif action in ('witness', 'verify', 'activate', 'close', 'checkpoint', 'capture'):\\n row = owned(REQUEST['documentId'], action in ('close', 'verify'))\\n document = row['object']\\n if action == 'verify':\\n if not row.get('closed'):\\n checkpoint = row['checkpoint']\\n require(checkpoint is not None, 'No verified native checkpoint')\\n require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed')\\n require(same(witness(document), row['witness']), 'Model changed since checkpoint')\\n result = {'success': True, 'documentId': row['documentId'], 'ownerRunId': REQUEST['runId'], 'closed': row['closed']}\\n elif action == 'witness':\\n require(app.activeDocument == document, 'Active document changed; no implicit activation')\\n result = {'success': True, 'documentId': row['documentId'], 'witness': witness(document)}\\n elif action == 'activate':\\n idle()\\n require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']),\\n 'User selected an external document; refusing activation')\\n if app.activeDocument != document:\\n require(document.activate(), 'Owned document activation failed')\\n result = {'success': True, 'documentId': row['documentId']}\\n elif action == 'close':\\n idle()\\n if not row['closed']:\\n require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']),\\n 'User selected an external document; refusing lifecycle changes')\\n checkpoint = row['checkpoint']\\n require(checkpoint is not None, 'No verified native checkpoint')\\n require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed')\\n require(same(witness(document), row['witness']), 'Model changed since checkpoint')\\n require(document.close(False), 'Owned document close returned false')\\n require(not any(d == document for d in app.documents), 'Owned document still appears in open documents')\\n row['closed'] = True\\n result = {'success': True, 'closedDocumentId': row['documentId'], 'closed': True}\\n elif action == 'capture':\\n require(app.activeDocument == document, 'Active document changed before capture')\\n path = path_in_scratch(REQUEST['path'])\\n require(not os.path.exists(path), 'Capture destination already exists')\\n viewport = app.activeViewport\\n viewport.fit()\\n viewport.refresh()\\n require(viewport.saveAsImageFile(path, 1280, 900), 'Viewport capture failed')\\n result = {'success': True, **file_info(path)}\\n else:\\n idle()\\n require(app.activeDocument == document, 'Active document changed before roundtrip')\\n path = path_in_scratch(REQUEST['path'])\\n archive = file_info(path)\\n before = witness(document)\\n options = app.importManager.createFusionArchiveImportOptions(path)\\n imported = app.importManager.importToNewDocument(options)\\n # Keep the actual returned API object before any fragile getter or\\n # identity lookup. A provisional object can only be retained/reported.\\n provisional = {'object': imported}\\n run.setdefault('provisionalImports', []).append(provisional)\\n require(imported is not None and app.activeDocument == imported, 'Archive import returned no active document')\\n reopened_doc, reopened_design, reopened_id = core.active(app)\\n require(reopened_doc == imported, 'Imported document identity mismatch')\\n reopened = register(imported, reopened_id, row['role'] + '-reopened')\\n run['provisionalImports'].remove(provisional)\\n after = witness(imported)\\n require(same(before, after), 'Native archive roundtrip changed measured model state')\\n # Mark both sides only after independent semantic comparison.\\n for item in (row, reopened):\\n item['checkpoint'] = archive\\n item['witness'] = before\\n result = {'success': True, 'archive': archive, 'before': before, 'after': after,\\n 'reopened': public_row(reopened), 'source': public_row(row)}\\n elif action == 'file':\\n info = file_info(REQUEST['path'])\\n with open(info['path'], 'rb') as stream: data = stream.read()\\n result = {'success': True, **info, 'base64': base64.b64encode(data).decode('ascii')}\\n if REQUEST.get('csv'):\\n with open(info['path'], encoding='utf-8', newline='') as stream:\\n result['rows'] = list(csv.DictReader(stream))\\n elif action == 'restore':\\n idle()\\n require(not run.get('provisionalImports'), 'Unresolved imported object remains; restoration refused')\\n require(all(row['closed'] for row in run['documents'].values()), 'Owned documents remain open')\\n require(len(list(app.documents)) == len(run['baselineObjects']) and\\n all(any(d == original for d in app.documents) for original in run['baselineObjects']),\\n 'Document set changed; refusing to change active document')\\n require(documents() == run['baseline'], 'Original document flags changed')\\n original = run['activeObject']\\n if app.activeDocument != original:\\n require(original.activate(), 'Original document activation failed')\\n require(fingerprint(original) == run['activeFingerprint'], 'Original active document changed')\\n result = {'success': True, 'documents': documents(), 'activeCreationId': original.creationId}\\n else:\\n raise RuntimeError('Unknown native action')\\n\\nEXPECTED = json.loads('{\\\"runId\\\": \\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\", \\\"sessionId\\\": \\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\", \\\"host\\\": \\\"ADOM_DREW2\\\", \\\"pid\\\": 41728, \\\"scratch\\\": \\\"C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\", \\\"nonce\\\": \\\"7575c5bb7b3b474ab621f55d649416a4\\\", \\\"original\\\": {\\\"creationId\\\": \\\"70b2c575-f830-4751-9f88-2f1f3ab91fb1\\\", \\\"modified\\\": false, \\\"name\\\": \\\"Untitled\\\", \\\"saved\\\": false}}')\\n\\nimport time, threading\\nrequire(threading.current_thread() is threading.main_thread(), 'Main thread changed')\\nrequire(os.getpid() == EXPECTED['pid'], 'Native Fusion PID changed')\\nrequire(not run.get('provisionalImports') and not run.get('retainRequired'), 'Native recovery remains unresolved')\\nrequire(len(run['documents']) <= 1024 and all(row.get('closed') is True and not row.get('retainRequired') for row in run['documents'].values()), 'Owned native document remains open or retained')\\nrequire(len(run['baselineObjects']) == 1 and app.documents.count == 1, 'Native original inventory differs')\\noriginal = run['activeObject']\\nrequire(app.activeDocument == original and app.documents.item(0) == original and run['baselineObjects'][0] == original, 'Exact original object differs')\\nrequire(run['activeFingerprint'] == EXPECTED['original'] and fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed')\\nrequire(not original.isModified and not original.isSaved, 'Original is not pristine')\\nrequire(documents() == run['baseline'] == [EXPECTED['original']], 'Original baseline changed')\\nidle()\\ndesign = adsk.fusion.Design.cast(original.products.itemByProductType('DesignProductType'))\\nrequire(design is not None and design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry is not pristine')\\nrequire(os.path.normcase(os.path.abspath(run['scratch'])) == os.path.normcase(os.path.abspath(EXPECTED['scratch'])), 'Scratch differs from native registry')\\nrequire(os.path.isdir(run['scratch']) and os.path.realpath(run['scratch']) == os.path.abspath(run['scratch']), 'Scratch root is linked or absent')\\ndef state():\\n require(app.activeDocument == original and app.documents.count == 1 and app.documents.item(0) == original, 'Original object changed during hold')\\n require(fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed during hold')\\n require(design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry changed during hold')\\n idle()\\n return fingerprint(original)\\nresult = {'success': True, 'sessionId': EXPECTED['sessionId'], 'runId': EXPECTED['runId'], 'pid': os.getpid(), 'original': state()}\\n\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234611.3834035, + "mutating": false, + "stdout": "{\n \"_hint\": \"Window opened/changed in the BACKGROUND - the user's focus was NOT touched; do NOT foreground anything to compensate. Render results via fusion_state. If the USER asks to watch, re-call with {\\\"foreground\\\": true, \\\"foregroundReason\\\": \\\"\\\"}.\",\n \"_timeoutHint\": \"ab waits up to 180s 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.\",\n \"data\": {\n \"createdDocument\": null,\n \"documentName\": \"Untitled\",\n \"result\": {\n \"original\": {\n \"creationId\": \"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\n \"modified\": false,\n \"name\": \"Untitled\",\n \"saved\": false\n },\n \"pid\": 41728,\n \"runId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\",\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"success\": true\n }\n },\n \"documentHygiene\": {\n \"documents\": [\n {\n \"isModified\": false,\n \"isSaved\": false,\n \"name\": \"Untitled\",\n \"needsSave\": false,\n \"saveStateKnown\": true\n }\n ],\n \"inspectionComplete\": true,\n \"needsSaveCount\": 0,\n \"openDocumentCount\": 1,\n \"ownership\": \"notInferred\",\n \"recoveryHealth\": \"notInspected\"\n },\n \"durationMs\": 1805,\n \"error\": \"\",\n \"output\": \"Modeling script ran successfully.\",\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 180,\n \"windowEtiquette\": \"background\"\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234613.1955438, + "raw": { + "_hint": "Window opened/changed in the BACKGROUND - the user's focus was NOT touched; do NOT foreground anything to compensate. Render results via fusion_state. If the USER asks to watch, re-call with {\"foreground\": true, \"foregroundReason\": \"\"}.", + "_timeoutHint": "ab waits up to 180s 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.", + "data": { + "createdDocument": null, + "documentName": "Untitled", + "result": { + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + } + }, + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 0, + "openDocumentCount": 1, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 1805, + "error": "", + "output": "Modeling script ran successfully.", + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 180, + "windowEtiquette": "background" + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0005-fusion_mech_operation_status.json b/docs/mechanical-verification/cp8/busy/calls/0005-fusion_mech_operation_status.json new file mode 100644 index 0000000..0d42210 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0005-fusion_mech_operation_status.json @@ -0,0 +1,113 @@ +{ + "target": "adom_drew2", + "verb": "fusion_mech_operation_status", + "args": { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth" + }, + "requestJson": "{\"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\", \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234613.196139, + "mutating": false, + "stdout": "{\n \"_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.\",\n \"currentSessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"durationMs\": 36,\n \"error\": \"\",\n \"historical\": false,\n \"history\": {\n \"createdAt\": 1791234223.44495,\n \"events\": [\n {\n \"at\": 1791234223.44495,\n \"phase\": \"admitted\"\n },\n {\n \"at\": 1791234223.4515686,\n \"phase\": \"dispatched\"\n },\n {\n \"at\": 1791234223.4627895,\n \"phase\": \"executing\"\n },\n {\n \"at\": 1791234223.534875,\n \"phase\": \"succeeded\"\n }\n ],\n \"observedDocument\": {\n \"creationId\": \"94431d29-0acf-4799-b677-3f564085aa9d\",\n \"dataFileId\": null,\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"\n },\n \"operation\": \"parameter_set\",\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"phase\": \"succeeded\",\n \"requestDigest\": \"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\n \"requestedTarget\": {\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\n \"revision\": \"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"\n },\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"sourceVersion\": \"1.12.0-dev.8\",\n \"storageVersion\": 1,\n \"updatedAt\": 1791234223.534875\n },\n \"nativeExecutionStarted\": null,\n \"observedResult\": null,\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"outcome\": \"recorded\",\n \"output\": \"{\\\"_timeoutHint\\\":\\\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\\\",\\\"currentSessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"historical\\\":false,\\\"history\\\":{\\\"createdAt\\\":1791234223.44495,\\\"events\\\":[{\\\"at\\\":1791234223.44495,\\\"phase\\\":\\\"admitted\\\"},{\\\"at\\\":1791234223.4515686,\\\"phase\\\":\\\"dispatched\\\"},{\\\"at\\\":1791234223.4627895,\\\"phase\\\":\\\"executing\\\"},{\\\"at\\\":1791234223.534875,\\\"phase\\\":\\\"succeeded\\\"}],\\\"observedDocument\\\":{\\\"creationId\\\":\\\"94431d29-0acf-4799-b677-3f564085aa9d\\\",\\\"dataFileId\\\":null,\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\"},\\\"operation\\\":\\\"parameter_set\\\",\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"phase\\\":\\\"succeeded\\\",\\\"requestDigest\\\":\\\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\\\",\\\"requestedTarget\\\":{\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\",\\\"revision\\\":\\\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\\\"},\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"sourceVersion\\\":\\\"1.12.0-dev.8\\\",\\\"storageVersion\\\":1,\\\"updatedAt\\\":1791234223.534875},\\\"nativeExecutionStarted\\\":null,\\\"observedResult\\\":null,\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"outcome\\\":\\\"recorded\\\",\\\"persistenceFailure\\\":null,\\\"phase\\\":\\\"succeeded\\\",\\\"reconciliationRequired\\\":false,\\\"result\\\":{\\\"data\\\":{\\\"health\\\":{\\\"complete\\\":true,\\\"computeSucceeded\\\":true,\\\"faults\\\":[],\\\"healthy\\\":true,\\\"suppressed\\\":[],\\\"timelineCount\\\":2,\\\"unknown\\\":[]},\\\"parameter\\\":{\\\"displayUnit\\\":\\\"mm\\\",\\\"expression\\\":\\\"20 mm\\\",\\\"name\\\":\\\"depth\\\",\\\"unit\\\":\\\"mm\\\",\\\"value\\\":20.0},\\\"recoveryStrategy\\\":\\\"restore_parameter_expression\\\",\\\"target\\\":{\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\",\\\"revision\\\":\\\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\\\"},\\\"transactional\\\":false},\\\"durability\\\":{\\\"phase\\\":\\\"succeeded\\\",\\\"recordedSessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"storageVersion\\\":1,\\\"terminalRecorded\\\":true},\\\"operation\\\":\\\"parameter_set\\\",\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"success\\\":true},\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"state\\\":\\\"succeeded\\\",\\\"statusVerb\\\":\\\"fusion_get_app_state\\\",\\\"success\\\":true,\\\"timeoutSeconds\\\":60}\",\n \"persistenceFailure\": null,\n \"phase\": \"succeeded\",\n \"reconciliationRequired\": false,\n \"result\": {\n \"data\": {\n \"health\": {\n \"complete\": true,\n \"computeSucceeded\": true,\n \"faults\": [],\n \"healthy\": true,\n \"suppressed\": [],\n \"timelineCount\": 2,\n \"unknown\": []\n },\n \"parameter\": {\n \"displayUnit\": \"mm\",\n \"expression\": \"20 mm\",\n \"name\": \"depth\",\n \"unit\": \"mm\",\n \"value\": 20.0\n },\n \"recoveryStrategy\": \"restore_parameter_expression\",\n \"target\": {\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\n \"revision\": \"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"\n },\n \"transactional\": false\n },\n \"durability\": {\n \"phase\": \"succeeded\",\n \"recordedSessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"storageVersion\": 1,\n \"terminalRecorded\": true\n },\n \"operation\": \"parameter_set\",\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"success\": true\n },\n \"schemaVersion\": 1,\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"state\": \"succeeded\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234613.2382033, + "raw": { + "_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.", + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "durationMs": 36, + "error": "", + "historical": false, + "history": { + "createdAt": 1791234223.44495, + "events": [ + { + "at": 1791234223.44495, + "phase": "admitted" + }, + { + "at": 1791234223.4515686, + "phase": "dispatched" + }, + { + "at": 1791234223.4627895, + "phase": "executing" + }, + { + "at": 1791234223.534875, + "phase": "succeeded" + } + ], + "observedDocument": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38" + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "phase": "succeeded", + "requestDigest": "13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828", + "requestedTarget": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234223.534875 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "outcome": "recorded", + "output": "{\"_timeoutHint\":\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\",\"currentSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"historical\":false,\"history\":{\"createdAt\":1791234223.44495,\"events\":[{\"at\":1791234223.44495,\"phase\":\"admitted\"},{\"at\":1791234223.4515686,\"phase\":\"dispatched\"},{\"at\":1791234223.4627895,\"phase\":\"executing\"},{\"at\":1791234223.534875,\"phase\":\"succeeded\"}],\"observedDocument\":{\"creationId\":\"94431d29-0acf-4799-b677-3f564085aa9d\",\"dataFileId\":null,\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"phase\":\"succeeded\",\"requestDigest\":\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\"requestedTarget\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"sourceVersion\":\"1.12.0-dev.8\",\"storageVersion\":1,\"updatedAt\":1791234223.534875},\"nativeExecutionStarted\":null,\"observedResult\":null,\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"outcome\":\"recorded\",\"persistenceFailure\":null,\"phase\":\"succeeded\",\"reconciliationRequired\":false,\"result\":{\"data\":{\"health\":{\"complete\":true,\"computeSucceeded\":true,\"faults\":[],\"healthy\":true,\"suppressed\":[],\"timelineCount\":2,\"unknown\":[]},\"parameter\":{\"displayUnit\":\"mm\",\"expression\":\"20 mm\",\"name\":\"depth\",\"unit\":\"mm\",\"value\":20.0},\"recoveryStrategy\":\"restore_parameter_expression\",\"target\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"},\"transactional\":false},\"durability\":{\"phase\":\"succeeded\",\"recordedSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"storageVersion\":1,\"terminalRecorded\":true},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"success\":true},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"state\":\"succeeded\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "persistenceFailure": null, + "phase": "succeeded", + "reconciliationRequired": false, + "result": { + "data": { + "health": { + "complete": true, + "computeSucceeded": true, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "parameter": { + "displayUnit": "mm", + "expression": "20 mm", + "name": "depth", + "unit": "mm", + "value": 20.0 + }, + "recoveryStrategy": "restore_parameter_expression", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "transactional": false + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "schemaVersion": 1, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "succeeded", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0006-run_script.json b/docs/mechanical-verification/cp8/busy/calls/0006-run_script.json new file mode 100644 index 0000000..e447e1f --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0006-run_script.json @@ -0,0 +1,31 @@ +{ + "target": "adom_drew2", + "verb": "run_script", + "args": { + "interpreter": "powershell", + "scriptB64": "CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcSA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUp5ZFc1SlpDSTZJQ0l5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGaklpd2dJbk5sYzNOcGIyNUpaQ0k2SUNJell6VmxOamMwTkMxa01XRmpMVFF5TnpZdE9USTJOQzFpTURWaE9UWmpOVEZsTTJRaUxDQWlhRzl6ZENJNklDSkJSRTlOWDBSU1JWY3lJaXdnSW5CcFpDSTZJRFF4TnpJNExDQWljMk55WVhSamFDSTZJQ0pET2k5VmMyVnljeTlrY21WM0wwRndjRVJoZEdFdlRHOWpZV3d2VkdWdGNDOWhaRzl0TFdaMWMybHZiaTF5WVd4d2FDOHlNREkyTVRBd05WUXlNVEF6TVRCYUxUVTJPR1psTnpnMk9XUXdZalF4WkRWaE9ETXdNVFE0TVRGbVpURTNNR0ZqSWl3Z0ltNXZibU5sSWpvZ0lqYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwSWl3Z0ltOXlhV2RwYm1Gc0lqb2dleUpqY21WaGRHbHZia2xrSWpvZ0lqY3dZakpqTlRjMUxXWTRNekF0TkRjMU1TMDVaamc0TFRKbU1XWXpZV0k1TVdaaU1TSXNJQ0p0YjJScFptbGxaQ0k2SUdaaGJITmxMQ0FpYm1GdFpTSTZJQ0pWYm5ScGRHeGxaQ0lzSUNKellYWmxaQ0k2SUdaaGJITmxmU3dnSW5CaGRHaHpJam9nZXlKbGJuUmxjbVZrSWpvZ0lrTTZYRnhWYzJWeWMxeGNaSEpsZDF4Y1FYQndSR0YwWVZ4Y1RHOWpZV3hjWEZSbGJYQmNYR0ZrYjIwdFpuVnphVzl1TFhKaGJIQm9YRnd5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGalhGeGlkWE41TFRjMU56VmpOV0ppTjJJellqUTNOR0ZpTmpJeFpqVTFaRFkwT1RReE5tRTBYRnhsYm5SbGNtVmtMbXB6YjI0aUxDQWlaWGhwZEdWa0lqb2dJa002WEZ4VmMyVnljMXhjWkhKbGQxeGNRWEJ3UkdGMFlWeGNURzlqWVd4Y1hGUmxiWEJjWEdGa2IyMHRablZ6YVc5dUxYSmhiSEJvWEZ3eU1ESTJNVEF3TlZReU1UQXpNVEJhTFRVMk9HWmxOemcyT1dRd1lqUXhaRFZoT0RNd01UUTRNVEZtWlRFM01HRmpYRnhpZFhONUxUYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwWEZ4bGVHbDBaV1F1YW5OdmJpSjlMQ0FpYlc5a1pTSTZJQ0psYm5SbGNtVmtJbjA9JykpIHwgQ29udmVydEZyb20tSnNvbgogIGlmIChbRW52aXJvbm1lbnRdOjpNYWNoaW5lTmFtZSAtaW5lICRxLmhvc3QpIHsgdGhyb3cgJ0hvc3QgaWRlbnRpdHkgZGlmZmVycycgfQogICRwID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX1Byb2Nlc3MgLUZpbHRlciAoJ1Byb2Nlc3NJZD0nICsgW2ludF0kcS5waWQpCiAgaWYgKC1ub3QgJHAgLW9yICRwLk5hbWUgLWluZSAnRnVzaW9uMzYwLmV4ZScpIHsgdGhyb3cgJ0V4cGVjdGVkIEZ1c2lvbiBwcm9jZXNzIGlzIGFic2VudCcgfQogICRzY3JhdGNoID0gW0lPLlBhdGhdOjpHZXRGdWxsUGF0aChbc3RyaW5nXSRxLnNjcmF0Y2gpCiAgaWYgKFtJTy5QYXRoXTo6R2V0RmlsZU5hbWUoJHNjcmF0Y2gpIC1jbmUgJHEucnVuSWQpIHsgdGhyb3cgJ1NjcmF0Y2ggcnVuIGlkZW50aXR5IGRpZmZlcnMnIH0KICAkd2FsayA9IEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyYXRjaAogIHdoaWxlICgkbnVsbCAtbmUgJHdhbGspIHsKICAgIGlmICgoJHdhbGsuQXR0cmlidXRlcyAtYmFuZCBbSU8uRmlsZUF0dHJpYnV0ZXNdOjpSZXBhcnNlUG9pbnQpIC1uZSAwKSB7IHRocm93ICdTY3JhdGNoIHRyYXZlcnNlcyBhIHJlcGFyc2UgcG9pbnQnIH0KICAgICR3YWxrID0gJHdhbGsuUGFyZW50CiAgfQogIGZ1bmN0aW9uIFJlYWQtTWFya2VyKFtzdHJpbmddJHBhdGgpIHsKICAgICRmdWxsID0gW0lPLlBhdGhdOjpHZXRGdWxsUGF0aCgkcGF0aCkKICAgICRmb2xkZXIgPSBbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJGZ1bGwpCiAgICBpZiAoW0lPLlBhdGhdOjpHZXREaXJlY3RvcnlOYW1lKCRmb2xkZXIpIC1pbmUgJHNjcmF0Y2ggLW9yIFtJTy5QYXRoXTo6R2V0RmlsZU5hbWUoJGZvbGRlcikgLWNuZSAoJ2J1c3ktJyArICRxLm5vbmNlKSkgeyB0aHJvdyAnTWFya2VyIGVzY2FwZWQgb3duZWQgc2NyYXRjaCcgfQogICAgZm9yZWFjaCAoJGl0ZW0gaW4gQCgoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmb2xkZXIpLCAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmdWxsKSkpIHsKICAgICAgaWYgKCgkaXRlbS5BdHRyaWJ1dGVzIC1iYW5kIFtJTy5GaWxlQXR0cmlidXRlc106OlJlcGFyc2VQb2ludCkgLW5lIDApIHsgdGhyb3cgJ01hcmtlciBpcyBsaW5rZWQnIH0KICAgIH0KICAgICRmaWxlID0gR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmdWxsCiAgICBpZiAoJGZpbGUuTGVuZ3RoIC1ndCA0MDk2IC1vciAkZmlsZS5MZW5ndGggLWxlIDApIHsgdGhyb3cgJ01hcmtlciBzaXplIGludmFsaWQnIH0KICAgICRieXRlcyA9IFtJTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRmdWxsKQogICAgaWYgKCRieXRlcy5MZW5ndGggLWd0IDQwOTYpIHsgdGhyb3cgJ01hcmtlciBleGNlZWRlZCByZWFkIGJ1ZGdldCcgfQogICAgJHNoYSA9IFtTZWN1cml0eS5DcnlwdG9ncmFwaHkuU0hBMjU2XTo6Q3JlYXRlKCkKICAgIHRyeSB7ICRoYXNoID0gW0JpdENvbnZlcnRlcl06OlRvU3RyaW5nKCRzaGEuQ29tcHV0ZUhhc2goJGJ5dGVzKSkuUmVwbGFjZSgnLScsJycpLlRvTG93ZXJJbnZhcmlhbnQoKSB9IGZpbmFsbHkgeyAkc2hhLkRpc3Bvc2UoKSB9CiAgICByZXR1cm4gQHsgdmFsdWU9KFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoJGJ5dGVzKSB8IENvbnZlcnRGcm9tLUpzb24pOyBzaGEyNTY9JGhhc2g7IGJ5dGVzPSRieXRlcy5MZW5ndGg7IHJhd0Jhc2U2ND1bQ29udmVydF06OlRvQmFzZTY0U3RyaW5nKCRieXRlcykgfQogIH0KICAkdmFsdWVzID0gQHt9CiAgaWYgKCRxLm1vZGUgLWVxICdpbml0aWFsJykgewogICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggKFtJTy5QYXRoXTo6R2V0RGlyZWN0b3J5TmFtZSgkcS5wYXRocy5lbnRlcmVkKSkpIHsgdGhyb3cgJ1Byb2JlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cycgfQogIH0KICBpZiAoJHEubW9kZSAtZXEgJ2VudGVyZWQnKSB7CiAgICAkd2FpdCA9IFtEaWFnbm9zdGljcy5TdG9wd2F0Y2hdOjpTdGFydE5ldygpCiAgICB3aGlsZSAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcS5wYXRocy5lbnRlcmVkKSkgewogICAgICBpZiAoJHdhaXQuRWxhcHNlZC5Ub3RhbFNlY29uZHMgLWdlIDUpIHsgdGhyb3cgJ0VudGVyZWQgbWFya2VyIHdhcyBub3Qgb2JzZXJ2ZWQgd2l0aGluIGZpdmUgc2Vjb25kcycgfQogICAgICBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDI1CiAgICB9CiAgICAkdmFsdWVzLmVudGVyZWQgPSBSZWFkLU1hcmtlciAkcS5wYXRocy5lbnRlcmVkCiAgfQogIGlmICgkcS5tb2RlIC1lcSAnZmluYWwnKSB7CiAgICAkdmFsdWVzLmVudGVyZWQgPSBSZWFkLU1hcmtlciAkcS5wYXRocy5lbnRlcmVkCiAgICAkdmFsdWVzLmV4aXRlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmV4aXRlZAogIH0KICAkd2FsbCA9IChbRGF0ZVRpbWVPZmZzZXRdOjpVdGNOb3cgLSBbRGF0ZVRpbWVPZmZzZXRdJzE5NzAtMDEtMDFUMDA6MDA6MDBaJykuVG90YWxTZWNvbmRzCiAgaWYgKC1ub3QgW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OklzSGlnaFJlc29sdXRpb24pIHsgdGhyb3cgJ1N0b3B3YXRjaCBpcyBub3QgdXNpbmcgdGhlIGhpZ2gtcmVzb2x1dGlvbiBwZXJmb3JtYW5jZSBjb3VudGVyJyB9CiAgJHRpY2tzID0gW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OkdldFRpbWVzdGFtcCgpCiAgJGFnYWluID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX1Byb2Nlc3MgLUZpbHRlciAoJ1Byb2Nlc3NJZD0nICsgW2ludF0kcS5waWQpCiAgaWYgKC1ub3QgJGFnYWluIC1vciAkYWdhaW4uQ3JlYXRpb25EYXRlIC1uZSAkcC5DcmVhdGlvbkRhdGUgLW9yICRhZ2Fpbi5FeGVjdXRhYmxlUGF0aCAtaW5lICRwLkV4ZWN1dGFibGVQYXRoKSB7IHRocm93ICdOYXRpdmUgcHJvY2VzcyBjaGFuZ2VkIGR1cmluZyBob3N0IHJlYWQnIH0KICBAeyBzdWNjZXNzPSR0cnVlOyBob3N0PVtFbnZpcm9ubWVudF06Ok1hY2hpbmVOYW1lOyBwaWQ9W2ludF0kcS5waWQ7IHByb2Nlc3NDcmVhdGVkVXRjPSRwLkNyZWF0aW9uRGF0ZS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygnbycpOwogICAgIGV4ZWN1dGFibGVQYXRoPSRwLkV4ZWN1dGFibGVQYXRoOyB3YWxsPSR3YWxsOyBtYXJrZXJzPSR2YWx1ZXM7IGNvdW50ZXJLaW5kPSd3aW5kb3dzX3FwYyc7IGNvdW50ZXJUaWNrcz0kdGlja3M7CiAgICAgY291bnRlckZyZXF1ZW5jeT1bRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6RnJlcXVlbmN5OyBoaWdoUmVzb2x1dGlvbj0kdHJ1ZSB9IHwgQ29udmVydFRvLUpzb24gLURlcHRoIDEyIC1Db21wcmVzcwp9IGNhdGNoIHsgW0NvbnNvbGVdOjpFcnJvci5Xcml0ZUxpbmUoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpOyBleGl0IDEgfQo=", + "timeoutSeconds": 12, + "reason": "Read exact owned busy-probe markers and native host clock without changing Fusion" + }, + "requestJson": "{\"interpreter\": \"powershell\", \"scriptB64\": \"CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcSA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUp5ZFc1SlpDSTZJQ0l5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGaklpd2dJbk5sYzNOcGIyNUpaQ0k2SUNJell6VmxOamMwTkMxa01XRmpMVFF5TnpZdE9USTJOQzFpTURWaE9UWmpOVEZsTTJRaUxDQWlhRzl6ZENJNklDSkJSRTlOWDBSU1JWY3lJaXdnSW5CcFpDSTZJRFF4TnpJNExDQWljMk55WVhSamFDSTZJQ0pET2k5VmMyVnljeTlrY21WM0wwRndjRVJoZEdFdlRHOWpZV3d2VkdWdGNDOWhaRzl0TFdaMWMybHZiaTF5WVd4d2FDOHlNREkyTVRBd05WUXlNVEF6TVRCYUxUVTJPR1psTnpnMk9XUXdZalF4WkRWaE9ETXdNVFE0TVRGbVpURTNNR0ZqSWl3Z0ltNXZibU5sSWpvZ0lqYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwSWl3Z0ltOXlhV2RwYm1Gc0lqb2dleUpqY21WaGRHbHZia2xrSWpvZ0lqY3dZakpqTlRjMUxXWTRNekF0TkRjMU1TMDVaamc0TFRKbU1XWXpZV0k1TVdaaU1TSXNJQ0p0YjJScFptbGxaQ0k2SUdaaGJITmxMQ0FpYm1GdFpTSTZJQ0pWYm5ScGRHeGxaQ0lzSUNKellYWmxaQ0k2SUdaaGJITmxmU3dnSW5CaGRHaHpJam9nZXlKbGJuUmxjbVZrSWpvZ0lrTTZYRnhWYzJWeWMxeGNaSEpsZDF4Y1FYQndSR0YwWVZ4Y1RHOWpZV3hjWEZSbGJYQmNYR0ZrYjIwdFpuVnphVzl1TFhKaGJIQm9YRnd5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGalhGeGlkWE41TFRjMU56VmpOV0ppTjJJellqUTNOR0ZpTmpJeFpqVTFaRFkwT1RReE5tRTBYRnhsYm5SbGNtVmtMbXB6YjI0aUxDQWlaWGhwZEdWa0lqb2dJa002WEZ4VmMyVnljMXhjWkhKbGQxeGNRWEJ3UkdGMFlWeGNURzlqWVd4Y1hGUmxiWEJjWEdGa2IyMHRablZ6YVc5dUxYSmhiSEJvWEZ3eU1ESTJNVEF3TlZReU1UQXpNVEJhTFRVMk9HWmxOemcyT1dRd1lqUXhaRFZoT0RNd01UUTRNVEZtWlRFM01HRmpYRnhpZFhONUxUYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwWEZ4bGVHbDBaV1F1YW5OdmJpSjlMQ0FpYlc5a1pTSTZJQ0psYm5SbGNtVmtJbjA9JykpIHwgQ29udmVydEZyb20tSnNvbgogIGlmIChbRW52aXJvbm1lbnRdOjpNYWNoaW5lTmFtZSAtaW5lICRxLmhvc3QpIHsgdGhyb3cgJ0hvc3QgaWRlbnRpdHkgZGlmZmVycycgfQogICRwID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX1Byb2Nlc3MgLUZpbHRlciAoJ1Byb2Nlc3NJZD0nICsgW2ludF0kcS5waWQpCiAgaWYgKC1ub3QgJHAgLW9yICRwLk5hbWUgLWluZSAnRnVzaW9uMzYwLmV4ZScpIHsgdGhyb3cgJ0V4cGVjdGVkIEZ1c2lvbiBwcm9jZXNzIGlzIGFic2VudCcgfQogICRzY3JhdGNoID0gW0lPLlBhdGhdOjpHZXRGdWxsUGF0aChbc3RyaW5nXSRxLnNjcmF0Y2gpCiAgaWYgKFtJTy5QYXRoXTo6R2V0RmlsZU5hbWUoJHNjcmF0Y2gpIC1jbmUgJHEucnVuSWQpIHsgdGhyb3cgJ1NjcmF0Y2ggcnVuIGlkZW50aXR5IGRpZmZlcnMnIH0KICAkd2FsayA9IEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyYXRjaAogIHdoaWxlICgkbnVsbCAtbmUgJHdhbGspIHsKICAgIGlmICgoJHdhbGsuQXR0cmlidXRlcyAtYmFuZCBbSU8uRmlsZUF0dHJpYnV0ZXNdOjpSZXBhcnNlUG9pbnQpIC1uZSAwKSB7IHRocm93ICdTY3JhdGNoIHRyYXZlcnNlcyBhIHJlcGFyc2UgcG9pbnQnIH0KICAgICR3YWxrID0gJHdhbGsuUGFyZW50CiAgfQogIGZ1bmN0aW9uIFJlYWQtTWFya2VyKFtzdHJpbmddJHBhdGgpIHsKICAgICRmdWxsID0gW0lPLlBhdGhdOjpHZXRGdWxsUGF0aCgkcGF0aCkKICAgICRmb2xkZXIgPSBbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJGZ1bGwpCiAgICBpZiAoW0lPLlBhdGhdOjpHZXREaXJlY3RvcnlOYW1lKCRmb2xkZXIpIC1pbmUgJHNjcmF0Y2ggLW9yIFtJTy5QYXRoXTo6R2V0RmlsZU5hbWUoJGZvbGRlcikgLWNuZSAoJ2J1c3ktJyArICRxLm5vbmNlKSkgeyB0aHJvdyAnTWFya2VyIGVzY2FwZWQgb3duZWQgc2NyYXRjaCcgfQogICAgZm9yZWFjaCAoJGl0ZW0gaW4gQCgoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmb2xkZXIpLCAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmdWxsKSkpIHsKICAgICAgaWYgKCgkaXRlbS5BdHRyaWJ1dGVzIC1iYW5kIFtJTy5GaWxlQXR0cmlidXRlc106OlJlcGFyc2VQb2ludCkgLW5lIDApIHsgdGhyb3cgJ01hcmtlciBpcyBsaW5rZWQnIH0KICAgIH0KICAgICRmaWxlID0gR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmdWxsCiAgICBpZiAoJGZpbGUuTGVuZ3RoIC1ndCA0MDk2IC1vciAkZmlsZS5MZW5ndGggLWxlIDApIHsgdGhyb3cgJ01hcmtlciBzaXplIGludmFsaWQnIH0KICAgICRieXRlcyA9IFtJTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRmdWxsKQogICAgaWYgKCRieXRlcy5MZW5ndGggLWd0IDQwOTYpIHsgdGhyb3cgJ01hcmtlciBleGNlZWRlZCByZWFkIGJ1ZGdldCcgfQogICAgJHNoYSA9IFtTZWN1cml0eS5DcnlwdG9ncmFwaHkuU0hBMjU2XTo6Q3JlYXRlKCkKICAgIHRyeSB7ICRoYXNoID0gW0JpdENvbnZlcnRlcl06OlRvU3RyaW5nKCRzaGEuQ29tcHV0ZUhhc2goJGJ5dGVzKSkuUmVwbGFjZSgnLScsJycpLlRvTG93ZXJJbnZhcmlhbnQoKSB9IGZpbmFsbHkgeyAkc2hhLkRpc3Bvc2UoKSB9CiAgICByZXR1cm4gQHsgdmFsdWU9KFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoJGJ5dGVzKSB8IENvbnZlcnRGcm9tLUpzb24pOyBzaGEyNTY9JGhhc2g7IGJ5dGVzPSRieXRlcy5MZW5ndGg7IHJhd0Jhc2U2ND1bQ29udmVydF06OlRvQmFzZTY0U3RyaW5nKCRieXRlcykgfQogIH0KICAkdmFsdWVzID0gQHt9CiAgaWYgKCRxLm1vZGUgLWVxICdpbml0aWFsJykgewogICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggKFtJTy5QYXRoXTo6R2V0RGlyZWN0b3J5TmFtZSgkcS5wYXRocy5lbnRlcmVkKSkpIHsgdGhyb3cgJ1Byb2JlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cycgfQogIH0KICBpZiAoJHEubW9kZSAtZXEgJ2VudGVyZWQnKSB7CiAgICAkd2FpdCA9IFtEaWFnbm9zdGljcy5TdG9wd2F0Y2hdOjpTdGFydE5ldygpCiAgICB3aGlsZSAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcS5wYXRocy5lbnRlcmVkKSkgewogICAgICBpZiAoJHdhaXQuRWxhcHNlZC5Ub3RhbFNlY29uZHMgLWdlIDUpIHsgdGhyb3cgJ0VudGVyZWQgbWFya2VyIHdhcyBub3Qgb2JzZXJ2ZWQgd2l0aGluIGZpdmUgc2Vjb25kcycgfQogICAgICBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDI1CiAgICB9CiAgICAkdmFsdWVzLmVudGVyZWQgPSBSZWFkLU1hcmtlciAkcS5wYXRocy5lbnRlcmVkCiAgfQogIGlmICgkcS5tb2RlIC1lcSAnZmluYWwnKSB7CiAgICAkdmFsdWVzLmVudGVyZWQgPSBSZWFkLU1hcmtlciAkcS5wYXRocy5lbnRlcmVkCiAgICAkdmFsdWVzLmV4aXRlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmV4aXRlZAogIH0KICAkd2FsbCA9IChbRGF0ZVRpbWVPZmZzZXRdOjpVdGNOb3cgLSBbRGF0ZVRpbWVPZmZzZXRdJzE5NzAtMDEtMDFUMDA6MDA6MDBaJykuVG90YWxTZWNvbmRzCiAgaWYgKC1ub3QgW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OklzSGlnaFJlc29sdXRpb24pIHsgdGhyb3cgJ1N0b3B3YXRjaCBpcyBub3QgdXNpbmcgdGhlIGhpZ2gtcmVzb2x1dGlvbiBwZXJmb3JtYW5jZSBjb3VudGVyJyB9CiAgJHRpY2tzID0gW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OkdldFRpbWVzdGFtcCgpCiAgJGFnYWluID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX1Byb2Nlc3MgLUZpbHRlciAoJ1Byb2Nlc3NJZD0nICsgW2ludF0kcS5waWQpCiAgaWYgKC1ub3QgJGFnYWluIC1vciAkYWdhaW4uQ3JlYXRpb25EYXRlIC1uZSAkcC5DcmVhdGlvbkRhdGUgLW9yICRhZ2Fpbi5FeGVjdXRhYmxlUGF0aCAtaW5lICRwLkV4ZWN1dGFibGVQYXRoKSB7IHRocm93ICdOYXRpdmUgcHJvY2VzcyBjaGFuZ2VkIGR1cmluZyBob3N0IHJlYWQnIH0KICBAeyBzdWNjZXNzPSR0cnVlOyBob3N0PVtFbnZpcm9ubWVudF06Ok1hY2hpbmVOYW1lOyBwaWQ9W2ludF0kcS5waWQ7IHByb2Nlc3NDcmVhdGVkVXRjPSRwLkNyZWF0aW9uRGF0ZS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygnbycpOwogICAgIGV4ZWN1dGFibGVQYXRoPSRwLkV4ZWN1dGFibGVQYXRoOyB3YWxsPSR3YWxsOyBtYXJrZXJzPSR2YWx1ZXM7IGNvdW50ZXJLaW5kPSd3aW5kb3dzX3FwYyc7IGNvdW50ZXJUaWNrcz0kdGlja3M7CiAgICAgY291bnRlckZyZXF1ZW5jeT1bRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6RnJlcXVlbmN5OyBoaWdoUmVzb2x1dGlvbj0kdHJ1ZSB9IHwgQ29udmVydFRvLUpzb24gLURlcHRoIDEyIC1Db21wcmVzcwp9IGNhdGNoIHsgW0NvbnNvbGVdOjpFcnJvci5Xcml0ZUxpbmUoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpOyBleGl0IDEgfQo=\", \"timeoutSeconds\": 12, \"reason\": \"Read exact owned busy-probe markers and native host clock without changing Fusion\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234613.2414894, + "mutating": false, + "stdout": "{\n \"durationMs\": 1438,\n \"exitCode\": 0,\n \"ok\": true,\n \"schemaVersion\": 1,\n \"status\": \"ok\",\n \"stderr\": \"\",\n \"stdout\": \"{\\\"markers\\\":{\\\"entered\\\":{\\\"sha256\\\":\\\"145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4\\\",\\\"bytes\\\":503,\\\"value\\\":{\\\"counterFrequency\\\":10000000,\\\"counterKind\\\":\\\"windows_qpc\\\",\\\"counterTicks\\\":3663048907271,\\\"host\\\":\\\"ADOM_DREW2\\\",\\\"kind\\\":\\\"entered\\\",\\\"monotonic\\\":366304.8903565,\\\"nonce\\\":\\\"7575c5bb7b3b474ab621f55d649416a4\\\",\\\"original\\\":{\\\"creationId\\\":\\\"70b2c575-f830-4751-9f88-2f1f3ab91fb1\\\",\\\"modified\\\":false,\\\"name\\\":\\\"Untitled\\\",\\\"saved\\\":false},\\\"pid\\\":41728,\\\"runId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\",\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"thread\\\":54084,\\\"wall\\\":1791234613.4198995},\\\"rawBase64\\\":\\\"eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=\\\"}},\\\"counterKind\\\":\\\"windows_qpc\\\",\\\"executablePath\\\":\\\"C:\\\\\\\\Users\\\\\\\\drew\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Autodesk\\\\\\\\webdeploy\\\\\\\\production\\\\\\\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\\\\\\\Fusion360.exe\\\",\\\"highResolution\\\":true,\\\"counterFrequency\\\":10000000,\\\"processCreatedUtc\\\":\\\"2026-10-05T21:01:46.6536380Z\\\",\\\"success\\\":true,\\\"counterTicks\\\":3663057354709,\\\"host\\\":\\\"ADOM_DREW2\\\",\\\"pid\\\":41728,\\\"wall\\\":1791234614.2516735}\\r\\n\",\n \"success\": true,\n \"timedOut\": false,\n \"timeoutSeconds\": 27\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234614.6986399, + "raw": { + "durationMs": 1438, + "exitCode": 0, + "ok": true, + "schemaVersion": 1, + "status": "ok", + "stderr": "", + "stdout": "{\"markers\":{\"entered\":{\"sha256\":\"145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4\",\"bytes\":503,\"value\":{\"counterFrequency\":10000000,\"counterKind\":\"windows_qpc\",\"counterTicks\":3663048907271,\"host\":\"ADOM_DREW2\",\"kind\":\"entered\",\"monotonic\":366304.8903565,\"nonce\":\"7575c5bb7b3b474ab621f55d649416a4\",\"original\":{\"creationId\":\"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\"modified\":false,\"name\":\"Untitled\",\"saved\":false},\"pid\":41728,\"runId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"thread\":54084,\"wall\":1791234613.4198995},\"rawBase64\":\"eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=\"}},\"counterKind\":\"windows_qpc\",\"executablePath\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\Autodesk\\\\webdeploy\\\\production\\\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\\\Fusion360.exe\",\"highResolution\":true,\"counterFrequency\":10000000,\"processCreatedUtc\":\"2026-10-05T21:01:46.6536380Z\",\"success\":true,\"counterTicks\":3663057354709,\"host\":\"ADOM_DREW2\",\"pid\":41728,\"wall\":1791234614.2516735}\r\n", + "success": true, + "timedOut": false, + "timeoutSeconds": 27 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0007-fusion_mech_operation_status.json b/docs/mechanical-verification/cp8/busy/calls/0007-fusion_mech_operation_status.json new file mode 100644 index 0000000..1feea33 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0007-fusion_mech_operation_status.json @@ -0,0 +1,113 @@ +{ + "target": "adom_drew2", + "verb": "fusion_mech_operation_status", + "args": { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth" + }, + "requestJson": "{\"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\", \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234614.699476, + "mutating": false, + "stdout": "{\n \"_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.\",\n \"currentSessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"durationMs\": 32,\n \"error\": \"\",\n \"historical\": false,\n \"history\": {\n \"createdAt\": 1791234223.44495,\n \"events\": [\n {\n \"at\": 1791234223.44495,\n \"phase\": \"admitted\"\n },\n {\n \"at\": 1791234223.4515686,\n \"phase\": \"dispatched\"\n },\n {\n \"at\": 1791234223.4627895,\n \"phase\": \"executing\"\n },\n {\n \"at\": 1791234223.534875,\n \"phase\": \"succeeded\"\n }\n ],\n \"observedDocument\": {\n \"creationId\": \"94431d29-0acf-4799-b677-3f564085aa9d\",\n \"dataFileId\": null,\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"\n },\n \"operation\": \"parameter_set\",\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"phase\": \"succeeded\",\n \"requestDigest\": \"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\n \"requestedTarget\": {\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\n \"revision\": \"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"\n },\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"sourceVersion\": \"1.12.0-dev.8\",\n \"storageVersion\": 1,\n \"updatedAt\": 1791234223.534875\n },\n \"nativeExecutionStarted\": null,\n \"observedResult\": null,\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"outcome\": \"recorded\",\n \"output\": \"{\\\"_timeoutHint\\\":\\\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\\\",\\\"currentSessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"historical\\\":false,\\\"history\\\":{\\\"createdAt\\\":1791234223.44495,\\\"events\\\":[{\\\"at\\\":1791234223.44495,\\\"phase\\\":\\\"admitted\\\"},{\\\"at\\\":1791234223.4515686,\\\"phase\\\":\\\"dispatched\\\"},{\\\"at\\\":1791234223.4627895,\\\"phase\\\":\\\"executing\\\"},{\\\"at\\\":1791234223.534875,\\\"phase\\\":\\\"succeeded\\\"}],\\\"observedDocument\\\":{\\\"creationId\\\":\\\"94431d29-0acf-4799-b677-3f564085aa9d\\\",\\\"dataFileId\\\":null,\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\"},\\\"operation\\\":\\\"parameter_set\\\",\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"phase\\\":\\\"succeeded\\\",\\\"requestDigest\\\":\\\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\\\",\\\"requestedTarget\\\":{\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\",\\\"revision\\\":\\\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\\\"},\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"sourceVersion\\\":\\\"1.12.0-dev.8\\\",\\\"storageVersion\\\":1,\\\"updatedAt\\\":1791234223.534875},\\\"nativeExecutionStarted\\\":null,\\\"observedResult\\\":null,\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"outcome\\\":\\\"recorded\\\",\\\"persistenceFailure\\\":null,\\\"phase\\\":\\\"succeeded\\\",\\\"reconciliationRequired\\\":false,\\\"result\\\":{\\\"data\\\":{\\\"health\\\":{\\\"complete\\\":true,\\\"computeSucceeded\\\":true,\\\"faults\\\":[],\\\"healthy\\\":true,\\\"suppressed\\\":[],\\\"timelineCount\\\":2,\\\"unknown\\\":[]},\\\"parameter\\\":{\\\"displayUnit\\\":\\\"mm\\\",\\\"expression\\\":\\\"20 mm\\\",\\\"name\\\":\\\"depth\\\",\\\"unit\\\":\\\"mm\\\",\\\"value\\\":20.0},\\\"recoveryStrategy\\\":\\\"restore_parameter_expression\\\",\\\"target\\\":{\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\",\\\"revision\\\":\\\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\\\"},\\\"transactional\\\":false},\\\"durability\\\":{\\\"phase\\\":\\\"succeeded\\\",\\\"recordedSessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"storageVersion\\\":1,\\\"terminalRecorded\\\":true},\\\"operation\\\":\\\"parameter_set\\\",\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"success\\\":true},\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"state\\\":\\\"succeeded\\\",\\\"statusVerb\\\":\\\"fusion_get_app_state\\\",\\\"success\\\":true,\\\"timeoutSeconds\\\":60}\",\n \"persistenceFailure\": null,\n \"phase\": \"succeeded\",\n \"reconciliationRequired\": false,\n \"result\": {\n \"data\": {\n \"health\": {\n \"complete\": true,\n \"computeSucceeded\": true,\n \"faults\": [],\n \"healthy\": true,\n \"suppressed\": [],\n \"timelineCount\": 2,\n \"unknown\": []\n },\n \"parameter\": {\n \"displayUnit\": \"mm\",\n \"expression\": \"20 mm\",\n \"name\": \"depth\",\n \"unit\": \"mm\",\n \"value\": 20.0\n },\n \"recoveryStrategy\": \"restore_parameter_expression\",\n \"target\": {\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\n \"revision\": \"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"\n },\n \"transactional\": false\n },\n \"durability\": {\n \"phase\": \"succeeded\",\n \"recordedSessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"storageVersion\": 1,\n \"terminalRecorded\": true\n },\n \"operation\": \"parameter_set\",\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"success\": true\n },\n \"schemaVersion\": 1,\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"state\": \"succeeded\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234614.7378848, + "raw": { + "_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.", + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "durationMs": 32, + "error": "", + "historical": false, + "history": { + "createdAt": 1791234223.44495, + "events": [ + { + "at": 1791234223.44495, + "phase": "admitted" + }, + { + "at": 1791234223.4515686, + "phase": "dispatched" + }, + { + "at": 1791234223.4627895, + "phase": "executing" + }, + { + "at": 1791234223.534875, + "phase": "succeeded" + } + ], + "observedDocument": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38" + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "phase": "succeeded", + "requestDigest": "13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828", + "requestedTarget": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234223.534875 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "outcome": "recorded", + "output": "{\"_timeoutHint\":\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\",\"currentSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"historical\":false,\"history\":{\"createdAt\":1791234223.44495,\"events\":[{\"at\":1791234223.44495,\"phase\":\"admitted\"},{\"at\":1791234223.4515686,\"phase\":\"dispatched\"},{\"at\":1791234223.4627895,\"phase\":\"executing\"},{\"at\":1791234223.534875,\"phase\":\"succeeded\"}],\"observedDocument\":{\"creationId\":\"94431d29-0acf-4799-b677-3f564085aa9d\",\"dataFileId\":null,\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"phase\":\"succeeded\",\"requestDigest\":\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\"requestedTarget\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"sourceVersion\":\"1.12.0-dev.8\",\"storageVersion\":1,\"updatedAt\":1791234223.534875},\"nativeExecutionStarted\":null,\"observedResult\":null,\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"outcome\":\"recorded\",\"persistenceFailure\":null,\"phase\":\"succeeded\",\"reconciliationRequired\":false,\"result\":{\"data\":{\"health\":{\"complete\":true,\"computeSucceeded\":true,\"faults\":[],\"healthy\":true,\"suppressed\":[],\"timelineCount\":2,\"unknown\":[]},\"parameter\":{\"displayUnit\":\"mm\",\"expression\":\"20 mm\",\"name\":\"depth\",\"unit\":\"mm\",\"value\":20.0},\"recoveryStrategy\":\"restore_parameter_expression\",\"target\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"},\"transactional\":false},\"durability\":{\"phase\":\"succeeded\",\"recordedSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"storageVersion\":1,\"terminalRecorded\":true},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"success\":true},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"state\":\"succeeded\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "persistenceFailure": null, + "phase": "succeeded", + "reconciliationRequired": false, + "result": { + "data": { + "health": { + "complete": true, + "computeSucceeded": true, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "parameter": { + "displayUnit": "mm", + "expression": "20 mm", + "name": "depth", + "unit": "mm", + "value": 20.0 + }, + "recoveryStrategy": "restore_parameter_expression", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "transactional": false + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "schemaVersion": 1, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "succeeded", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0008-run_script.json b/docs/mechanical-verification/cp8/busy/calls/0008-run_script.json new file mode 100644 index 0000000..e2e10c0 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0008-run_script.json @@ -0,0 +1,31 @@ +{ + "target": "adom_drew2", + "verb": "run_script", + "args": { + "interpreter": "powershell", + "scriptB64": "CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcSA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUp5ZFc1SlpDSTZJQ0l5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGaklpd2dJbk5sYzNOcGIyNUpaQ0k2SUNJell6VmxOamMwTkMxa01XRmpMVFF5TnpZdE9USTJOQzFpTURWaE9UWmpOVEZsTTJRaUxDQWlhRzl6ZENJNklDSkJSRTlOWDBSU1JWY3lJaXdnSW5CcFpDSTZJRFF4TnpJNExDQWljMk55WVhSamFDSTZJQ0pET2k5VmMyVnljeTlrY21WM0wwRndjRVJoZEdFdlRHOWpZV3d2VkdWdGNDOWhaRzl0TFdaMWMybHZiaTF5WVd4d2FDOHlNREkyTVRBd05WUXlNVEF6TVRCYUxUVTJPR1psTnpnMk9XUXdZalF4WkRWaE9ETXdNVFE0TVRGbVpURTNNR0ZqSWl3Z0ltNXZibU5sSWpvZ0lqYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwSWl3Z0ltOXlhV2RwYm1Gc0lqb2dleUpqY21WaGRHbHZia2xrSWpvZ0lqY3dZakpqTlRjMUxXWTRNekF0TkRjMU1TMDVaamc0TFRKbU1XWXpZV0k1TVdaaU1TSXNJQ0p0YjJScFptbGxaQ0k2SUdaaGJITmxMQ0FpYm1GdFpTSTZJQ0pWYm5ScGRHeGxaQ0lzSUNKellYWmxaQ0k2SUdaaGJITmxmU3dnSW5CaGRHaHpJam9nZXlKbGJuUmxjbVZrSWpvZ0lrTTZYRnhWYzJWeWMxeGNaSEpsZDF4Y1FYQndSR0YwWVZ4Y1RHOWpZV3hjWEZSbGJYQmNYR0ZrYjIwdFpuVnphVzl1TFhKaGJIQm9YRnd5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGalhGeGlkWE41TFRjMU56VmpOV0ppTjJJellqUTNOR0ZpTmpJeFpqVTFaRFkwT1RReE5tRTBYRnhsYm5SbGNtVmtMbXB6YjI0aUxDQWlaWGhwZEdWa0lqb2dJa002WEZ4VmMyVnljMXhjWkhKbGQxeGNRWEJ3UkdGMFlWeGNURzlqWVd4Y1hGUmxiWEJjWEdGa2IyMHRablZ6YVc5dUxYSmhiSEJvWEZ3eU1ESTJNVEF3TlZReU1UQXpNVEJhTFRVMk9HWmxOemcyT1dRd1lqUXhaRFZoT0RNd01UUTRNVEZtWlRFM01HRmpYRnhpZFhONUxUYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwWEZ4bGVHbDBaV1F1YW5OdmJpSjlMQ0FpYlc5a1pTSTZJQ0pqYkc5amF5SjknKSkgfCBDb252ZXJ0RnJvbS1Kc29uCiAgaWYgKFtFbnZpcm9ubWVudF06Ok1hY2hpbmVOYW1lIC1pbmUgJHEuaG9zdCkgeyB0aHJvdyAnSG9zdCBpZGVudGl0eSBkaWZmZXJzJyB9CiAgJHAgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyBbaW50XSRxLnBpZCkKICBpZiAoLW5vdCAkcCAtb3IgJHAuTmFtZSAtaW5lICdGdXNpb24zNjAuZXhlJykgeyB0aHJvdyAnRXhwZWN0ZWQgRnVzaW9uIHByb2Nlc3MgaXMgYWJzZW50JyB9CiAgJHNjcmF0Y2ggPSBbSU8uUGF0aF06OkdldEZ1bGxQYXRoKFtzdHJpbmddJHEuc2NyYXRjaCkKICBpZiAoW0lPLlBhdGhdOjpHZXRGaWxlTmFtZSgkc2NyYXRjaCkgLWNuZSAkcS5ydW5JZCkgeyB0aHJvdyAnU2NyYXRjaCBydW4gaWRlbnRpdHkgZGlmZmVycycgfQogICR3YWxrID0gR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JhdGNoCiAgd2hpbGUgKCRudWxsIC1uZSAkd2FsaykgewogICAgaWYgKCgkd2Fsay5BdHRyaWJ1dGVzIC1iYW5kIFtJTy5GaWxlQXR0cmlidXRlc106OlJlcGFyc2VQb2ludCkgLW5lIDApIHsgdGhyb3cgJ1NjcmF0Y2ggdHJhdmVyc2VzIGEgcmVwYXJzZSBwb2ludCcgfQogICAgJHdhbGsgPSAkd2Fsay5QYXJlbnQKICB9CiAgZnVuY3Rpb24gUmVhZC1NYXJrZXIoW3N0cmluZ10kcGF0aCkgewogICAgJGZ1bGwgPSBbSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRwYXRoKQogICAgJGZvbGRlciA9IFtJTy5QYXRoXTo6R2V0RGlyZWN0b3J5TmFtZSgkZnVsbCkKICAgIGlmIChbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJGZvbGRlcikgLWluZSAkc2NyYXRjaCAtb3IgW0lPLlBhdGhdOjpHZXRGaWxlTmFtZSgkZm9sZGVyKSAtY25lICgnYnVzeS0nICsgJHEubm9uY2UpKSB7IHRocm93ICdNYXJrZXIgZXNjYXBlZCBvd25lZCBzY3JhdGNoJyB9CiAgICBmb3JlYWNoICgkaXRlbSBpbiBAKChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZvbGRlciksIChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZ1bGwpKSkgewogICAgICBpZiAoKCRpdGVtLkF0dHJpYnV0ZXMgLWJhbmQgW0lPLkZpbGVBdHRyaWJ1dGVzXTo6UmVwYXJzZVBvaW50KSAtbmUgMCkgeyB0aHJvdyAnTWFya2VyIGlzIGxpbmtlZCcgfQogICAgfQogICAgJGZpbGUgPSBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZ1bGwKICAgIGlmICgkZmlsZS5MZW5ndGggLWd0IDQwOTYgLW9yICRmaWxlLkxlbmd0aCAtbGUgMCkgeyB0aHJvdyAnTWFya2VyIHNpemUgaW52YWxpZCcgfQogICAgJGJ5dGVzID0gW0lPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJGZ1bGwpCiAgICBpZiAoJGJ5dGVzLkxlbmd0aCAtZ3QgNDA5NikgeyB0aHJvdyAnTWFya2VyIGV4Y2VlZGVkIHJlYWQgYnVkZ2V0JyB9CiAgICAkc2hhID0gW1NlY3VyaXR5LkNyeXB0b2dyYXBoeS5TSEEyNTZdOjpDcmVhdGUoKQogICAgdHJ5IHsgJGhhc2ggPSBbQml0Q29udmVydGVyXTo6VG9TdHJpbmcoJHNoYS5Db21wdXRlSGFzaCgkYnl0ZXMpKS5SZXBsYWNlKCctJywnJykuVG9Mb3dlckludmFyaWFudCgpIH0gZmluYWxseSB7ICRzaGEuRGlzcG9zZSgpIH0KICAgIHJldHVybiBAeyB2YWx1ZT0oW1RleHQuRW5jb2RpbmddOjpVVEY4LkdldFN0cmluZygkYnl0ZXMpIHwgQ29udmVydEZyb20tSnNvbik7IHNoYTI1Nj0kaGFzaDsgYnl0ZXM9JGJ5dGVzLkxlbmd0aDsgcmF3QmFzZTY0PVtDb252ZXJ0XTo6VG9CYXNlNjRTdHJpbmcoJGJ5dGVzKSB9CiAgfQogICR2YWx1ZXMgPSBAe30KICBpZiAoJHEubW9kZSAtZXEgJ2luaXRpYWwnKSB7CiAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAoW0lPLlBhdGhdOjpHZXREaXJlY3RvcnlOYW1lKCRxLnBhdGhzLmVudGVyZWQpKSkgeyB0aHJvdyAnUHJvYmUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzJyB9CiAgfQogIGlmICgkcS5tb2RlIC1lcSAnZW50ZXJlZCcpIHsKICAgICR3YWl0ID0gW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OlN0YXJ0TmV3KCkKICAgIHdoaWxlICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxLnBhdGhzLmVudGVyZWQpKSB7CiAgICAgIGlmICgkd2FpdC5FbGFwc2VkLlRvdGFsU2Vjb25kcyAtZ2UgNSkgeyB0aHJvdyAnRW50ZXJlZCBtYXJrZXIgd2FzIG5vdCBvYnNlcnZlZCB3aXRoaW4gZml2ZSBzZWNvbmRzJyB9CiAgICAgIFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjUKICAgIH0KICAgICR2YWx1ZXMuZW50ZXJlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmVudGVyZWQKICB9CiAgaWYgKCRxLm1vZGUgLWVxICdmaW5hbCcpIHsKICAgICR2YWx1ZXMuZW50ZXJlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmVudGVyZWQKICAgICR2YWx1ZXMuZXhpdGVkID0gUmVhZC1NYXJrZXIgJHEucGF0aHMuZXhpdGVkCiAgfQogICR3YWxsID0gKFtEYXRlVGltZU9mZnNldF06OlV0Y05vdyAtIFtEYXRlVGltZU9mZnNldF0nMTk3MC0wMS0wMVQwMDowMDowMFonKS5Ub3RhbFNlY29uZHMKICBpZiAoLW5vdCBbRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6SXNIaWdoUmVzb2x1dGlvbikgeyB0aHJvdyAnU3RvcHdhdGNoIGlzIG5vdCB1c2luZyB0aGUgaGlnaC1yZXNvbHV0aW9uIHBlcmZvcm1hbmNlIGNvdW50ZXInIH0KICAkdGlja3MgPSBbRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6R2V0VGltZXN0YW1wKCkKICAkYWdhaW4gPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyBbaW50XSRxLnBpZCkKICBpZiAoLW5vdCAkYWdhaW4gLW9yICRhZ2Fpbi5DcmVhdGlvbkRhdGUgLW5lICRwLkNyZWF0aW9uRGF0ZSAtb3IgJGFnYWluLkV4ZWN1dGFibGVQYXRoIC1pbmUgJHAuRXhlY3V0YWJsZVBhdGgpIHsgdGhyb3cgJ05hdGl2ZSBwcm9jZXNzIGNoYW5nZWQgZHVyaW5nIGhvc3QgcmVhZCcgfQogIEB7IHN1Y2Nlc3M9JHRydWU7IGhvc3Q9W0Vudmlyb25tZW50XTo6TWFjaGluZU5hbWU7IHBpZD1baW50XSRxLnBpZDsgcHJvY2Vzc0NyZWF0ZWRVdGM9JHAuQ3JlYXRpb25EYXRlLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5nKCdvJyk7CiAgICAgZXhlY3V0YWJsZVBhdGg9JHAuRXhlY3V0YWJsZVBhdGg7IHdhbGw9JHdhbGw7IG1hcmtlcnM9JHZhbHVlczsgY291bnRlcktpbmQ9J3dpbmRvd3NfcXBjJzsgY291bnRlclRpY2tzPSR0aWNrczsKICAgICBjb3VudGVyRnJlcXVlbmN5PVtEaWFnbm9zdGljcy5TdG9wd2F0Y2hdOjpGcmVxdWVuY3k7IGhpZ2hSZXNvbHV0aW9uPSR0cnVlIH0gfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMTIgLUNvbXByZXNzCn0gY2F0Y2ggeyBbQ29uc29sZV06OkVycm9yLldyaXRlTGluZSgkXy5FeGNlcHRpb24uTWVzc2FnZSk7IGV4aXQgMSB9Cg==", + "timeoutSeconds": 12, + "reason": "Read exact owned busy-probe markers and native host clock without changing Fusion" + }, + "requestJson": "{\"interpreter\": \"powershell\", \"scriptB64\": \"CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcSA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUp5ZFc1SlpDSTZJQ0l5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGaklpd2dJbk5sYzNOcGIyNUpaQ0k2SUNJell6VmxOamMwTkMxa01XRmpMVFF5TnpZdE9USTJOQzFpTURWaE9UWmpOVEZsTTJRaUxDQWlhRzl6ZENJNklDSkJSRTlOWDBSU1JWY3lJaXdnSW5CcFpDSTZJRFF4TnpJNExDQWljMk55WVhSamFDSTZJQ0pET2k5VmMyVnljeTlrY21WM0wwRndjRVJoZEdFdlRHOWpZV3d2VkdWdGNDOWhaRzl0TFdaMWMybHZiaTF5WVd4d2FDOHlNREkyTVRBd05WUXlNVEF6TVRCYUxUVTJPR1psTnpnMk9XUXdZalF4WkRWaE9ETXdNVFE0TVRGbVpURTNNR0ZqSWl3Z0ltNXZibU5sSWpvZ0lqYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwSWl3Z0ltOXlhV2RwYm1Gc0lqb2dleUpqY21WaGRHbHZia2xrSWpvZ0lqY3dZakpqTlRjMUxXWTRNekF0TkRjMU1TMDVaamc0TFRKbU1XWXpZV0k1TVdaaU1TSXNJQ0p0YjJScFptbGxaQ0k2SUdaaGJITmxMQ0FpYm1GdFpTSTZJQ0pWYm5ScGRHeGxaQ0lzSUNKellYWmxaQ0k2SUdaaGJITmxmU3dnSW5CaGRHaHpJam9nZXlKbGJuUmxjbVZrSWpvZ0lrTTZYRnhWYzJWeWMxeGNaSEpsZDF4Y1FYQndSR0YwWVZ4Y1RHOWpZV3hjWEZSbGJYQmNYR0ZrYjIwdFpuVnphVzl1TFhKaGJIQm9YRnd5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGalhGeGlkWE41TFRjMU56VmpOV0ppTjJJellqUTNOR0ZpTmpJeFpqVTFaRFkwT1RReE5tRTBYRnhsYm5SbGNtVmtMbXB6YjI0aUxDQWlaWGhwZEdWa0lqb2dJa002WEZ4VmMyVnljMXhjWkhKbGQxeGNRWEJ3UkdGMFlWeGNURzlqWVd4Y1hGUmxiWEJjWEdGa2IyMHRablZ6YVc5dUxYSmhiSEJvWEZ3eU1ESTJNVEF3TlZReU1UQXpNVEJhTFRVMk9HWmxOemcyT1dRd1lqUXhaRFZoT0RNd01UUTRNVEZtWlRFM01HRmpYRnhpZFhONUxUYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwWEZ4bGVHbDBaV1F1YW5OdmJpSjlMQ0FpYlc5a1pTSTZJQ0pqYkc5amF5SjknKSkgfCBDb252ZXJ0RnJvbS1Kc29uCiAgaWYgKFtFbnZpcm9ubWVudF06Ok1hY2hpbmVOYW1lIC1pbmUgJHEuaG9zdCkgeyB0aHJvdyAnSG9zdCBpZGVudGl0eSBkaWZmZXJzJyB9CiAgJHAgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyBbaW50XSRxLnBpZCkKICBpZiAoLW5vdCAkcCAtb3IgJHAuTmFtZSAtaW5lICdGdXNpb24zNjAuZXhlJykgeyB0aHJvdyAnRXhwZWN0ZWQgRnVzaW9uIHByb2Nlc3MgaXMgYWJzZW50JyB9CiAgJHNjcmF0Y2ggPSBbSU8uUGF0aF06OkdldEZ1bGxQYXRoKFtzdHJpbmddJHEuc2NyYXRjaCkKICBpZiAoW0lPLlBhdGhdOjpHZXRGaWxlTmFtZSgkc2NyYXRjaCkgLWNuZSAkcS5ydW5JZCkgeyB0aHJvdyAnU2NyYXRjaCBydW4gaWRlbnRpdHkgZGlmZmVycycgfQogICR3YWxrID0gR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JhdGNoCiAgd2hpbGUgKCRudWxsIC1uZSAkd2FsaykgewogICAgaWYgKCgkd2Fsay5BdHRyaWJ1dGVzIC1iYW5kIFtJTy5GaWxlQXR0cmlidXRlc106OlJlcGFyc2VQb2ludCkgLW5lIDApIHsgdGhyb3cgJ1NjcmF0Y2ggdHJhdmVyc2VzIGEgcmVwYXJzZSBwb2ludCcgfQogICAgJHdhbGsgPSAkd2Fsay5QYXJlbnQKICB9CiAgZnVuY3Rpb24gUmVhZC1NYXJrZXIoW3N0cmluZ10kcGF0aCkgewogICAgJGZ1bGwgPSBbSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRwYXRoKQogICAgJGZvbGRlciA9IFtJTy5QYXRoXTo6R2V0RGlyZWN0b3J5TmFtZSgkZnVsbCkKICAgIGlmIChbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJGZvbGRlcikgLWluZSAkc2NyYXRjaCAtb3IgW0lPLlBhdGhdOjpHZXRGaWxlTmFtZSgkZm9sZGVyKSAtY25lICgnYnVzeS0nICsgJHEubm9uY2UpKSB7IHRocm93ICdNYXJrZXIgZXNjYXBlZCBvd25lZCBzY3JhdGNoJyB9CiAgICBmb3JlYWNoICgkaXRlbSBpbiBAKChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZvbGRlciksIChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZ1bGwpKSkgewogICAgICBpZiAoKCRpdGVtLkF0dHJpYnV0ZXMgLWJhbmQgW0lPLkZpbGVBdHRyaWJ1dGVzXTo6UmVwYXJzZVBvaW50KSAtbmUgMCkgeyB0aHJvdyAnTWFya2VyIGlzIGxpbmtlZCcgfQogICAgfQogICAgJGZpbGUgPSBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZ1bGwKICAgIGlmICgkZmlsZS5MZW5ndGggLWd0IDQwOTYgLW9yICRmaWxlLkxlbmd0aCAtbGUgMCkgeyB0aHJvdyAnTWFya2VyIHNpemUgaW52YWxpZCcgfQogICAgJGJ5dGVzID0gW0lPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJGZ1bGwpCiAgICBpZiAoJGJ5dGVzLkxlbmd0aCAtZ3QgNDA5NikgeyB0aHJvdyAnTWFya2VyIGV4Y2VlZGVkIHJlYWQgYnVkZ2V0JyB9CiAgICAkc2hhID0gW1NlY3VyaXR5LkNyeXB0b2dyYXBoeS5TSEEyNTZdOjpDcmVhdGUoKQogICAgdHJ5IHsgJGhhc2ggPSBbQml0Q29udmVydGVyXTo6VG9TdHJpbmcoJHNoYS5Db21wdXRlSGFzaCgkYnl0ZXMpKS5SZXBsYWNlKCctJywnJykuVG9Mb3dlckludmFyaWFudCgpIH0gZmluYWxseSB7ICRzaGEuRGlzcG9zZSgpIH0KICAgIHJldHVybiBAeyB2YWx1ZT0oW1RleHQuRW5jb2RpbmddOjpVVEY4LkdldFN0cmluZygkYnl0ZXMpIHwgQ29udmVydEZyb20tSnNvbik7IHNoYTI1Nj0kaGFzaDsgYnl0ZXM9JGJ5dGVzLkxlbmd0aDsgcmF3QmFzZTY0PVtDb252ZXJ0XTo6VG9CYXNlNjRTdHJpbmcoJGJ5dGVzKSB9CiAgfQogICR2YWx1ZXMgPSBAe30KICBpZiAoJHEubW9kZSAtZXEgJ2luaXRpYWwnKSB7CiAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAoW0lPLlBhdGhdOjpHZXREaXJlY3RvcnlOYW1lKCRxLnBhdGhzLmVudGVyZWQpKSkgeyB0aHJvdyAnUHJvYmUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzJyB9CiAgfQogIGlmICgkcS5tb2RlIC1lcSAnZW50ZXJlZCcpIHsKICAgICR3YWl0ID0gW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OlN0YXJ0TmV3KCkKICAgIHdoaWxlICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxLnBhdGhzLmVudGVyZWQpKSB7CiAgICAgIGlmICgkd2FpdC5FbGFwc2VkLlRvdGFsU2Vjb25kcyAtZ2UgNSkgeyB0aHJvdyAnRW50ZXJlZCBtYXJrZXIgd2FzIG5vdCBvYnNlcnZlZCB3aXRoaW4gZml2ZSBzZWNvbmRzJyB9CiAgICAgIFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjUKICAgIH0KICAgICR2YWx1ZXMuZW50ZXJlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmVudGVyZWQKICB9CiAgaWYgKCRxLm1vZGUgLWVxICdmaW5hbCcpIHsKICAgICR2YWx1ZXMuZW50ZXJlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmVudGVyZWQKICAgICR2YWx1ZXMuZXhpdGVkID0gUmVhZC1NYXJrZXIgJHEucGF0aHMuZXhpdGVkCiAgfQogICR3YWxsID0gKFtEYXRlVGltZU9mZnNldF06OlV0Y05vdyAtIFtEYXRlVGltZU9mZnNldF0nMTk3MC0wMS0wMVQwMDowMDowMFonKS5Ub3RhbFNlY29uZHMKICBpZiAoLW5vdCBbRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6SXNIaWdoUmVzb2x1dGlvbikgeyB0aHJvdyAnU3RvcHdhdGNoIGlzIG5vdCB1c2luZyB0aGUgaGlnaC1yZXNvbHV0aW9uIHBlcmZvcm1hbmNlIGNvdW50ZXInIH0KICAkdGlja3MgPSBbRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6R2V0VGltZXN0YW1wKCkKICAkYWdhaW4gPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyBbaW50XSRxLnBpZCkKICBpZiAoLW5vdCAkYWdhaW4gLW9yICRhZ2Fpbi5DcmVhdGlvbkRhdGUgLW5lICRwLkNyZWF0aW9uRGF0ZSAtb3IgJGFnYWluLkV4ZWN1dGFibGVQYXRoIC1pbmUgJHAuRXhlY3V0YWJsZVBhdGgpIHsgdGhyb3cgJ05hdGl2ZSBwcm9jZXNzIGNoYW5nZWQgZHVyaW5nIGhvc3QgcmVhZCcgfQogIEB7IHN1Y2Nlc3M9JHRydWU7IGhvc3Q9W0Vudmlyb25tZW50XTo6TWFjaGluZU5hbWU7IHBpZD1baW50XSRxLnBpZDsgcHJvY2Vzc0NyZWF0ZWRVdGM9JHAuQ3JlYXRpb25EYXRlLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5nKCdvJyk7CiAgICAgZXhlY3V0YWJsZVBhdGg9JHAuRXhlY3V0YWJsZVBhdGg7IHdhbGw9JHdhbGw7IG1hcmtlcnM9JHZhbHVlczsgY291bnRlcktpbmQ9J3dpbmRvd3NfcXBjJzsgY291bnRlclRpY2tzPSR0aWNrczsKICAgICBjb3VudGVyRnJlcXVlbmN5PVtEaWFnbm9zdGljcy5TdG9wd2F0Y2hdOjpGcmVxdWVuY3k7IGhpZ2hSZXNvbHV0aW9uPSR0cnVlIH0gfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMTIgLUNvbXByZXNzCn0gY2F0Y2ggeyBbQ29uc29sZV06OkVycm9yLldyaXRlTGluZSgkXy5FeGNlcHRpb24uTWVzc2FnZSk7IGV4aXQgMSB9Cg==\", \"timeoutSeconds\": 12, \"reason\": \"Read exact owned busy-probe markers and native host clock without changing Fusion\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234614.7397597, + "mutating": false, + "stdout": "{\n \"durationMs\": 1346,\n \"exitCode\": 0,\n \"ok\": true,\n \"schemaVersion\": 1,\n \"status\": \"ok\",\n \"stderr\": \"\",\n \"stdout\": \"{\\\"markers\\\":{},\\\"counterKind\\\":\\\"windows_qpc\\\",\\\"executablePath\\\":\\\"C:\\\\\\\\Users\\\\\\\\drew\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Autodesk\\\\\\\\webdeploy\\\\\\\\production\\\\\\\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\\\\\\\Fusion360.exe\\\",\\\"highResolution\\\":true,\\\"counterFrequency\\\":10000000,\\\"processCreatedUtc\\\":\\\"2026-10-05T21:01:46.6536380Z\\\",\\\"success\\\":true,\\\"counterTicks\\\":3663071394650,\\\"host\\\":\\\"ADOM_DREW2\\\",\\\"pid\\\":41728,\\\"wall\\\":1791234615.6569302}\\r\\n\",\n \"success\": true,\n \"timedOut\": false,\n \"timeoutSeconds\": 27\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234616.105913, + "raw": { + "durationMs": 1346, + "exitCode": 0, + "ok": true, + "schemaVersion": 1, + "status": "ok", + "stderr": "", + "stdout": "{\"markers\":{},\"counterKind\":\"windows_qpc\",\"executablePath\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\Autodesk\\\\webdeploy\\\\production\\\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\\\Fusion360.exe\",\"highResolution\":true,\"counterFrequency\":10000000,\"processCreatedUtc\":\"2026-10-05T21:01:46.6536380Z\",\"success\":true,\"counterTicks\":3663071394650,\"host\":\"ADOM_DREW2\",\"pid\":41728,\"wall\":1791234615.6569302}\r\n", + "success": true, + "timedOut": false, + "timeoutSeconds": 27 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0009-run_script.json b/docs/mechanical-verification/cp8/busy/calls/0009-run_script.json new file mode 100644 index 0000000..f141939 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0009-run_script.json @@ -0,0 +1,31 @@ +{ + "target": "adom_drew2", + "verb": "run_script", + "args": { + "interpreter": "powershell", + "scriptB64": "CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcSA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUp5ZFc1SlpDSTZJQ0l5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGaklpd2dJbk5sYzNOcGIyNUpaQ0k2SUNJell6VmxOamMwTkMxa01XRmpMVFF5TnpZdE9USTJOQzFpTURWaE9UWmpOVEZsTTJRaUxDQWlhRzl6ZENJNklDSkJSRTlOWDBSU1JWY3lJaXdnSW5CcFpDSTZJRFF4TnpJNExDQWljMk55WVhSamFDSTZJQ0pET2k5VmMyVnljeTlrY21WM0wwRndjRVJoZEdFdlRHOWpZV3d2VkdWdGNDOWhaRzl0TFdaMWMybHZiaTF5WVd4d2FDOHlNREkyTVRBd05WUXlNVEF6TVRCYUxUVTJPR1psTnpnMk9XUXdZalF4WkRWaE9ETXdNVFE0TVRGbVpURTNNR0ZqSWl3Z0ltNXZibU5sSWpvZ0lqYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwSWl3Z0ltOXlhV2RwYm1Gc0lqb2dleUpqY21WaGRHbHZia2xrSWpvZ0lqY3dZakpqTlRjMUxXWTRNekF0TkRjMU1TMDVaamc0TFRKbU1XWXpZV0k1TVdaaU1TSXNJQ0p0YjJScFptbGxaQ0k2SUdaaGJITmxMQ0FpYm1GdFpTSTZJQ0pWYm5ScGRHeGxaQ0lzSUNKellYWmxaQ0k2SUdaaGJITmxmU3dnSW5CaGRHaHpJam9nZXlKbGJuUmxjbVZrSWpvZ0lrTTZYRnhWYzJWeWMxeGNaSEpsZDF4Y1FYQndSR0YwWVZ4Y1RHOWpZV3hjWEZSbGJYQmNYR0ZrYjIwdFpuVnphVzl1TFhKaGJIQm9YRnd5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGalhGeGlkWE41TFRjMU56VmpOV0ppTjJJellqUTNOR0ZpTmpJeFpqVTFaRFkwT1RReE5tRTBYRnhsYm5SbGNtVmtMbXB6YjI0aUxDQWlaWGhwZEdWa0lqb2dJa002WEZ4VmMyVnljMXhjWkhKbGQxeGNRWEJ3UkdGMFlWeGNURzlqWVd4Y1hGUmxiWEJjWEdGa2IyMHRablZ6YVc5dUxYSmhiSEJvWEZ3eU1ESTJNVEF3TlZReU1UQXpNVEJhTFRVMk9HWmxOemcyT1dRd1lqUXhaRFZoT0RNd01UUTRNVEZtWlRFM01HRmpYRnhpZFhONUxUYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwWEZ4bGVHbDBaV1F1YW5OdmJpSjlMQ0FpYlc5a1pTSTZJQ0ptYVc1aGJDSjknKSkgfCBDb252ZXJ0RnJvbS1Kc29uCiAgaWYgKFtFbnZpcm9ubWVudF06Ok1hY2hpbmVOYW1lIC1pbmUgJHEuaG9zdCkgeyB0aHJvdyAnSG9zdCBpZGVudGl0eSBkaWZmZXJzJyB9CiAgJHAgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyBbaW50XSRxLnBpZCkKICBpZiAoLW5vdCAkcCAtb3IgJHAuTmFtZSAtaW5lICdGdXNpb24zNjAuZXhlJykgeyB0aHJvdyAnRXhwZWN0ZWQgRnVzaW9uIHByb2Nlc3MgaXMgYWJzZW50JyB9CiAgJHNjcmF0Y2ggPSBbSU8uUGF0aF06OkdldEZ1bGxQYXRoKFtzdHJpbmddJHEuc2NyYXRjaCkKICBpZiAoW0lPLlBhdGhdOjpHZXRGaWxlTmFtZSgkc2NyYXRjaCkgLWNuZSAkcS5ydW5JZCkgeyB0aHJvdyAnU2NyYXRjaCBydW4gaWRlbnRpdHkgZGlmZmVycycgfQogICR3YWxrID0gR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JhdGNoCiAgd2hpbGUgKCRudWxsIC1uZSAkd2FsaykgewogICAgaWYgKCgkd2Fsay5BdHRyaWJ1dGVzIC1iYW5kIFtJTy5GaWxlQXR0cmlidXRlc106OlJlcGFyc2VQb2ludCkgLW5lIDApIHsgdGhyb3cgJ1NjcmF0Y2ggdHJhdmVyc2VzIGEgcmVwYXJzZSBwb2ludCcgfQogICAgJHdhbGsgPSAkd2Fsay5QYXJlbnQKICB9CiAgZnVuY3Rpb24gUmVhZC1NYXJrZXIoW3N0cmluZ10kcGF0aCkgewogICAgJGZ1bGwgPSBbSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRwYXRoKQogICAgJGZvbGRlciA9IFtJTy5QYXRoXTo6R2V0RGlyZWN0b3J5TmFtZSgkZnVsbCkKICAgIGlmIChbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJGZvbGRlcikgLWluZSAkc2NyYXRjaCAtb3IgW0lPLlBhdGhdOjpHZXRGaWxlTmFtZSgkZm9sZGVyKSAtY25lICgnYnVzeS0nICsgJHEubm9uY2UpKSB7IHRocm93ICdNYXJrZXIgZXNjYXBlZCBvd25lZCBzY3JhdGNoJyB9CiAgICBmb3JlYWNoICgkaXRlbSBpbiBAKChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZvbGRlciksIChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZ1bGwpKSkgewogICAgICBpZiAoKCRpdGVtLkF0dHJpYnV0ZXMgLWJhbmQgW0lPLkZpbGVBdHRyaWJ1dGVzXTo6UmVwYXJzZVBvaW50KSAtbmUgMCkgeyB0aHJvdyAnTWFya2VyIGlzIGxpbmtlZCcgfQogICAgfQogICAgJGZpbGUgPSBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZ1bGwKICAgIGlmICgkZmlsZS5MZW5ndGggLWd0IDQwOTYgLW9yICRmaWxlLkxlbmd0aCAtbGUgMCkgeyB0aHJvdyAnTWFya2VyIHNpemUgaW52YWxpZCcgfQogICAgJGJ5dGVzID0gW0lPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJGZ1bGwpCiAgICBpZiAoJGJ5dGVzLkxlbmd0aCAtZ3QgNDA5NikgeyB0aHJvdyAnTWFya2VyIGV4Y2VlZGVkIHJlYWQgYnVkZ2V0JyB9CiAgICAkc2hhID0gW1NlY3VyaXR5LkNyeXB0b2dyYXBoeS5TSEEyNTZdOjpDcmVhdGUoKQogICAgdHJ5IHsgJGhhc2ggPSBbQml0Q29udmVydGVyXTo6VG9TdHJpbmcoJHNoYS5Db21wdXRlSGFzaCgkYnl0ZXMpKS5SZXBsYWNlKCctJywnJykuVG9Mb3dlckludmFyaWFudCgpIH0gZmluYWxseSB7ICRzaGEuRGlzcG9zZSgpIH0KICAgIHJldHVybiBAeyB2YWx1ZT0oW1RleHQuRW5jb2RpbmddOjpVVEY4LkdldFN0cmluZygkYnl0ZXMpIHwgQ29udmVydEZyb20tSnNvbik7IHNoYTI1Nj0kaGFzaDsgYnl0ZXM9JGJ5dGVzLkxlbmd0aDsgcmF3QmFzZTY0PVtDb252ZXJ0XTo6VG9CYXNlNjRTdHJpbmcoJGJ5dGVzKSB9CiAgfQogICR2YWx1ZXMgPSBAe30KICBpZiAoJHEubW9kZSAtZXEgJ2luaXRpYWwnKSB7CiAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAoW0lPLlBhdGhdOjpHZXREaXJlY3RvcnlOYW1lKCRxLnBhdGhzLmVudGVyZWQpKSkgeyB0aHJvdyAnUHJvYmUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzJyB9CiAgfQogIGlmICgkcS5tb2RlIC1lcSAnZW50ZXJlZCcpIHsKICAgICR3YWl0ID0gW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OlN0YXJ0TmV3KCkKICAgIHdoaWxlICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxLnBhdGhzLmVudGVyZWQpKSB7CiAgICAgIGlmICgkd2FpdC5FbGFwc2VkLlRvdGFsU2Vjb25kcyAtZ2UgNSkgeyB0aHJvdyAnRW50ZXJlZCBtYXJrZXIgd2FzIG5vdCBvYnNlcnZlZCB3aXRoaW4gZml2ZSBzZWNvbmRzJyB9CiAgICAgIFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjUKICAgIH0KICAgICR2YWx1ZXMuZW50ZXJlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmVudGVyZWQKICB9CiAgaWYgKCRxLm1vZGUgLWVxICdmaW5hbCcpIHsKICAgICR2YWx1ZXMuZW50ZXJlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmVudGVyZWQKICAgICR2YWx1ZXMuZXhpdGVkID0gUmVhZC1NYXJrZXIgJHEucGF0aHMuZXhpdGVkCiAgfQogICR3YWxsID0gKFtEYXRlVGltZU9mZnNldF06OlV0Y05vdyAtIFtEYXRlVGltZU9mZnNldF0nMTk3MC0wMS0wMVQwMDowMDowMFonKS5Ub3RhbFNlY29uZHMKICBpZiAoLW5vdCBbRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6SXNIaWdoUmVzb2x1dGlvbikgeyB0aHJvdyAnU3RvcHdhdGNoIGlzIG5vdCB1c2luZyB0aGUgaGlnaC1yZXNvbHV0aW9uIHBlcmZvcm1hbmNlIGNvdW50ZXInIH0KICAkdGlja3MgPSBbRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6R2V0VGltZXN0YW1wKCkKICAkYWdhaW4gPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyBbaW50XSRxLnBpZCkKICBpZiAoLW5vdCAkYWdhaW4gLW9yICRhZ2Fpbi5DcmVhdGlvbkRhdGUgLW5lICRwLkNyZWF0aW9uRGF0ZSAtb3IgJGFnYWluLkV4ZWN1dGFibGVQYXRoIC1pbmUgJHAuRXhlY3V0YWJsZVBhdGgpIHsgdGhyb3cgJ05hdGl2ZSBwcm9jZXNzIGNoYW5nZWQgZHVyaW5nIGhvc3QgcmVhZCcgfQogIEB7IHN1Y2Nlc3M9JHRydWU7IGhvc3Q9W0Vudmlyb25tZW50XTo6TWFjaGluZU5hbWU7IHBpZD1baW50XSRxLnBpZDsgcHJvY2Vzc0NyZWF0ZWRVdGM9JHAuQ3JlYXRpb25EYXRlLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5nKCdvJyk7CiAgICAgZXhlY3V0YWJsZVBhdGg9JHAuRXhlY3V0YWJsZVBhdGg7IHdhbGw9JHdhbGw7IG1hcmtlcnM9JHZhbHVlczsgY291bnRlcktpbmQ9J3dpbmRvd3NfcXBjJzsgY291bnRlclRpY2tzPSR0aWNrczsKICAgICBjb3VudGVyRnJlcXVlbmN5PVtEaWFnbm9zdGljcy5TdG9wd2F0Y2hdOjpGcmVxdWVuY3k7IGhpZ2hSZXNvbHV0aW9uPSR0cnVlIH0gfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMTIgLUNvbXByZXNzCn0gY2F0Y2ggeyBbQ29uc29sZV06OkVycm9yLldyaXRlTGluZSgkXy5FeGNlcHRpb24uTWVzc2FnZSk7IGV4aXQgMSB9Cg==", + "timeoutSeconds": 12, + "reason": "Read exact owned busy-probe markers and native host clock without changing Fusion" + }, + "requestJson": "{\"interpreter\": \"powershell\", \"scriptB64\": \"CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcSA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUp5ZFc1SlpDSTZJQ0l5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGaklpd2dJbk5sYzNOcGIyNUpaQ0k2SUNJell6VmxOamMwTkMxa01XRmpMVFF5TnpZdE9USTJOQzFpTURWaE9UWmpOVEZsTTJRaUxDQWlhRzl6ZENJNklDSkJSRTlOWDBSU1JWY3lJaXdnSW5CcFpDSTZJRFF4TnpJNExDQWljMk55WVhSamFDSTZJQ0pET2k5VmMyVnljeTlrY21WM0wwRndjRVJoZEdFdlRHOWpZV3d2VkdWdGNDOWhaRzl0TFdaMWMybHZiaTF5WVd4d2FDOHlNREkyTVRBd05WUXlNVEF6TVRCYUxUVTJPR1psTnpnMk9XUXdZalF4WkRWaE9ETXdNVFE0TVRGbVpURTNNR0ZqSWl3Z0ltNXZibU5sSWpvZ0lqYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwSWl3Z0ltOXlhV2RwYm1Gc0lqb2dleUpqY21WaGRHbHZia2xrSWpvZ0lqY3dZakpqTlRjMUxXWTRNekF0TkRjMU1TMDVaamc0TFRKbU1XWXpZV0k1TVdaaU1TSXNJQ0p0YjJScFptbGxaQ0k2SUdaaGJITmxMQ0FpYm1GdFpTSTZJQ0pWYm5ScGRHeGxaQ0lzSUNKellYWmxaQ0k2SUdaaGJITmxmU3dnSW5CaGRHaHpJam9nZXlKbGJuUmxjbVZrSWpvZ0lrTTZYRnhWYzJWeWMxeGNaSEpsZDF4Y1FYQndSR0YwWVZ4Y1RHOWpZV3hjWEZSbGJYQmNYR0ZrYjIwdFpuVnphVzl1TFhKaGJIQm9YRnd5TURJMk1UQXdOVlF5TVRBek1UQmFMVFUyT0dabE56ZzJPV1F3WWpReFpEVmhPRE13TVRRNE1URm1aVEUzTUdGalhGeGlkWE41TFRjMU56VmpOV0ppTjJJellqUTNOR0ZpTmpJeFpqVTFaRFkwT1RReE5tRTBYRnhsYm5SbGNtVmtMbXB6YjI0aUxDQWlaWGhwZEdWa0lqb2dJa002WEZ4VmMyVnljMXhjWkhKbGQxeGNRWEJ3UkdGMFlWeGNURzlqWVd4Y1hGUmxiWEJjWEdGa2IyMHRablZ6YVc5dUxYSmhiSEJvWEZ3eU1ESTJNVEF3TlZReU1UQXpNVEJhTFRVMk9HWmxOemcyT1dRd1lqUXhaRFZoT0RNd01UUTRNVEZtWlRFM01HRmpYRnhpZFhONUxUYzFOelZqTldKaU4ySXpZalEzTkdGaU5qSXhaalUxWkRZME9UUXhObUUwWEZ4bGVHbDBaV1F1YW5OdmJpSjlMQ0FpYlc5a1pTSTZJQ0ptYVc1aGJDSjknKSkgfCBDb252ZXJ0RnJvbS1Kc29uCiAgaWYgKFtFbnZpcm9ubWVudF06Ok1hY2hpbmVOYW1lIC1pbmUgJHEuaG9zdCkgeyB0aHJvdyAnSG9zdCBpZGVudGl0eSBkaWZmZXJzJyB9CiAgJHAgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyBbaW50XSRxLnBpZCkKICBpZiAoLW5vdCAkcCAtb3IgJHAuTmFtZSAtaW5lICdGdXNpb24zNjAuZXhlJykgeyB0aHJvdyAnRXhwZWN0ZWQgRnVzaW9uIHByb2Nlc3MgaXMgYWJzZW50JyB9CiAgJHNjcmF0Y2ggPSBbSU8uUGF0aF06OkdldEZ1bGxQYXRoKFtzdHJpbmddJHEuc2NyYXRjaCkKICBpZiAoW0lPLlBhdGhdOjpHZXRGaWxlTmFtZSgkc2NyYXRjaCkgLWNuZSAkcS5ydW5JZCkgeyB0aHJvdyAnU2NyYXRjaCBydW4gaWRlbnRpdHkgZGlmZmVycycgfQogICR3YWxrID0gR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JhdGNoCiAgd2hpbGUgKCRudWxsIC1uZSAkd2FsaykgewogICAgaWYgKCgkd2Fsay5BdHRyaWJ1dGVzIC1iYW5kIFtJTy5GaWxlQXR0cmlidXRlc106OlJlcGFyc2VQb2ludCkgLW5lIDApIHsgdGhyb3cgJ1NjcmF0Y2ggdHJhdmVyc2VzIGEgcmVwYXJzZSBwb2ludCcgfQogICAgJHdhbGsgPSAkd2Fsay5QYXJlbnQKICB9CiAgZnVuY3Rpb24gUmVhZC1NYXJrZXIoW3N0cmluZ10kcGF0aCkgewogICAgJGZ1bGwgPSBbSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRwYXRoKQogICAgJGZvbGRlciA9IFtJTy5QYXRoXTo6R2V0RGlyZWN0b3J5TmFtZSgkZnVsbCkKICAgIGlmIChbSU8uUGF0aF06OkdldERpcmVjdG9yeU5hbWUoJGZvbGRlcikgLWluZSAkc2NyYXRjaCAtb3IgW0lPLlBhdGhdOjpHZXRGaWxlTmFtZSgkZm9sZGVyKSAtY25lICgnYnVzeS0nICsgJHEubm9uY2UpKSB7IHRocm93ICdNYXJrZXIgZXNjYXBlZCBvd25lZCBzY3JhdGNoJyB9CiAgICBmb3JlYWNoICgkaXRlbSBpbiBAKChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZvbGRlciksIChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZ1bGwpKSkgewogICAgICBpZiAoKCRpdGVtLkF0dHJpYnV0ZXMgLWJhbmQgW0lPLkZpbGVBdHRyaWJ1dGVzXTo6UmVwYXJzZVBvaW50KSAtbmUgMCkgeyB0aHJvdyAnTWFya2VyIGlzIGxpbmtlZCcgfQogICAgfQogICAgJGZpbGUgPSBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZ1bGwKICAgIGlmICgkZmlsZS5MZW5ndGggLWd0IDQwOTYgLW9yICRmaWxlLkxlbmd0aCAtbGUgMCkgeyB0aHJvdyAnTWFya2VyIHNpemUgaW52YWxpZCcgfQogICAgJGJ5dGVzID0gW0lPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJGZ1bGwpCiAgICBpZiAoJGJ5dGVzLkxlbmd0aCAtZ3QgNDA5NikgeyB0aHJvdyAnTWFya2VyIGV4Y2VlZGVkIHJlYWQgYnVkZ2V0JyB9CiAgICAkc2hhID0gW1NlY3VyaXR5LkNyeXB0b2dyYXBoeS5TSEEyNTZdOjpDcmVhdGUoKQogICAgdHJ5IHsgJGhhc2ggPSBbQml0Q29udmVydGVyXTo6VG9TdHJpbmcoJHNoYS5Db21wdXRlSGFzaCgkYnl0ZXMpKS5SZXBsYWNlKCctJywnJykuVG9Mb3dlckludmFyaWFudCgpIH0gZmluYWxseSB7ICRzaGEuRGlzcG9zZSgpIH0KICAgIHJldHVybiBAeyB2YWx1ZT0oW1RleHQuRW5jb2RpbmddOjpVVEY4LkdldFN0cmluZygkYnl0ZXMpIHwgQ29udmVydEZyb20tSnNvbik7IHNoYTI1Nj0kaGFzaDsgYnl0ZXM9JGJ5dGVzLkxlbmd0aDsgcmF3QmFzZTY0PVtDb252ZXJ0XTo6VG9CYXNlNjRTdHJpbmcoJGJ5dGVzKSB9CiAgfQogICR2YWx1ZXMgPSBAe30KICBpZiAoJHEubW9kZSAtZXEgJ2luaXRpYWwnKSB7CiAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAoW0lPLlBhdGhdOjpHZXREaXJlY3RvcnlOYW1lKCRxLnBhdGhzLmVudGVyZWQpKSkgeyB0aHJvdyAnUHJvYmUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzJyB9CiAgfQogIGlmICgkcS5tb2RlIC1lcSAnZW50ZXJlZCcpIHsKICAgICR3YWl0ID0gW0RpYWdub3N0aWNzLlN0b3B3YXRjaF06OlN0YXJ0TmV3KCkKICAgIHdoaWxlICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxLnBhdGhzLmVudGVyZWQpKSB7CiAgICAgIGlmICgkd2FpdC5FbGFwc2VkLlRvdGFsU2Vjb25kcyAtZ2UgNSkgeyB0aHJvdyAnRW50ZXJlZCBtYXJrZXIgd2FzIG5vdCBvYnNlcnZlZCB3aXRoaW4gZml2ZSBzZWNvbmRzJyB9CiAgICAgIFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjUKICAgIH0KICAgICR2YWx1ZXMuZW50ZXJlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmVudGVyZWQKICB9CiAgaWYgKCRxLm1vZGUgLWVxICdmaW5hbCcpIHsKICAgICR2YWx1ZXMuZW50ZXJlZCA9IFJlYWQtTWFya2VyICRxLnBhdGhzLmVudGVyZWQKICAgICR2YWx1ZXMuZXhpdGVkID0gUmVhZC1NYXJrZXIgJHEucGF0aHMuZXhpdGVkCiAgfQogICR3YWxsID0gKFtEYXRlVGltZU9mZnNldF06OlV0Y05vdyAtIFtEYXRlVGltZU9mZnNldF0nMTk3MC0wMS0wMVQwMDowMDowMFonKS5Ub3RhbFNlY29uZHMKICBpZiAoLW5vdCBbRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6SXNIaWdoUmVzb2x1dGlvbikgeyB0aHJvdyAnU3RvcHdhdGNoIGlzIG5vdCB1c2luZyB0aGUgaGlnaC1yZXNvbHV0aW9uIHBlcmZvcm1hbmNlIGNvdW50ZXInIH0KICAkdGlja3MgPSBbRGlhZ25vc3RpY3MuU3RvcHdhdGNoXTo6R2V0VGltZXN0YW1wKCkKICAkYWdhaW4gPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyBbaW50XSRxLnBpZCkKICBpZiAoLW5vdCAkYWdhaW4gLW9yICRhZ2Fpbi5DcmVhdGlvbkRhdGUgLW5lICRwLkNyZWF0aW9uRGF0ZSAtb3IgJGFnYWluLkV4ZWN1dGFibGVQYXRoIC1pbmUgJHAuRXhlY3V0YWJsZVBhdGgpIHsgdGhyb3cgJ05hdGl2ZSBwcm9jZXNzIGNoYW5nZWQgZHVyaW5nIGhvc3QgcmVhZCcgfQogIEB7IHN1Y2Nlc3M9JHRydWU7IGhvc3Q9W0Vudmlyb25tZW50XTo6TWFjaGluZU5hbWU7IHBpZD1baW50XSRxLnBpZDsgcHJvY2Vzc0NyZWF0ZWRVdGM9JHAuQ3JlYXRpb25EYXRlLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5nKCdvJyk7CiAgICAgZXhlY3V0YWJsZVBhdGg9JHAuRXhlY3V0YWJsZVBhdGg7IHdhbGw9JHdhbGw7IG1hcmtlcnM9JHZhbHVlczsgY291bnRlcktpbmQ9J3dpbmRvd3NfcXBjJzsgY291bnRlclRpY2tzPSR0aWNrczsKICAgICBjb3VudGVyRnJlcXVlbmN5PVtEaWFnbm9zdGljcy5TdG9wd2F0Y2hdOjpGcmVxdWVuY3k7IGhpZ2hSZXNvbHV0aW9uPSR0cnVlIH0gfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMTIgLUNvbXByZXNzCn0gY2F0Y2ggeyBbQ29uc29sZV06OkVycm9yLldyaXRlTGluZSgkXy5FeGNlcHRpb24uTWVzc2FnZSk7IGV4aXQgMSB9Cg==\", \"timeoutSeconds\": 12, \"reason\": \"Read exact owned busy-probe markers and native host clock without changing Fusion\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234623.015835, + "mutating": false, + "stdout": "{\n \"durationMs\": 1414,\n \"exitCode\": 0,\n \"ok\": true,\n \"schemaVersion\": 1,\n \"status\": \"ok\",\n \"stderr\": \"\",\n \"stdout\": \"{\\\"markers\\\":{\\\"entered\\\":{\\\"sha256\\\":\\\"145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4\\\",\\\"bytes\\\":503,\\\"value\\\":{\\\"counterFrequency\\\":10000000,\\\"counterKind\\\":\\\"windows_qpc\\\",\\\"counterTicks\\\":3663048907271,\\\"host\\\":\\\"ADOM_DREW2\\\",\\\"kind\\\":\\\"entered\\\",\\\"monotonic\\\":366304.8903565,\\\"nonce\\\":\\\"7575c5bb7b3b474ab621f55d649416a4\\\",\\\"original\\\":{\\\"creationId\\\":\\\"70b2c575-f830-4751-9f88-2f1f3ab91fb1\\\",\\\"modified\\\":false,\\\"name\\\":\\\"Untitled\\\",\\\"saved\\\":false},\\\"pid\\\":41728,\\\"runId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\",\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"thread\\\":54084,\\\"wall\\\":1791234613.4198995},\\\"rawBase64\\\":\\\"eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=\\\"},\\\"exited\\\":{\\\"sha256\\\":\\\"efb7b28c00f81b810ad549d80208ed7734716ba1998763b6333ce6c099799611\\\",\\\"bytes\\\":502,\\\"value\\\":{\\\"counterFrequency\\\":10000000,\\\"counterKind\\\":\\\"windows_qpc\\\",\\\"counterTicks\\\":3663128950074,\\\"host\\\":\\\"ADOM_DREW2\\\",\\\"kind\\\":\\\"exited\\\",\\\"monotonic\\\":366312.8945382,\\\"nonce\\\":\\\"7575c5bb7b3b474ab621f55d649416a4\\\",\\\"original\\\":{\\\"creationId\\\":\\\"70b2c575-f830-4751-9f88-2f1f3ab91fb1\\\",\\\"modified\\\":false,\\\"name\\\":\\\"Untitled\\\",\\\"saved\\\":false},\\\"pid\\\":41728,\\\"runId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\",\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"thread\\\":54084,\\\"wall\\\":1791234621.4240806},\\\"rawBase64\\\":\\\"eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMTI4OTUwMDc0LCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZXhpdGVkIiwgIm1vbm90b25pYyI6IDM2NjMxMi44OTQ1MzgyLCAibm9uY2UiOiAiNzU3NWM1YmI3YjNiNDc0YWI2MjFmNTVkNjQ5NDE2YTQiLCAib3JpZ2luYWwiOiB7ImNyZWF0aW9uSWQiOiAiNzBiMmM1NzUtZjgzMC00NzUxLTlmODgtMmYxZjNhYjkxZmIxIiwgIm1vZGlmaWVkIjogZmFsc2UsICJuYW1lIjogIlVudGl0bGVkIiwgInNhdmVkIjogZmFsc2V9LCAicGlkIjogNDE3MjgsICJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAidGhyZWFkIjogNTQwODQsICJ3YWxsIjogMTc5MTIzNDYyMS40MjQwODA2fQ==\\\"}},\\\"counterKind\\\":\\\"windows_qpc\\\",\\\"executablePath\\\":\\\"C:\\\\\\\\Users\\\\\\\\drew\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Autodesk\\\\\\\\webdeploy\\\\\\\\production\\\\\\\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\\\\\\\Fusion360.exe\\\",\\\"highResolution\\\":true,\\\"counterFrequency\\\":10000000,\\\"processCreatedUtc\\\":\\\"2026-10-05T21:01:46.6536380Z\\\",\\\"success\\\":true,\\\"counterTicks\\\":3663155083006,\\\"host\\\":\\\"ADOM_DREW2\\\",\\\"pid\\\":41728,\\\"wall\\\":1791234624.0247588}\\r\\n\",\n \"success\": true,\n \"timedOut\": false,\n \"timeoutSeconds\": 27\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234624.5007398, + "raw": { + "durationMs": 1414, + "exitCode": 0, + "ok": true, + "schemaVersion": 1, + "status": "ok", + "stderr": "", + "stdout": "{\"markers\":{\"entered\":{\"sha256\":\"145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4\",\"bytes\":503,\"value\":{\"counterFrequency\":10000000,\"counterKind\":\"windows_qpc\",\"counterTicks\":3663048907271,\"host\":\"ADOM_DREW2\",\"kind\":\"entered\",\"monotonic\":366304.8903565,\"nonce\":\"7575c5bb7b3b474ab621f55d649416a4\",\"original\":{\"creationId\":\"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\"modified\":false,\"name\":\"Untitled\",\"saved\":false},\"pid\":41728,\"runId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"thread\":54084,\"wall\":1791234613.4198995},\"rawBase64\":\"eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=\"},\"exited\":{\"sha256\":\"efb7b28c00f81b810ad549d80208ed7734716ba1998763b6333ce6c099799611\",\"bytes\":502,\"value\":{\"counterFrequency\":10000000,\"counterKind\":\"windows_qpc\",\"counterTicks\":3663128950074,\"host\":\"ADOM_DREW2\",\"kind\":\"exited\",\"monotonic\":366312.8945382,\"nonce\":\"7575c5bb7b3b474ab621f55d649416a4\",\"original\":{\"creationId\":\"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\"modified\":false,\"name\":\"Untitled\",\"saved\":false},\"pid\":41728,\"runId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"thread\":54084,\"wall\":1791234621.4240806},\"rawBase64\":\"eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMTI4OTUwMDc0LCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZXhpdGVkIiwgIm1vbm90b25pYyI6IDM2NjMxMi44OTQ1MzgyLCAibm9uY2UiOiAiNzU3NWM1YmI3YjNiNDc0YWI2MjFmNTVkNjQ5NDE2YTQiLCAib3JpZ2luYWwiOiB7ImNyZWF0aW9uSWQiOiAiNzBiMmM1NzUtZjgzMC00NzUxLTlmODgtMmYxZjNhYjkxZmIxIiwgIm1vZGlmaWVkIjogZmFsc2UsICJuYW1lIjogIlVudGl0bGVkIiwgInNhdmVkIjogZmFsc2V9LCAicGlkIjogNDE3MjgsICJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAidGhyZWFkIjogNTQwODQsICJ3YWxsIjogMTc5MTIzNDYyMS40MjQwODA2fQ==\"}},\"counterKind\":\"windows_qpc\",\"executablePath\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\Autodesk\\\\webdeploy\\\\production\\\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\\\Fusion360.exe\",\"highResolution\":true,\"counterFrequency\":10000000,\"processCreatedUtc\":\"2026-10-05T21:01:46.6536380Z\",\"success\":true,\"counterTicks\":3663155083006,\"host\":\"ADOM_DREW2\",\"pid\":41728,\"wall\":1791234624.0247588}\r\n", + "success": true, + "timedOut": false, + "timeoutSeconds": 27 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/calls/0010-fusion_mech_operation_status.json b/docs/mechanical-verification/cp8/busy/calls/0010-fusion_mech_operation_status.json new file mode 100644 index 0000000..51e5aa3 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/calls/0010-fusion_mech_operation_status.json @@ -0,0 +1,113 @@ +{ + "target": "adom_drew2", + "verb": "fusion_mech_operation_status", + "args": { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth" + }, + "requestJson": "{\"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\", \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status probe", + "startedAt": 1791234624.5017655, + "mutating": false, + "stdout": "{\n \"_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.\",\n \"currentSessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"durationMs\": 71,\n \"error\": \"\",\n \"historical\": false,\n \"history\": {\n \"createdAt\": 1791234223.44495,\n \"events\": [\n {\n \"at\": 1791234223.44495,\n \"phase\": \"admitted\"\n },\n {\n \"at\": 1791234223.4515686,\n \"phase\": \"dispatched\"\n },\n {\n \"at\": 1791234223.4627895,\n \"phase\": \"executing\"\n },\n {\n \"at\": 1791234223.534875,\n \"phase\": \"succeeded\"\n }\n ],\n \"observedDocument\": {\n \"creationId\": \"94431d29-0acf-4799-b677-3f564085aa9d\",\n \"dataFileId\": null,\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"\n },\n \"operation\": \"parameter_set\",\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"phase\": \"succeeded\",\n \"requestDigest\": \"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\n \"requestedTarget\": {\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\n \"revision\": \"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"\n },\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"sourceVersion\": \"1.12.0-dev.8\",\n \"storageVersion\": 1,\n \"updatedAt\": 1791234223.534875\n },\n \"nativeExecutionStarted\": null,\n \"observedResult\": null,\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"outcome\": \"recorded\",\n \"output\": \"{\\\"_timeoutHint\\\":\\\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\\\",\\\"currentSessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"historical\\\":false,\\\"history\\\":{\\\"createdAt\\\":1791234223.44495,\\\"events\\\":[{\\\"at\\\":1791234223.44495,\\\"phase\\\":\\\"admitted\\\"},{\\\"at\\\":1791234223.4515686,\\\"phase\\\":\\\"dispatched\\\"},{\\\"at\\\":1791234223.4627895,\\\"phase\\\":\\\"executing\\\"},{\\\"at\\\":1791234223.534875,\\\"phase\\\":\\\"succeeded\\\"}],\\\"observedDocument\\\":{\\\"creationId\\\":\\\"94431d29-0acf-4799-b677-3f564085aa9d\\\",\\\"dataFileId\\\":null,\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\"},\\\"operation\\\":\\\"parameter_set\\\",\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"phase\\\":\\\"succeeded\\\",\\\"requestDigest\\\":\\\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\\\",\\\"requestedTarget\\\":{\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\",\\\"revision\\\":\\\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\\\"},\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"sourceVersion\\\":\\\"1.12.0-dev.8\\\",\\\"storageVersion\\\":1,\\\"updatedAt\\\":1791234223.534875},\\\"nativeExecutionStarted\\\":null,\\\"observedResult\\\":null,\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"outcome\\\":\\\"recorded\\\",\\\"persistenceFailure\\\":null,\\\"phase\\\":\\\"succeeded\\\",\\\"reconciliationRequired\\\":false,\\\"result\\\":{\\\"data\\\":{\\\"health\\\":{\\\"complete\\\":true,\\\"computeSucceeded\\\":true,\\\"faults\\\":[],\\\"healthy\\\":true,\\\"suppressed\\\":[],\\\"timelineCount\\\":2,\\\"unknown\\\":[]},\\\"parameter\\\":{\\\"displayUnit\\\":\\\"mm\\\",\\\"expression\\\":\\\"20 mm\\\",\\\"name\\\":\\\"depth\\\",\\\"unit\\\":\\\"mm\\\",\\\"value\\\":20.0},\\\"recoveryStrategy\\\":\\\"restore_parameter_expression\\\",\\\"target\\\":{\\\"documentId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\\\",\\\"revision\\\":\\\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\\\"},\\\"transactional\\\":false},\\\"durability\\\":{\\\"phase\\\":\\\"succeeded\\\",\\\"recordedSessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"storageVersion\\\":1,\\\"terminalRecorded\\\":true},\\\"operation\\\":\\\"parameter_set\\\",\\\"operationId\\\":\\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\\\",\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"success\\\":true},\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"state\\\":\\\"succeeded\\\",\\\"statusVerb\\\":\\\"fusion_get_app_state\\\",\\\"success\\\":true,\\\"timeoutSeconds\\\":60}\",\n \"persistenceFailure\": null,\n \"phase\": \"succeeded\",\n \"reconciliationRequired\": false,\n \"result\": {\n \"data\": {\n \"health\": {\n \"complete\": true,\n \"computeSucceeded\": true,\n \"faults\": [],\n \"healthy\": true,\n \"suppressed\": [],\n \"timelineCount\": 2,\n \"unknown\": []\n },\n \"parameter\": {\n \"displayUnit\": \"mm\",\n \"expression\": \"20 mm\",\n \"name\": \"depth\",\n \"unit\": \"mm\",\n \"value\": 20.0\n },\n \"recoveryStrategy\": \"restore_parameter_expression\",\n \"target\": {\n \"documentId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\n \"revision\": \"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"\n },\n \"transactional\": false\n },\n \"durability\": {\n \"phase\": \"succeeded\",\n \"recordedSessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"storageVersion\": 1,\n \"terminalRecorded\": true\n },\n \"operation\": \"parameter_set\",\n \"operationId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"success\": true\n },\n \"schemaVersion\": 1,\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"state\": \"succeeded\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234624.5781033, + "raw": { + "_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.", + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "durationMs": 71, + "error": "", + "historical": false, + "history": { + "createdAt": 1791234223.44495, + "events": [ + { + "at": 1791234223.44495, + "phase": "admitted" + }, + { + "at": 1791234223.4515686, + "phase": "dispatched" + }, + { + "at": 1791234223.4627895, + "phase": "executing" + }, + { + "at": 1791234223.534875, + "phase": "succeeded" + } + ], + "observedDocument": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38" + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "phase": "succeeded", + "requestDigest": "13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828", + "requestedTarget": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234223.534875 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "outcome": "recorded", + "output": "{\"_timeoutHint\":\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\",\"currentSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"historical\":false,\"history\":{\"createdAt\":1791234223.44495,\"events\":[{\"at\":1791234223.44495,\"phase\":\"admitted\"},{\"at\":1791234223.4515686,\"phase\":\"dispatched\"},{\"at\":1791234223.4627895,\"phase\":\"executing\"},{\"at\":1791234223.534875,\"phase\":\"succeeded\"}],\"observedDocument\":{\"creationId\":\"94431d29-0acf-4799-b677-3f564085aa9d\",\"dataFileId\":null,\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"phase\":\"succeeded\",\"requestDigest\":\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\"requestedTarget\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"sourceVersion\":\"1.12.0-dev.8\",\"storageVersion\":1,\"updatedAt\":1791234223.534875},\"nativeExecutionStarted\":null,\"observedResult\":null,\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"outcome\":\"recorded\",\"persistenceFailure\":null,\"phase\":\"succeeded\",\"reconciliationRequired\":false,\"result\":{\"data\":{\"health\":{\"complete\":true,\"computeSucceeded\":true,\"faults\":[],\"healthy\":true,\"suppressed\":[],\"timelineCount\":2,\"unknown\":[]},\"parameter\":{\"displayUnit\":\"mm\",\"expression\":\"20 mm\",\"name\":\"depth\",\"unit\":\"mm\",\"value\":20.0},\"recoveryStrategy\":\"restore_parameter_expression\",\"target\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"},\"transactional\":false},\"durability\":{\"phase\":\"succeeded\",\"recordedSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"storageVersion\":1,\"terminalRecorded\":true},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"success\":true},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"state\":\"succeeded\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "persistenceFailure": null, + "phase": "succeeded", + "reconciliationRequired": false, + "result": { + "data": { + "health": { + "complete": true, + "computeSucceeded": true, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "parameter": { + "displayUnit": "mm", + "expression": "20 mm", + "name": "depth", + "unit": "mm", + "value": 20.0 + }, + "recoveryStrategy": "restore_parameter_expression", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "transactional": false + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "schemaVersion": 1, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "succeeded", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/hold-calls/0001-fusion_run_modeling_script.json b/docs/mechanical-verification/cp8/busy/hold-calls/0001-fusion_run_modeling_script.json new file mode 100644 index 0000000..8eee3f9 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/hold-calls/0001-fusion_run_modeling_script.json @@ -0,0 +1,121 @@ +{ + "target": "adom_drew2", + "verb": "fusion_run_modeling_script", + "args": { + "script": "import threading, builtins\nif threading.current_thread() is not threading.main_thread():\n raise RuntimeError('Busy probe requires the native main thread')\n_registry = getattr(builtins, '_adom_mechanical_ralph_runs', None)\nif not isinstance(_registry, dict) or '20261005T210310Z-568fe7869d0b41d5a83014811fe170ac' not in _registry:\n raise RuntimeError('Existing exact run registry is required')\nimport json\nREQUEST = json.loads('{\"action\": \"inventory\", \"runId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\", \"host\": \"ADOM_DREW2\", \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\"}')\n\nimport base64, builtins, csv, hashlib, json, math, os, platform, re, sys, tempfile\n\ndef require(condition, message):\n if not condition:\n raise RuntimeError(message)\n\ndef same(a, b):\n if isinstance(a, bool) or isinstance(b, bool):\n return type(a) is type(b) and a == b\n if isinstance(a, (int, float)) and isinstance(b, (int, float)):\n return math.isfinite(a) and math.isfinite(b) and math.isclose(a, b, rel_tol=1e-7, abs_tol=1e-7)\n if isinstance(a, dict) and isinstance(b, dict):\n return a.keys() == b.keys() and all(same(a[k], b[k]) for k in a)\n if isinstance(a, list) and isinstance(b, list):\n return len(a) == len(b) and all(same(x, y) for x, y in zip(a, b))\n return a == b\n\ndef vector(p):\n return [p.x * 10, p.y * 10, p.z * 10]\n\ndef body_measure(body):\n properties = body.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)\n box = body.boundingBox\n return {'name': body.name, 'volume': properties.volume * 1000, 'mass': properties.mass,\n 'centerOfMass': vector(properties.centerOfMass), 'faces': body.faces.count,\n 'bounds': [vector(box.minPoint), vector(box.maxPoint)],\n 'material': body.material.name if body.material else None}\n\ndef witness(document):\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\n require(design is not None, 'Owned document is no longer a design')\n root = design.rootComponent\n components, occurrences = [], []\n all_bodies = [body_measure(b) for b in root.bRepBodies]\n for comp in design.allComponents:\n components.append({'name': '' if comp == root else comp.name,\n 'partNumber': comp.partNumber, 'description': comp.description,\n 'material': comp.material.name if comp.material else None,\n 'attributes': {a.name: a.value for a in comp.attributes if a.groupName == 'AdomMechanical'},\n 'bodies': [body_measure(b) for b in comp.bRepBodies],\n 'sketches': [{'name': s.name, 'fullyConstrained': s.isFullyConstrained,\n 'curves': s.sketchCurves.count, 'profiles': s.profiles.count} for s in comp.sketches]})\n for occurrence in root.allOccurrences:\n matrix = list(occurrence.transform2.asArray())\n for index in (3, 7, 11): matrix[index] *= 10\n bodies = [body_measure(b) for b in occurrence.bRepBodies]\n all_bodies.extend(bodies)\n occurrences.append({'path': occurrence.fullPathName, 'component': occurrence.component.name,\n 'transform': matrix, 'bodies': bodies})\n props = root.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)\n return {'parameters': {p.name: p.expression for p in design.allParameters},\n 'timelineCount': design.timeline.count,\n 'components': sorted(components, key=lambda c: c['name']),\n 'occurrences': sorted(occurrences, key=lambda o: o['path']),\n 'physical': {'volume': props.volume * 1000, 'mass': props.mass,\n 'centerOfMass': vector(props.centerOfMass)},\n 'instanceVolume': sum(b['volume'] for b in all_bodies),\n 'instanceCount': len(all_bodies)}\n\nrequire(platform.node().lower() == REQUEST['host'].lower(), 'Host identity differs from expected host')\nrequire(re.fullmatch(r'[A-Za-z0-9_-]{12,100}', REQUEST['runId']) is not None, 'Invalid run ID')\nmodules = [m for n, m in list(sys.modules.items())\n if n.endswith('.mechanical.core') and getattr(m, 'SESSION_ID', None) == REQUEST['sessionId']]\nrequire(len(modules) == 1, 'Exact serving mechanical session is unavailable; no ownership inference')\ncore = modules[0]\nregistries = getattr(builtins, '_adom_mechanical_ralph_runs', None)\nif registries is None:\n registries = {}\n builtins._adom_mechanical_ralph_runs = registries\naction = REQUEST['action']\nrun = registries.get(REQUEST['runId'])\n\ndef documents():\n return [{'creationId': d.creationId, 'name': d.name, 'modified': d.isModified, 'saved': d.isSaved}\n for d in app.documents]\n\ndef idle():\n require(ui.activeCommand in ('', 'SelectCommand', 'Select'), 'Interactive command active; refusing document lifecycle action')\n\ndef fingerprint(document):\n return {'creationId': document.creationId, 'name': document.name,\n 'modified': document.isModified, 'saved': document.isSaved}\n\ndef owned(document_id, allow_closed=False):\n require(document_id in run['documents'], 'Document has no exact native ownership entry')\n row = run['documents'][document_id]\n if row.get('closed'):\n require(allow_closed, 'Owned document is already closed')\n return row\n document = row['object']\n require(any(d == document for d in app.documents), 'Exact owned document is no longer open')\n require(not any(d == document for d in run['baselineObjects']), 'Refusing a baseline document')\n require(document.name == row['name'] and not document.isSaved, 'Owned document was renamed or saved externally')\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\n marker = design.rootComponent.attributes.itemByName('AdomRalph', 'owner')\n require(marker and marker.value == REQUEST['runId'], 'Run ownership marker changed')\n marker = design.rootComponent.attributes.itemByName('AdomRalph', 'documentId')\n require(marker and marker.value == document_id, 'Runtime document marker changed')\n return row\n\ndef path_in_scratch(path):\n root = os.path.realpath(run['scratch'])\n path = os.path.abspath(path)\n require(os.path.commonpath([root, os.path.realpath(path)]) == root and os.path.realpath(path) != root,\n 'Artifact is not inside the owned scratch directory')\n require(not os.path.islink(path), 'Artifact is a symlink')\n return path\n\ndef file_info(path):\n path = path_in_scratch(path)\n require(os.path.isfile(path), 'Checkpoint file is absent')\n require(os.path.getsize(path) <= 32 * 1024 * 1024, 'Fixture artifact exceeds 32 MiB budget')\n with open(path, 'rb') as stream: data = stream.read()\n return {'path': path.replace('\\\\', '/'), 'sha256': hashlib.sha256(data).hexdigest(), 'bytes': len(data)}\n\ndef register(document, document_id, role):\n require(not any(d == document for d in run['baselineObjects']), 'Creation returned a baseline document')\n require(document_id not in run['documents'], 'Runtime ID is already registered')\n # Retain exact object first, including if marker creation later fails.\n row = {'object': document, 'documentId': document_id, 'role': role,\n 'creationId': document.creationId, 'name': document.name, 'closed': False, 'checkpoint': None}\n run['documents'][document_id] = row\n require(not document.isSaved and document.name.startswith('Untitled'), 'Only new unnamed designs are owned')\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\n design.rootComponent.attributes.add('AdomRalph', 'owner', REQUEST['runId'])\n design.rootComponent.attributes.add('AdomRalph', 'documentId', document_id)\n return row\n\ndef public_row(row):\n return {k: v for k, v in row.items() if k not in ('object', 'witness')}\n\nif action == 'begin':\n idle()\n require(run is None, 'Native run registry already exists; use recover')\n require(app.documents.count > 0, 'An existing active design is required for a read-only baseline')\n baseline = documents()\n require(baseline == REQUEST['baseline'], 'Documents changed after baseline; refusing to start')\n scratch = os.path.join(tempfile.gettempdir(), 'adom-fusion-ralph', REQUEST['runId'])\n require(not os.path.exists(scratch), 'Run scratch already exists')\n parent = os.path.dirname(scratch)\n require(os.path.realpath(parent) == os.path.abspath(parent), 'Scratch parent resolves through a link')\n os.makedirs(scratch)\n run = {'sessionId': REQUEST['sessionId'], 'documents': {}, 'scratch': scratch,\n 'baselineObjects': list(app.documents), 'baseline': baseline,\n 'activeObject': app.activeDocument, 'activeFingerprint': fingerprint(app.activeDocument)}\n registries[REQUEST['runId']] = run\n result = {'success': True, 'scratch': scratch.replace('\\\\', '/'), 'documents': baseline}\nelse:\n require(run is not None and run['sessionId'] == REQUEST['sessionId'], 'Native registry/session missing; no close attempted')\n if action == 'inventory':\n result = {'success': True, 'documents': [public_row(r) for r in run['documents'].values()],\n 'provisionalImportCount': len(run.get('provisionalImports', [])),\n 'scratch': run['scratch'].replace('\\\\', '/')}\n elif action == 'register':\n idle()\n document, design, document_id = core.active(app)\n require(document_id == REQUEST['documentId'], 'Active runtime document differs from typed creation result')\n row = register(document, document_id, REQUEST['role'])\n result = {'success': True, **public_row(row)}\n elif action in ('witness', 'verify', 'activate', 'close', 'checkpoint', 'capture'):\n row = owned(REQUEST['documentId'], action in ('close', 'verify'))\n document = row['object']\n if action == 'verify':\n if not row.get('closed'):\n checkpoint = row['checkpoint']\n require(checkpoint is not None, 'No verified native checkpoint')\n require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed')\n require(same(witness(document), row['witness']), 'Model changed since checkpoint')\n result = {'success': True, 'documentId': row['documentId'], 'ownerRunId': REQUEST['runId'], 'closed': row['closed']}\n elif action == 'witness':\n require(app.activeDocument == document, 'Active document changed; no implicit activation')\n result = {'success': True, 'documentId': row['documentId'], 'witness': witness(document)}\n elif action == 'activate':\n idle()\n require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']),\n 'User selected an external document; refusing activation')\n if app.activeDocument != document:\n require(document.activate(), 'Owned document activation failed')\n result = {'success': True, 'documentId': row['documentId']}\n elif action == 'close':\n idle()\n if not row['closed']:\n require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']),\n 'User selected an external document; refusing lifecycle changes')\n checkpoint = row['checkpoint']\n require(checkpoint is not None, 'No verified native checkpoint')\n require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed')\n require(same(witness(document), row['witness']), 'Model changed since checkpoint')\n require(document.close(False), 'Owned document close returned false')\n require(not any(d == document for d in app.documents), 'Owned document still appears in open documents')\n row['closed'] = True\n result = {'success': True, 'closedDocumentId': row['documentId'], 'closed': True}\n elif action == 'capture':\n require(app.activeDocument == document, 'Active document changed before capture')\n path = path_in_scratch(REQUEST['path'])\n require(not os.path.exists(path), 'Capture destination already exists')\n viewport = app.activeViewport\n viewport.fit()\n viewport.refresh()\n require(viewport.saveAsImageFile(path, 1280, 900), 'Viewport capture failed')\n result = {'success': True, **file_info(path)}\n else:\n idle()\n require(app.activeDocument == document, 'Active document changed before roundtrip')\n path = path_in_scratch(REQUEST['path'])\n archive = file_info(path)\n before = witness(document)\n options = app.importManager.createFusionArchiveImportOptions(path)\n imported = app.importManager.importToNewDocument(options)\n # Keep the actual returned API object before any fragile getter or\n # identity lookup. A provisional object can only be retained/reported.\n provisional = {'object': imported}\n run.setdefault('provisionalImports', []).append(provisional)\n require(imported is not None and app.activeDocument == imported, 'Archive import returned no active document')\n reopened_doc, reopened_design, reopened_id = core.active(app)\n require(reopened_doc == imported, 'Imported document identity mismatch')\n reopened = register(imported, reopened_id, row['role'] + '-reopened')\n run['provisionalImports'].remove(provisional)\n after = witness(imported)\n require(same(before, after), 'Native archive roundtrip changed measured model state')\n # Mark both sides only after independent semantic comparison.\n for item in (row, reopened):\n item['checkpoint'] = archive\n item['witness'] = before\n result = {'success': True, 'archive': archive, 'before': before, 'after': after,\n 'reopened': public_row(reopened), 'source': public_row(row)}\n elif action == 'file':\n info = file_info(REQUEST['path'])\n with open(info['path'], 'rb') as stream: data = stream.read()\n result = {'success': True, **info, 'base64': base64.b64encode(data).decode('ascii')}\n if REQUEST.get('csv'):\n with open(info['path'], encoding='utf-8', newline='') as stream:\n result['rows'] = list(csv.DictReader(stream))\n elif action == 'restore':\n idle()\n require(not run.get('provisionalImports'), 'Unresolved imported object remains; restoration refused')\n require(all(row['closed'] for row in run['documents'].values()), 'Owned documents remain open')\n require(len(list(app.documents)) == len(run['baselineObjects']) and\n all(any(d == original for d in app.documents) for original in run['baselineObjects']),\n 'Document set changed; refusing to change active document')\n require(documents() == run['baseline'], 'Original document flags changed')\n original = run['activeObject']\n if app.activeDocument != original:\n require(original.activate(), 'Original document activation failed')\n require(fingerprint(original) == run['activeFingerprint'], 'Original active document changed')\n result = {'success': True, 'documents': documents(), 'activeCreationId': original.creationId}\n else:\n raise RuntimeError('Unknown native action')\n\nEXPECTED = json.loads('{\"runId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\", \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\", \"host\": \"ADOM_DREW2\", \"pid\": 41728, \"scratch\": \"C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\", \"nonce\": \"7575c5bb7b3b474ab621f55d649416a4\", \"original\": {\"creationId\": \"70b2c575-f830-4751-9f88-2f1f3ab91fb1\", \"modified\": false, \"name\": \"Untitled\", \"saved\": false}}')\n\nimport time, threading\nrequire(threading.current_thread() is threading.main_thread(), 'Main thread changed')\nrequire(os.getpid() == EXPECTED['pid'], 'Native Fusion PID changed')\nrequire(not run.get('provisionalImports') and not run.get('retainRequired'), 'Native recovery remains unresolved')\nrequire(len(run['documents']) <= 1024 and all(row.get('closed') is True and not row.get('retainRequired') for row in run['documents'].values()), 'Owned native document remains open or retained')\nrequire(len(run['baselineObjects']) == 1 and app.documents.count == 1, 'Native original inventory differs')\noriginal = run['activeObject']\nrequire(app.activeDocument == original and app.documents.item(0) == original and run['baselineObjects'][0] == original, 'Exact original object differs')\nrequire(run['activeFingerprint'] == EXPECTED['original'] and fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed')\nrequire(not original.isModified and not original.isSaved, 'Original is not pristine')\nrequire(documents() == run['baseline'] == [EXPECTED['original']], 'Original baseline changed')\nidle()\ndesign = adsk.fusion.Design.cast(original.products.itemByProductType('DesignProductType'))\nrequire(design is not None and design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry is not pristine')\nrequire(os.path.normcase(os.path.abspath(run['scratch'])) == os.path.normcase(os.path.abspath(EXPECTED['scratch'])), 'Scratch differs from native registry')\nrequire(os.path.isdir(run['scratch']) and os.path.realpath(run['scratch']) == os.path.abspath(run['scratch']), 'Scratch root is linked or absent')\ndef state():\n require(app.activeDocument == original and app.documents.count == 1 and app.documents.item(0) == original, 'Original object changed during hold')\n require(fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed during hold')\n require(design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry changed during hold')\n idle()\n return fingerprint(original)\nresult = {'success': True, 'sessionId': EXPECTED['sessionId'], 'runId': EXPECTED['runId'], 'pid': os.getpid(), 'original': state()}\n\nPATHS = json.loads('{\"entered\": \"C:\\\\\\\\Users\\\\\\\\drew\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Temp\\\\\\\\adom-fusion-ralph\\\\\\\\20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\\\\\\busy-7575c5bb7b3b474ab621f55d649416a4\\\\\\\\entered.json\", \"exited\": \"C:\\\\\\\\Users\\\\\\\\drew\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Temp\\\\\\\\adom-fusion-ralph\\\\\\\\20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\\\\\\busy-7575c5bb7b3b474ab621f55d649416a4\\\\\\\\exited.json\"}')\n\nfolder = os.path.dirname(PATHS['entered'])\nrequire(os.path.dirname(folder) == os.path.abspath(run['scratch']), 'Marker directory escaped exact scratch')\nrequire(platform.system() == 'Windows', 'Shared QPC proof requires Windows')\nimport ctypes\nkernel = ctypes.WinDLL('kernel32', use_last_error=True)\nfor function in (kernel.QueryPerformanceCounter, kernel.QueryPerformanceFrequency):\n function.argtypes = [ctypes.POINTER(ctypes.c_longlong)]\n function.restype = ctypes.c_int\ndef counter():\n ticks, frequency = ctypes.c_longlong(), ctypes.c_longlong()\n require(kernel.QueryPerformanceFrequency(ctypes.byref(frequency)) and frequency.value > 0, 'QPC frequency unavailable')\n require(kernel.QueryPerformanceCounter(ctypes.byref(ticks)) and ticks.value > 0, 'QPC timestamp unavailable')\n return {'counterKind': 'windows_qpc', 'counterTicks': ticks.value, 'counterFrequency': frequency.value}\nos.mkdir(folder) # Exclusive probe directory; never reuse or remove evidence.\ndef marker(kind):\n row = {key: EXPECTED[key] for key in ('nonce', 'sessionId', 'runId', 'pid', 'host')}\n row.update(kind=kind, wall=time.time(), monotonic=time.monotonic(), thread=threading.get_ident(), original=state())\n row.update(counter())\n raw = json.dumps(row, sort_keys=True, allow_nan=False).encode('utf-8')\n require(len(raw) <= 4096, 'Marker exceeds byte budget')\n pending = PATHS[kind] + '.pending'\n with open(pending, 'xb') as stream:\n stream.write(raw); stream.flush(); os.fsync(stream.fileno())\n os.link(pending, PATHS[kind]) # Exclusive publication of complete bytes.\n os.unlink(pending)\n return {'value': row, 'sha256': hashlib.sha256(raw).hexdigest(), 'bytes': len(raw), 'rawBase64': base64.b64encode(raw).decode('ascii')}\nentered = marker('entered')\ntime.sleep(8)\nexited = marker('exited')\nresult.update(entered=entered, exited=exited, holdSeconds=8)\n" + }, + "requestJson": "{\"script\": \"import threading, builtins\\nif threading.current_thread() is not threading.main_thread():\\n raise RuntimeError('Busy probe requires the native main thread')\\n_registry = getattr(builtins, '_adom_mechanical_ralph_runs', None)\\nif not isinstance(_registry, dict) or '20261005T210310Z-568fe7869d0b41d5a83014811fe170ac' not in _registry:\\n raise RuntimeError('Existing exact run registry is required')\\nimport json\\nREQUEST = json.loads('{\\\"action\\\": \\\"inventory\\\", \\\"runId\\\": \\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\", \\\"host\\\": \\\"ADOM_DREW2\\\", \\\"sessionId\\\": \\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\"}')\\n\\nimport base64, builtins, csv, hashlib, json, math, os, platform, re, sys, tempfile\\n\\ndef require(condition, message):\\n if not condition:\\n raise RuntimeError(message)\\n\\ndef same(a, b):\\n if isinstance(a, bool) or isinstance(b, bool):\\n return type(a) is type(b) and a == b\\n if isinstance(a, (int, float)) and isinstance(b, (int, float)):\\n return math.isfinite(a) and math.isfinite(b) and math.isclose(a, b, rel_tol=1e-7, abs_tol=1e-7)\\n if isinstance(a, dict) and isinstance(b, dict):\\n return a.keys() == b.keys() and all(same(a[k], b[k]) for k in a)\\n if isinstance(a, list) and isinstance(b, list):\\n return len(a) == len(b) and all(same(x, y) for x, y in zip(a, b))\\n return a == b\\n\\ndef vector(p):\\n return [p.x * 10, p.y * 10, p.z * 10]\\n\\ndef body_measure(body):\\n properties = body.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)\\n box = body.boundingBox\\n return {'name': body.name, 'volume': properties.volume * 1000, 'mass': properties.mass,\\n 'centerOfMass': vector(properties.centerOfMass), 'faces': body.faces.count,\\n 'bounds': [vector(box.minPoint), vector(box.maxPoint)],\\n 'material': body.material.name if body.material else None}\\n\\ndef witness(document):\\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\\n require(design is not None, 'Owned document is no longer a design')\\n root = design.rootComponent\\n components, occurrences = [], []\\n all_bodies = [body_measure(b) for b in root.bRepBodies]\\n for comp in design.allComponents:\\n components.append({'name': '' if comp == root else comp.name,\\n 'partNumber': comp.partNumber, 'description': comp.description,\\n 'material': comp.material.name if comp.material else None,\\n 'attributes': {a.name: a.value for a in comp.attributes if a.groupName == 'AdomMechanical'},\\n 'bodies': [body_measure(b) for b in comp.bRepBodies],\\n 'sketches': [{'name': s.name, 'fullyConstrained': s.isFullyConstrained,\\n 'curves': s.sketchCurves.count, 'profiles': s.profiles.count} for s in comp.sketches]})\\n for occurrence in root.allOccurrences:\\n matrix = list(occurrence.transform2.asArray())\\n for index in (3, 7, 11): matrix[index] *= 10\\n bodies = [body_measure(b) for b in occurrence.bRepBodies]\\n all_bodies.extend(bodies)\\n occurrences.append({'path': occurrence.fullPathName, 'component': occurrence.component.name,\\n 'transform': matrix, 'bodies': bodies})\\n props = root.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)\\n return {'parameters': {p.name: p.expression for p in design.allParameters},\\n 'timelineCount': design.timeline.count,\\n 'components': sorted(components, key=lambda c: c['name']),\\n 'occurrences': sorted(occurrences, key=lambda o: o['path']),\\n 'physical': {'volume': props.volume * 1000, 'mass': props.mass,\\n 'centerOfMass': vector(props.centerOfMass)},\\n 'instanceVolume': sum(b['volume'] for b in all_bodies),\\n 'instanceCount': len(all_bodies)}\\n\\nrequire(platform.node().lower() == REQUEST['host'].lower(), 'Host identity differs from expected host')\\nrequire(re.fullmatch(r'[A-Za-z0-9_-]{12,100}', REQUEST['runId']) is not None, 'Invalid run ID')\\nmodules = [m for n, m in list(sys.modules.items())\\n if n.endswith('.mechanical.core') and getattr(m, 'SESSION_ID', None) == REQUEST['sessionId']]\\nrequire(len(modules) == 1, 'Exact serving mechanical session is unavailable; no ownership inference')\\ncore = modules[0]\\nregistries = getattr(builtins, '_adom_mechanical_ralph_runs', None)\\nif registries is None:\\n registries = {}\\n builtins._adom_mechanical_ralph_runs = registries\\naction = REQUEST['action']\\nrun = registries.get(REQUEST['runId'])\\n\\ndef documents():\\n return [{'creationId': d.creationId, 'name': d.name, 'modified': d.isModified, 'saved': d.isSaved}\\n for d in app.documents]\\n\\ndef idle():\\n require(ui.activeCommand in ('', 'SelectCommand', 'Select'), 'Interactive command active; refusing document lifecycle action')\\n\\ndef fingerprint(document):\\n return {'creationId': document.creationId, 'name': document.name,\\n 'modified': document.isModified, 'saved': document.isSaved}\\n\\ndef owned(document_id, allow_closed=False):\\n require(document_id in run['documents'], 'Document has no exact native ownership entry')\\n row = run['documents'][document_id]\\n if row.get('closed'):\\n require(allow_closed, 'Owned document is already closed')\\n return row\\n document = row['object']\\n require(any(d == document for d in app.documents), 'Exact owned document is no longer open')\\n require(not any(d == document for d in run['baselineObjects']), 'Refusing a baseline document')\\n require(document.name == row['name'] and not document.isSaved, 'Owned document was renamed or saved externally')\\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\\n marker = design.rootComponent.attributes.itemByName('AdomRalph', 'owner')\\n require(marker and marker.value == REQUEST['runId'], 'Run ownership marker changed')\\n marker = design.rootComponent.attributes.itemByName('AdomRalph', 'documentId')\\n require(marker and marker.value == document_id, 'Runtime document marker changed')\\n return row\\n\\ndef path_in_scratch(path):\\n root = os.path.realpath(run['scratch'])\\n path = os.path.abspath(path)\\n require(os.path.commonpath([root, os.path.realpath(path)]) == root and os.path.realpath(path) != root,\\n 'Artifact is not inside the owned scratch directory')\\n require(not os.path.islink(path), 'Artifact is a symlink')\\n return path\\n\\ndef file_info(path):\\n path = path_in_scratch(path)\\n require(os.path.isfile(path), 'Checkpoint file is absent')\\n require(os.path.getsize(path) <= 32 * 1024 * 1024, 'Fixture artifact exceeds 32 MiB budget')\\n with open(path, 'rb') as stream: data = stream.read()\\n return {'path': path.replace('\\\\\\\\', '/'), 'sha256': hashlib.sha256(data).hexdigest(), 'bytes': len(data)}\\n\\ndef register(document, document_id, role):\\n require(not any(d == document for d in run['baselineObjects']), 'Creation returned a baseline document')\\n require(document_id not in run['documents'], 'Runtime ID is already registered')\\n # Retain exact object first, including if marker creation later fails.\\n row = {'object': document, 'documentId': document_id, 'role': role,\\n 'creationId': document.creationId, 'name': document.name, 'closed': False, 'checkpoint': None}\\n run['documents'][document_id] = row\\n require(not document.isSaved and document.name.startswith('Untitled'), 'Only new unnamed designs are owned')\\n design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType'))\\n design.rootComponent.attributes.add('AdomRalph', 'owner', REQUEST['runId'])\\n design.rootComponent.attributes.add('AdomRalph', 'documentId', document_id)\\n return row\\n\\ndef public_row(row):\\n return {k: v for k, v in row.items() if k not in ('object', 'witness')}\\n\\nif action == 'begin':\\n idle()\\n require(run is None, 'Native run registry already exists; use recover')\\n require(app.documents.count > 0, 'An existing active design is required for a read-only baseline')\\n baseline = documents()\\n require(baseline == REQUEST['baseline'], 'Documents changed after baseline; refusing to start')\\n scratch = os.path.join(tempfile.gettempdir(), 'adom-fusion-ralph', REQUEST['runId'])\\n require(not os.path.exists(scratch), 'Run scratch already exists')\\n parent = os.path.dirname(scratch)\\n require(os.path.realpath(parent) == os.path.abspath(parent), 'Scratch parent resolves through a link')\\n os.makedirs(scratch)\\n run = {'sessionId': REQUEST['sessionId'], 'documents': {}, 'scratch': scratch,\\n 'baselineObjects': list(app.documents), 'baseline': baseline,\\n 'activeObject': app.activeDocument, 'activeFingerprint': fingerprint(app.activeDocument)}\\n registries[REQUEST['runId']] = run\\n result = {'success': True, 'scratch': scratch.replace('\\\\\\\\', '/'), 'documents': baseline}\\nelse:\\n require(run is not None and run['sessionId'] == REQUEST['sessionId'], 'Native registry/session missing; no close attempted')\\n if action == 'inventory':\\n result = {'success': True, 'documents': [public_row(r) for r in run['documents'].values()],\\n 'provisionalImportCount': len(run.get('provisionalImports', [])),\\n 'scratch': run['scratch'].replace('\\\\\\\\', '/')}\\n elif action == 'register':\\n idle()\\n document, design, document_id = core.active(app)\\n require(document_id == REQUEST['documentId'], 'Active runtime document differs from typed creation result')\\n row = register(document, document_id, REQUEST['role'])\\n result = {'success': True, **public_row(row)}\\n elif action in ('witness', 'verify', 'activate', 'close', 'checkpoint', 'capture'):\\n row = owned(REQUEST['documentId'], action in ('close', 'verify'))\\n document = row['object']\\n if action == 'verify':\\n if not row.get('closed'):\\n checkpoint = row['checkpoint']\\n require(checkpoint is not None, 'No verified native checkpoint')\\n require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed')\\n require(same(witness(document), row['witness']), 'Model changed since checkpoint')\\n result = {'success': True, 'documentId': row['documentId'], 'ownerRunId': REQUEST['runId'], 'closed': row['closed']}\\n elif action == 'witness':\\n require(app.activeDocument == document, 'Active document changed; no implicit activation')\\n result = {'success': True, 'documentId': row['documentId'], 'witness': witness(document)}\\n elif action == 'activate':\\n idle()\\n require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']),\\n 'User selected an external document; refusing activation')\\n if app.activeDocument != document:\\n require(document.activate(), 'Owned document activation failed')\\n result = {'success': True, 'documentId': row['documentId']}\\n elif action == 'close':\\n idle()\\n if not row['closed']:\\n require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']),\\n 'User selected an external document; refusing lifecycle changes')\\n checkpoint = row['checkpoint']\\n require(checkpoint is not None, 'No verified native checkpoint')\\n require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed')\\n require(same(witness(document), row['witness']), 'Model changed since checkpoint')\\n require(document.close(False), 'Owned document close returned false')\\n require(not any(d == document for d in app.documents), 'Owned document still appears in open documents')\\n row['closed'] = True\\n result = {'success': True, 'closedDocumentId': row['documentId'], 'closed': True}\\n elif action == 'capture':\\n require(app.activeDocument == document, 'Active document changed before capture')\\n path = path_in_scratch(REQUEST['path'])\\n require(not os.path.exists(path), 'Capture destination already exists')\\n viewport = app.activeViewport\\n viewport.fit()\\n viewport.refresh()\\n require(viewport.saveAsImageFile(path, 1280, 900), 'Viewport capture failed')\\n result = {'success': True, **file_info(path)}\\n else:\\n idle()\\n require(app.activeDocument == document, 'Active document changed before roundtrip')\\n path = path_in_scratch(REQUEST['path'])\\n archive = file_info(path)\\n before = witness(document)\\n options = app.importManager.createFusionArchiveImportOptions(path)\\n imported = app.importManager.importToNewDocument(options)\\n # Keep the actual returned API object before any fragile getter or\\n # identity lookup. A provisional object can only be retained/reported.\\n provisional = {'object': imported}\\n run.setdefault('provisionalImports', []).append(provisional)\\n require(imported is not None and app.activeDocument == imported, 'Archive import returned no active document')\\n reopened_doc, reopened_design, reopened_id = core.active(app)\\n require(reopened_doc == imported, 'Imported document identity mismatch')\\n reopened = register(imported, reopened_id, row['role'] + '-reopened')\\n run['provisionalImports'].remove(provisional)\\n after = witness(imported)\\n require(same(before, after), 'Native archive roundtrip changed measured model state')\\n # Mark both sides only after independent semantic comparison.\\n for item in (row, reopened):\\n item['checkpoint'] = archive\\n item['witness'] = before\\n result = {'success': True, 'archive': archive, 'before': before, 'after': after,\\n 'reopened': public_row(reopened), 'source': public_row(row)}\\n elif action == 'file':\\n info = file_info(REQUEST['path'])\\n with open(info['path'], 'rb') as stream: data = stream.read()\\n result = {'success': True, **info, 'base64': base64.b64encode(data).decode('ascii')}\\n if REQUEST.get('csv'):\\n with open(info['path'], encoding='utf-8', newline='') as stream:\\n result['rows'] = list(csv.DictReader(stream))\\n elif action == 'restore':\\n idle()\\n require(not run.get('provisionalImports'), 'Unresolved imported object remains; restoration refused')\\n require(all(row['closed'] for row in run['documents'].values()), 'Owned documents remain open')\\n require(len(list(app.documents)) == len(run['baselineObjects']) and\\n all(any(d == original for d in app.documents) for original in run['baselineObjects']),\\n 'Document set changed; refusing to change active document')\\n require(documents() == run['baseline'], 'Original document flags changed')\\n original = run['activeObject']\\n if app.activeDocument != original:\\n require(original.activate(), 'Original document activation failed')\\n require(fingerprint(original) == run['activeFingerprint'], 'Original active document changed')\\n result = {'success': True, 'documents': documents(), 'activeCreationId': original.creationId}\\n else:\\n raise RuntimeError('Unknown native action')\\n\\nEXPECTED = json.loads('{\\\"runId\\\": \\\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\", \\\"sessionId\\\": \\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\", \\\"host\\\": \\\"ADOM_DREW2\\\", \\\"pid\\\": 41728, \\\"scratch\\\": \\\"C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\", \\\"nonce\\\": \\\"7575c5bb7b3b474ab621f55d649416a4\\\", \\\"original\\\": {\\\"creationId\\\": \\\"70b2c575-f830-4751-9f88-2f1f3ab91fb1\\\", \\\"modified\\\": false, \\\"name\\\": \\\"Untitled\\\", \\\"saved\\\": false}}')\\n\\nimport time, threading\\nrequire(threading.current_thread() is threading.main_thread(), 'Main thread changed')\\nrequire(os.getpid() == EXPECTED['pid'], 'Native Fusion PID changed')\\nrequire(not run.get('provisionalImports') and not run.get('retainRequired'), 'Native recovery remains unresolved')\\nrequire(len(run['documents']) <= 1024 and all(row.get('closed') is True and not row.get('retainRequired') for row in run['documents'].values()), 'Owned native document remains open or retained')\\nrequire(len(run['baselineObjects']) == 1 and app.documents.count == 1, 'Native original inventory differs')\\noriginal = run['activeObject']\\nrequire(app.activeDocument == original and app.documents.item(0) == original and run['baselineObjects'][0] == original, 'Exact original object differs')\\nrequire(run['activeFingerprint'] == EXPECTED['original'] and fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed')\\nrequire(not original.isModified and not original.isSaved, 'Original is not pristine')\\nrequire(documents() == run['baseline'] == [EXPECTED['original']], 'Original baseline changed')\\nidle()\\ndesign = adsk.fusion.Design.cast(original.products.itemByProductType('DesignProductType'))\\nrequire(design is not None and design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry is not pristine')\\nrequire(os.path.normcase(os.path.abspath(run['scratch'])) == os.path.normcase(os.path.abspath(EXPECTED['scratch'])), 'Scratch differs from native registry')\\nrequire(os.path.isdir(run['scratch']) and os.path.realpath(run['scratch']) == os.path.abspath(run['scratch']), 'Scratch root is linked or absent')\\ndef state():\\n require(app.activeDocument == original and app.documents.count == 1 and app.documents.item(0) == original, 'Original object changed during hold')\\n require(fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed during hold')\\n require(design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry changed during hold')\\n idle()\\n return fingerprint(original)\\nresult = {'success': True, 'sessionId': EXPECTED['sessionId'], 'runId': EXPECTED['runId'], 'pid': os.getpid(), 'original': state()}\\n\\nPATHS = json.loads('{\\\"entered\\\": \\\"C:\\\\\\\\\\\\\\\\Users\\\\\\\\\\\\\\\\drew\\\\\\\\\\\\\\\\AppData\\\\\\\\\\\\\\\\Local\\\\\\\\\\\\\\\\Temp\\\\\\\\\\\\\\\\adom-fusion-ralph\\\\\\\\\\\\\\\\20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\\\\\\\\\\\\\\busy-7575c5bb7b3b474ab621f55d649416a4\\\\\\\\\\\\\\\\entered.json\\\", \\\"exited\\\": \\\"C:\\\\\\\\\\\\\\\\Users\\\\\\\\\\\\\\\\drew\\\\\\\\\\\\\\\\AppData\\\\\\\\\\\\\\\\Local\\\\\\\\\\\\\\\\Temp\\\\\\\\\\\\\\\\adom-fusion-ralph\\\\\\\\\\\\\\\\20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\\\\\\\\\\\\\\busy-7575c5bb7b3b474ab621f55d649416a4\\\\\\\\\\\\\\\\exited.json\\\"}')\\n\\nfolder = os.path.dirname(PATHS['entered'])\\nrequire(os.path.dirname(folder) == os.path.abspath(run['scratch']), 'Marker directory escaped exact scratch')\\nrequire(platform.system() == 'Windows', 'Shared QPC proof requires Windows')\\nimport ctypes\\nkernel = ctypes.WinDLL('kernel32', use_last_error=True)\\nfor function in (kernel.QueryPerformanceCounter, kernel.QueryPerformanceFrequency):\\n function.argtypes = [ctypes.POINTER(ctypes.c_longlong)]\\n function.restype = ctypes.c_int\\ndef counter():\\n ticks, frequency = ctypes.c_longlong(), ctypes.c_longlong()\\n require(kernel.QueryPerformanceFrequency(ctypes.byref(frequency)) and frequency.value > 0, 'QPC frequency unavailable')\\n require(kernel.QueryPerformanceCounter(ctypes.byref(ticks)) and ticks.value > 0, 'QPC timestamp unavailable')\\n return {'counterKind': 'windows_qpc', 'counterTicks': ticks.value, 'counterFrequency': frequency.value}\\nos.mkdir(folder) # Exclusive probe directory; never reuse or remove evidence.\\ndef marker(kind):\\n row = {key: EXPECTED[key] for key in ('nonce', 'sessionId', 'runId', 'pid', 'host')}\\n row.update(kind=kind, wall=time.time(), monotonic=time.monotonic(), thread=threading.get_ident(), original=state())\\n row.update(counter())\\n raw = json.dumps(row, sort_keys=True, allow_nan=False).encode('utf-8')\\n require(len(raw) <= 4096, 'Marker exceeds byte budget')\\n pending = PATHS[kind] + '.pending'\\n with open(pending, 'xb') as stream:\\n stream.write(raw); stream.flush(); os.fsync(stream.fileno())\\n os.link(pending, PATHS[kind]) # Exclusive publication of complete bytes.\\n os.unlink(pending)\\n return {'value': row, 'sha256': hashlib.sha256(raw).hexdigest(), 'bytes': len(raw), 'rawBase64': base64.b64encode(raw).decode('ascii')}\\nentered = marker('entered')\\ntime.sleep(8)\\nexited = marker('exited')\\nresult.update(entered=entered, exited=exited, holdSeconds=8)\\n\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion finite busy-status hold", + "startedAt": 1791234613.2407322, + "mutating": false, + "stdout": "{\n \"_hint\": \"Window opened/changed in the BACKGROUND - the user's focus was NOT touched; do NOT foreground anything to compensate. Render results via fusion_state. If the USER asks to watch, re-call with {\\\"foreground\\\": true, \\\"foregroundReason\\\": \\\"\\\"}.\",\n \"_timeoutHint\": \"ab waits up to 180s 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.\",\n \"_timing\": {\n \"addinSec\": 8.08,\n \"dialogsSec\": 0.61,\n \"postSec\": 0.95,\n \"preSec\": 0.02,\n \"scope\": \"one exe pass-through of this verb only: excludes the relay hop, ab's queue, and any earlier pass-through a composite verb (routing, tour) made before this one, so the caller's wall clock can be longer\",\n \"totalSec\": 9.66\n },\n \"data\": {\n \"createdDocument\": null,\n \"documentName\": \"Untitled\",\n \"result\": {\n \"entered\": {\n \"bytes\": 503,\n \"rawBase64\": \"eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=\",\n \"sha256\": \"145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4\",\n \"value\": {\n \"counterFrequency\": 10000000,\n \"counterKind\": \"windows_qpc\",\n \"counterTicks\": 3663048907271,\n \"host\": \"ADOM_DREW2\",\n \"kind\": \"entered\",\n \"monotonic\": 366304.8903565,\n \"nonce\": \"7575c5bb7b3b474ab621f55d649416a4\",\n \"original\": {\n \"creationId\": \"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\n \"modified\": false,\n \"name\": \"Untitled\",\n \"saved\": false\n },\n \"pid\": 41728,\n \"runId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\",\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"thread\": 54084,\n \"wall\": 1791234613.4198997\n }\n },\n \"exited\": {\n \"bytes\": 502,\n \"rawBase64\": \"eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMTI4OTUwMDc0LCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZXhpdGVkIiwgIm1vbm90b25pYyI6IDM2NjMxMi44OTQ1MzgyLCAibm9uY2UiOiAiNzU3NWM1YmI3YjNiNDc0YWI2MjFmNTVkNjQ5NDE2YTQiLCAib3JpZ2luYWwiOiB7ImNyZWF0aW9uSWQiOiAiNzBiMmM1NzUtZjgzMC00NzUxLTlmODgtMmYxZjNhYjkxZmIxIiwgIm1vZGlmaWVkIjogZmFsc2UsICJuYW1lIjogIlVudGl0bGVkIiwgInNhdmVkIjogZmFsc2V9LCAicGlkIjogNDE3MjgsICJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAidGhyZWFkIjogNTQwODQsICJ3YWxsIjogMTc5MTIzNDYyMS40MjQwODA2fQ==\",\n \"sha256\": \"efb7b28c00f81b810ad549d80208ed7734716ba1998763b6333ce6c099799611\",\n \"value\": {\n \"counterFrequency\": 10000000,\n \"counterKind\": \"windows_qpc\",\n \"counterTicks\": 3663128950074,\n \"host\": \"ADOM_DREW2\",\n \"kind\": \"exited\",\n \"monotonic\": 366312.8945382,\n \"nonce\": \"7575c5bb7b3b474ab621f55d649416a4\",\n \"original\": {\n \"creationId\": \"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\n \"modified\": false,\n \"name\": \"Untitled\",\n \"saved\": false\n },\n \"pid\": 41728,\n \"runId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\",\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"thread\": 54084,\n \"wall\": 1791234621.4240806\n }\n },\n \"holdSeconds\": 8,\n \"original\": {\n \"creationId\": \"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\n \"modified\": false,\n \"name\": \"Untitled\",\n \"saved\": false\n },\n \"pid\": 41728,\n \"runId\": \"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\",\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"success\": true\n }\n },\n \"documentHygiene\": {\n \"documents\": [\n {\n \"isModified\": false,\n \"isSaved\": false,\n \"name\": \"Untitled\",\n \"needsSave\": false,\n \"saveStateKnown\": true\n }\n ],\n \"inspectionComplete\": true,\n \"needsSaveCount\": 0,\n \"openDocumentCount\": 1,\n \"ownership\": \"notInferred\",\n \"recoveryHealth\": \"notInspected\"\n },\n \"durationMs\": 9765,\n \"error\": \"\",\n \"output\": \"Modeling script ran successfully.\",\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 180,\n \"windowEtiquette\": \"background\"\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234623.014243, + "raw": { + "_hint": "Window opened/changed in the BACKGROUND - the user's focus was NOT touched; do NOT foreground anything to compensate. Render results via fusion_state. If the USER asks to watch, re-call with {\"foreground\": true, \"foregroundReason\": \"\"}.", + "_timeoutHint": "ab waits up to 180s 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.", + "_timing": { + "addinSec": 8.08, + "dialogsSec": 0.61, + "postSec": 0.95, + "preSec": 0.02, + "scope": "one exe pass-through of this verb only: excludes the relay hop, ab's queue, and any earlier pass-through a composite verb (routing, tour) made before this one, so the caller's wall clock can be longer", + "totalSec": 9.66 + }, + "data": { + "createdDocument": null, + "documentName": "Untitled", + "result": { + "entered": { + "bytes": 503, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=", + "sha256": "145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4", + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663048907271, + "host": "ADOM_DREW2", + "kind": "entered", + "monotonic": 366304.8903565, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234613.4198997 + } + }, + "exited": { + "bytes": 502, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMTI4OTUwMDc0LCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZXhpdGVkIiwgIm1vbm90b25pYyI6IDM2NjMxMi44OTQ1MzgyLCAibm9uY2UiOiAiNzU3NWM1YmI3YjNiNDc0YWI2MjFmNTVkNjQ5NDE2YTQiLCAib3JpZ2luYWwiOiB7ImNyZWF0aW9uSWQiOiAiNzBiMmM1NzUtZjgzMC00NzUxLTlmODgtMmYxZjNhYjkxZmIxIiwgIm1vZGlmaWVkIjogZmFsc2UsICJuYW1lIjogIlVudGl0bGVkIiwgInNhdmVkIjogZmFsc2V9LCAicGlkIjogNDE3MjgsICJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAidGhyZWFkIjogNTQwODQsICJ3YWxsIjogMTc5MTIzNDYyMS40MjQwODA2fQ==", + "sha256": "efb7b28c00f81b810ad549d80208ed7734716ba1998763b6333ce6c099799611", + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663128950074, + "host": "ADOM_DREW2", + "kind": "exited", + "monotonic": 366312.8945382, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234621.4240806 + } + }, + "holdSeconds": 8, + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + } + }, + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 0, + "openDocumentCount": 1, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 9765, + "error": "", + "output": "Modeling script ran successfully.", + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 180, + "windowEtiquette": "background" + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/busy/host-clock.ps1 b/docs/mechanical-verification/cp8/busy/host-clock.ps1 new file mode 100644 index 0000000..04491dd --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/host-clock.ps1 @@ -0,0 +1,54 @@ + +$ErrorActionPreference = 'Stop' +try { + $q = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('eyJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgInBpZCI6IDQxNzI4LCAic2NyYXRjaCI6ICJDOi9Vc2Vycy9kcmV3L0FwcERhdGEvTG9jYWwvVGVtcC9hZG9tLWZ1c2lvbi1yYWxwaC8yMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBhdGhzIjogeyJlbnRlcmVkIjogIkM6XFxVc2Vyc1xcZHJld1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXGFkb20tZnVzaW9uLXJhbHBoXFwyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjXFxidXN5LTc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0XFxlbnRlcmVkLmpzb24iLCAiZXhpdGVkIjogIkM6XFxVc2Vyc1xcZHJld1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXGFkb20tZnVzaW9uLXJhbHBoXFwyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjXFxidXN5LTc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0XFxleGl0ZWQuanNvbiJ9LCAibW9kZSI6ICJjbG9jayJ9')) | ConvertFrom-Json + if ([Environment]::MachineName -ine $q.host) { throw 'Host identity differs' } + $p = Get-CimInstance Win32_Process -Filter ('ProcessId=' + [int]$q.pid) + if (-not $p -or $p.Name -ine 'Fusion360.exe') { throw 'Expected Fusion process is absent' } + $scratch = [IO.Path]::GetFullPath([string]$q.scratch) + if ([IO.Path]::GetFileName($scratch) -cne $q.runId) { throw 'Scratch run identity differs' } + $walk = Get-Item -LiteralPath $scratch + while ($null -ne $walk) { + if (($walk.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Scratch traverses a reparse point' } + $walk = $walk.Parent + } + function Read-Marker([string]$path) { + $full = [IO.Path]::GetFullPath($path) + $folder = [IO.Path]::GetDirectoryName($full) + if ([IO.Path]::GetDirectoryName($folder) -ine $scratch -or [IO.Path]::GetFileName($folder) -cne ('busy-' + $q.nonce)) { throw 'Marker escaped owned scratch' } + foreach ($item in @((Get-Item -LiteralPath $folder), (Get-Item -LiteralPath $full))) { + if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Marker is linked' } + } + $file = Get-Item -LiteralPath $full + if ($file.Length -gt 4096 -or $file.Length -le 0) { throw 'Marker size invalid' } + $bytes = [IO.File]::ReadAllBytes($full) + if ($bytes.Length -gt 4096) { throw 'Marker exceeded read budget' } + $sha = [Security.Cryptography.SHA256]::Create() + try { $hash = [BitConverter]::ToString($sha.ComputeHash($bytes)).Replace('-','').ToLowerInvariant() } finally { $sha.Dispose() } + return @{ value=([Text.Encoding]::UTF8.GetString($bytes) | ConvertFrom-Json); sha256=$hash; bytes=$bytes.Length; rawBase64=[Convert]::ToBase64String($bytes) } + } + $values = @{} + if ($q.mode -eq 'initial') { + if (Test-Path -LiteralPath ([IO.Path]::GetDirectoryName($q.paths.entered))) { throw 'Probe directory already exists' } + } + if ($q.mode -eq 'entered') { + $wait = [Diagnostics.Stopwatch]::StartNew() + while (-not (Test-Path -LiteralPath $q.paths.entered)) { + if ($wait.Elapsed.TotalSeconds -ge 5) { throw 'Entered marker was not observed within five seconds' } + Start-Sleep -Milliseconds 25 + } + $values.entered = Read-Marker $q.paths.entered + } + if ($q.mode -eq 'final') { + $values.entered = Read-Marker $q.paths.entered + $values.exited = Read-Marker $q.paths.exited + } + $wall = ([DateTimeOffset]::UtcNow - [DateTimeOffset]'1970-01-01T00:00:00Z').TotalSeconds + if (-not [Diagnostics.Stopwatch]::IsHighResolution) { throw 'Stopwatch is not using the high-resolution performance counter' } + $ticks = [Diagnostics.Stopwatch]::GetTimestamp() + $again = Get-CimInstance Win32_Process -Filter ('ProcessId=' + [int]$q.pid) + if (-not $again -or $again.CreationDate -ne $p.CreationDate -or $again.ExecutablePath -ine $p.ExecutablePath) { throw 'Native process changed during host read' } + @{ success=$true; host=[Environment]::MachineName; pid=[int]$q.pid; processCreatedUtc=$p.CreationDate.ToUniversalTime().ToString('o'); + executablePath=$p.ExecutablePath; wall=$wall; markers=$values; counterKind='windows_qpc'; counterTicks=$ticks; + counterFrequency=[Diagnostics.Stopwatch]::Frequency; highResolution=$true } | ConvertTo-Json -Depth 12 -Compress +} catch { [Console]::Error.WriteLine($_.Exception.Message); exit 1 } diff --git a/docs/mechanical-verification/cp8/busy/host-entered.ps1 b/docs/mechanical-verification/cp8/busy/host-entered.ps1 new file mode 100644 index 0000000..8f91e41 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/host-entered.ps1 @@ -0,0 +1,54 @@ + +$ErrorActionPreference = 'Stop' +try { + $q = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('eyJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgInBpZCI6IDQxNzI4LCAic2NyYXRjaCI6ICJDOi9Vc2Vycy9kcmV3L0FwcERhdGEvTG9jYWwvVGVtcC9hZG9tLWZ1c2lvbi1yYWxwaC8yMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBhdGhzIjogeyJlbnRlcmVkIjogIkM6XFxVc2Vyc1xcZHJld1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXGFkb20tZnVzaW9uLXJhbHBoXFwyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjXFxidXN5LTc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0XFxlbnRlcmVkLmpzb24iLCAiZXhpdGVkIjogIkM6XFxVc2Vyc1xcZHJld1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXGFkb20tZnVzaW9uLXJhbHBoXFwyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjXFxidXN5LTc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0XFxleGl0ZWQuanNvbiJ9LCAibW9kZSI6ICJlbnRlcmVkIn0=')) | ConvertFrom-Json + if ([Environment]::MachineName -ine $q.host) { throw 'Host identity differs' } + $p = Get-CimInstance Win32_Process -Filter ('ProcessId=' + [int]$q.pid) + if (-not $p -or $p.Name -ine 'Fusion360.exe') { throw 'Expected Fusion process is absent' } + $scratch = [IO.Path]::GetFullPath([string]$q.scratch) + if ([IO.Path]::GetFileName($scratch) -cne $q.runId) { throw 'Scratch run identity differs' } + $walk = Get-Item -LiteralPath $scratch + while ($null -ne $walk) { + if (($walk.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Scratch traverses a reparse point' } + $walk = $walk.Parent + } + function Read-Marker([string]$path) { + $full = [IO.Path]::GetFullPath($path) + $folder = [IO.Path]::GetDirectoryName($full) + if ([IO.Path]::GetDirectoryName($folder) -ine $scratch -or [IO.Path]::GetFileName($folder) -cne ('busy-' + $q.nonce)) { throw 'Marker escaped owned scratch' } + foreach ($item in @((Get-Item -LiteralPath $folder), (Get-Item -LiteralPath $full))) { + if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Marker is linked' } + } + $file = Get-Item -LiteralPath $full + if ($file.Length -gt 4096 -or $file.Length -le 0) { throw 'Marker size invalid' } + $bytes = [IO.File]::ReadAllBytes($full) + if ($bytes.Length -gt 4096) { throw 'Marker exceeded read budget' } + $sha = [Security.Cryptography.SHA256]::Create() + try { $hash = [BitConverter]::ToString($sha.ComputeHash($bytes)).Replace('-','').ToLowerInvariant() } finally { $sha.Dispose() } + return @{ value=([Text.Encoding]::UTF8.GetString($bytes) | ConvertFrom-Json); sha256=$hash; bytes=$bytes.Length; rawBase64=[Convert]::ToBase64String($bytes) } + } + $values = @{} + if ($q.mode -eq 'initial') { + if (Test-Path -LiteralPath ([IO.Path]::GetDirectoryName($q.paths.entered))) { throw 'Probe directory already exists' } + } + if ($q.mode -eq 'entered') { + $wait = [Diagnostics.Stopwatch]::StartNew() + while (-not (Test-Path -LiteralPath $q.paths.entered)) { + if ($wait.Elapsed.TotalSeconds -ge 5) { throw 'Entered marker was not observed within five seconds' } + Start-Sleep -Milliseconds 25 + } + $values.entered = Read-Marker $q.paths.entered + } + if ($q.mode -eq 'final') { + $values.entered = Read-Marker $q.paths.entered + $values.exited = Read-Marker $q.paths.exited + } + $wall = ([DateTimeOffset]::UtcNow - [DateTimeOffset]'1970-01-01T00:00:00Z').TotalSeconds + if (-not [Diagnostics.Stopwatch]::IsHighResolution) { throw 'Stopwatch is not using the high-resolution performance counter' } + $ticks = [Diagnostics.Stopwatch]::GetTimestamp() + $again = Get-CimInstance Win32_Process -Filter ('ProcessId=' + [int]$q.pid) + if (-not $again -or $again.CreationDate -ne $p.CreationDate -or $again.ExecutablePath -ine $p.ExecutablePath) { throw 'Native process changed during host read' } + @{ success=$true; host=[Environment]::MachineName; pid=[int]$q.pid; processCreatedUtc=$p.CreationDate.ToUniversalTime().ToString('o'); + executablePath=$p.ExecutablePath; wall=$wall; markers=$values; counterKind='windows_qpc'; counterTicks=$ticks; + counterFrequency=[Diagnostics.Stopwatch]::Frequency; highResolution=$true } | ConvertTo-Json -Depth 12 -Compress +} catch { [Console]::Error.WriteLine($_.Exception.Message); exit 1 } diff --git a/docs/mechanical-verification/cp8/busy/host-final.ps1 b/docs/mechanical-verification/cp8/busy/host-final.ps1 new file mode 100644 index 0000000..2f66c6c --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/host-final.ps1 @@ -0,0 +1,54 @@ + +$ErrorActionPreference = 'Stop' +try { + $q = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('eyJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgInBpZCI6IDQxNzI4LCAic2NyYXRjaCI6ICJDOi9Vc2Vycy9kcmV3L0FwcERhdGEvTG9jYWwvVGVtcC9hZG9tLWZ1c2lvbi1yYWxwaC8yMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBhdGhzIjogeyJlbnRlcmVkIjogIkM6XFxVc2Vyc1xcZHJld1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXGFkb20tZnVzaW9uLXJhbHBoXFwyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjXFxidXN5LTc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0XFxlbnRlcmVkLmpzb24iLCAiZXhpdGVkIjogIkM6XFxVc2Vyc1xcZHJld1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXGFkb20tZnVzaW9uLXJhbHBoXFwyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjXFxidXN5LTc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0XFxleGl0ZWQuanNvbiJ9LCAibW9kZSI6ICJmaW5hbCJ9')) | ConvertFrom-Json + if ([Environment]::MachineName -ine $q.host) { throw 'Host identity differs' } + $p = Get-CimInstance Win32_Process -Filter ('ProcessId=' + [int]$q.pid) + if (-not $p -or $p.Name -ine 'Fusion360.exe') { throw 'Expected Fusion process is absent' } + $scratch = [IO.Path]::GetFullPath([string]$q.scratch) + if ([IO.Path]::GetFileName($scratch) -cne $q.runId) { throw 'Scratch run identity differs' } + $walk = Get-Item -LiteralPath $scratch + while ($null -ne $walk) { + if (($walk.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Scratch traverses a reparse point' } + $walk = $walk.Parent + } + function Read-Marker([string]$path) { + $full = [IO.Path]::GetFullPath($path) + $folder = [IO.Path]::GetDirectoryName($full) + if ([IO.Path]::GetDirectoryName($folder) -ine $scratch -or [IO.Path]::GetFileName($folder) -cne ('busy-' + $q.nonce)) { throw 'Marker escaped owned scratch' } + foreach ($item in @((Get-Item -LiteralPath $folder), (Get-Item -LiteralPath $full))) { + if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Marker is linked' } + } + $file = Get-Item -LiteralPath $full + if ($file.Length -gt 4096 -or $file.Length -le 0) { throw 'Marker size invalid' } + $bytes = [IO.File]::ReadAllBytes($full) + if ($bytes.Length -gt 4096) { throw 'Marker exceeded read budget' } + $sha = [Security.Cryptography.SHA256]::Create() + try { $hash = [BitConverter]::ToString($sha.ComputeHash($bytes)).Replace('-','').ToLowerInvariant() } finally { $sha.Dispose() } + return @{ value=([Text.Encoding]::UTF8.GetString($bytes) | ConvertFrom-Json); sha256=$hash; bytes=$bytes.Length; rawBase64=[Convert]::ToBase64String($bytes) } + } + $values = @{} + if ($q.mode -eq 'initial') { + if (Test-Path -LiteralPath ([IO.Path]::GetDirectoryName($q.paths.entered))) { throw 'Probe directory already exists' } + } + if ($q.mode -eq 'entered') { + $wait = [Diagnostics.Stopwatch]::StartNew() + while (-not (Test-Path -LiteralPath $q.paths.entered)) { + if ($wait.Elapsed.TotalSeconds -ge 5) { throw 'Entered marker was not observed within five seconds' } + Start-Sleep -Milliseconds 25 + } + $values.entered = Read-Marker $q.paths.entered + } + if ($q.mode -eq 'final') { + $values.entered = Read-Marker $q.paths.entered + $values.exited = Read-Marker $q.paths.exited + } + $wall = ([DateTimeOffset]::UtcNow - [DateTimeOffset]'1970-01-01T00:00:00Z').TotalSeconds + if (-not [Diagnostics.Stopwatch]::IsHighResolution) { throw 'Stopwatch is not using the high-resolution performance counter' } + $ticks = [Diagnostics.Stopwatch]::GetTimestamp() + $again = Get-CimInstance Win32_Process -Filter ('ProcessId=' + [int]$q.pid) + if (-not $again -or $again.CreationDate -ne $p.CreationDate -or $again.ExecutablePath -ine $p.ExecutablePath) { throw 'Native process changed during host read' } + @{ success=$true; host=[Environment]::MachineName; pid=[int]$q.pid; processCreatedUtc=$p.CreationDate.ToUniversalTime().ToString('o'); + executablePath=$p.ExecutablePath; wall=$wall; markers=$values; counterKind='windows_qpc'; counterTicks=$ticks; + counterFrequency=[Diagnostics.Stopwatch]::Frequency; highResolution=$true } | ConvertTo-Json -Depth 12 -Compress +} catch { [Console]::Error.WriteLine($_.Exception.Message); exit 1 } diff --git a/docs/mechanical-verification/cp8/busy/host-initial.ps1 b/docs/mechanical-verification/cp8/busy/host-initial.ps1 new file mode 100644 index 0000000..76e311d --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/host-initial.ps1 @@ -0,0 +1,54 @@ + +$ErrorActionPreference = 'Stop' +try { + $q = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('eyJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgInBpZCI6IDQxNzI4LCAic2NyYXRjaCI6ICJDOi9Vc2Vycy9kcmV3L0FwcERhdGEvTG9jYWwvVGVtcC9hZG9tLWZ1c2lvbi1yYWxwaC8yMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBhdGhzIjogeyJlbnRlcmVkIjogIkM6XFxVc2Vyc1xcZHJld1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXGFkb20tZnVzaW9uLXJhbHBoXFwyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjXFxidXN5LTc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0XFxlbnRlcmVkLmpzb24iLCAiZXhpdGVkIjogIkM6XFxVc2Vyc1xcZHJld1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXGFkb20tZnVzaW9uLXJhbHBoXFwyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjXFxidXN5LTc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0XFxleGl0ZWQuanNvbiJ9LCAibW9kZSI6ICJpbml0aWFsIn0=')) | ConvertFrom-Json + if ([Environment]::MachineName -ine $q.host) { throw 'Host identity differs' } + $p = Get-CimInstance Win32_Process -Filter ('ProcessId=' + [int]$q.pid) + if (-not $p -or $p.Name -ine 'Fusion360.exe') { throw 'Expected Fusion process is absent' } + $scratch = [IO.Path]::GetFullPath([string]$q.scratch) + if ([IO.Path]::GetFileName($scratch) -cne $q.runId) { throw 'Scratch run identity differs' } + $walk = Get-Item -LiteralPath $scratch + while ($null -ne $walk) { + if (($walk.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Scratch traverses a reparse point' } + $walk = $walk.Parent + } + function Read-Marker([string]$path) { + $full = [IO.Path]::GetFullPath($path) + $folder = [IO.Path]::GetDirectoryName($full) + if ([IO.Path]::GetDirectoryName($folder) -ine $scratch -or [IO.Path]::GetFileName($folder) -cne ('busy-' + $q.nonce)) { throw 'Marker escaped owned scratch' } + foreach ($item in @((Get-Item -LiteralPath $folder), (Get-Item -LiteralPath $full))) { + if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Marker is linked' } + } + $file = Get-Item -LiteralPath $full + if ($file.Length -gt 4096 -or $file.Length -le 0) { throw 'Marker size invalid' } + $bytes = [IO.File]::ReadAllBytes($full) + if ($bytes.Length -gt 4096) { throw 'Marker exceeded read budget' } + $sha = [Security.Cryptography.SHA256]::Create() + try { $hash = [BitConverter]::ToString($sha.ComputeHash($bytes)).Replace('-','').ToLowerInvariant() } finally { $sha.Dispose() } + return @{ value=([Text.Encoding]::UTF8.GetString($bytes) | ConvertFrom-Json); sha256=$hash; bytes=$bytes.Length; rawBase64=[Convert]::ToBase64String($bytes) } + } + $values = @{} + if ($q.mode -eq 'initial') { + if (Test-Path -LiteralPath ([IO.Path]::GetDirectoryName($q.paths.entered))) { throw 'Probe directory already exists' } + } + if ($q.mode -eq 'entered') { + $wait = [Diagnostics.Stopwatch]::StartNew() + while (-not (Test-Path -LiteralPath $q.paths.entered)) { + if ($wait.Elapsed.TotalSeconds -ge 5) { throw 'Entered marker was not observed within five seconds' } + Start-Sleep -Milliseconds 25 + } + $values.entered = Read-Marker $q.paths.entered + } + if ($q.mode -eq 'final') { + $values.entered = Read-Marker $q.paths.entered + $values.exited = Read-Marker $q.paths.exited + } + $wall = ([DateTimeOffset]::UtcNow - [DateTimeOffset]'1970-01-01T00:00:00Z').TotalSeconds + if (-not [Diagnostics.Stopwatch]::IsHighResolution) { throw 'Stopwatch is not using the high-resolution performance counter' } + $ticks = [Diagnostics.Stopwatch]::GetTimestamp() + $again = Get-CimInstance Win32_Process -Filter ('ProcessId=' + [int]$q.pid) + if (-not $again -or $again.CreationDate -ne $p.CreationDate -or $again.ExecutablePath -ine $p.ExecutablePath) { throw 'Native process changed during host read' } + @{ success=$true; host=[Environment]::MachineName; pid=[int]$q.pid; processCreatedUtc=$p.CreationDate.ToUniversalTime().ToString('o'); + executablePath=$p.ExecutablePath; wall=$wall; markers=$values; counterKind='windows_qpc'; counterTicks=$ticks; + counterFrequency=[Diagnostics.Stopwatch]::Frequency; highResolution=$true } | ConvertTo-Json -Depth 12 -Compress +} catch { [Console]::Error.WriteLine($_.Exception.Message); exit 1 } diff --git a/docs/mechanical-verification/cp8/busy/native-hold.py b/docs/mechanical-verification/cp8/busy/native-hold.py new file mode 100644 index 0000000..8ab603c --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/native-hold.py @@ -0,0 +1,316 @@ +import threading, builtins +if threading.current_thread() is not threading.main_thread(): + raise RuntimeError('Busy probe requires the native main thread') +_registry = getattr(builtins, '_adom_mechanical_ralph_runs', None) +if not isinstance(_registry, dict) or '20261005T210310Z-568fe7869d0b41d5a83014811fe170ac' not in _registry: + raise RuntimeError('Existing exact run registry is required') +import json +REQUEST = json.loads('{"action": "inventory", "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", "host": "ADOM_DREW2", "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d"}') + +import base64, builtins, csv, hashlib, json, math, os, platform, re, sys, tempfile + +def require(condition, message): + if not condition: + raise RuntimeError(message) + +def same(a, b): + if isinstance(a, bool) or isinstance(b, bool): + return type(a) is type(b) and a == b + if isinstance(a, (int, float)) and isinstance(b, (int, float)): + return math.isfinite(a) and math.isfinite(b) and math.isclose(a, b, rel_tol=1e-7, abs_tol=1e-7) + if isinstance(a, dict) and isinstance(b, dict): + return a.keys() == b.keys() and all(same(a[k], b[k]) for k in a) + if isinstance(a, list) and isinstance(b, list): + return len(a) == len(b) and all(same(x, y) for x, y in zip(a, b)) + return a == b + +def vector(p): + return [p.x * 10, p.y * 10, p.z * 10] + +def body_measure(body): + properties = body.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy) + box = body.boundingBox + return {'name': body.name, 'volume': properties.volume * 1000, 'mass': properties.mass, + 'centerOfMass': vector(properties.centerOfMass), 'faces': body.faces.count, + 'bounds': [vector(box.minPoint), vector(box.maxPoint)], + 'material': body.material.name if body.material else None} + +def witness(document): + design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType')) + require(design is not None, 'Owned document is no longer a design') + root = design.rootComponent + components, occurrences = [], [] + all_bodies = [body_measure(b) for b in root.bRepBodies] + for comp in design.allComponents: + components.append({'name': '' if comp == root else comp.name, + 'partNumber': comp.partNumber, 'description': comp.description, + 'material': comp.material.name if comp.material else None, + 'attributes': {a.name: a.value for a in comp.attributes if a.groupName == 'AdomMechanical'}, + 'bodies': [body_measure(b) for b in comp.bRepBodies], + 'sketches': [{'name': s.name, 'fullyConstrained': s.isFullyConstrained, + 'curves': s.sketchCurves.count, 'profiles': s.profiles.count} for s in comp.sketches]}) + for occurrence in root.allOccurrences: + matrix = list(occurrence.transform2.asArray()) + for index in (3, 7, 11): matrix[index] *= 10 + bodies = [body_measure(b) for b in occurrence.bRepBodies] + all_bodies.extend(bodies) + occurrences.append({'path': occurrence.fullPathName, 'component': occurrence.component.name, + 'transform': matrix, 'bodies': bodies}) + props = root.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy) + return {'parameters': {p.name: p.expression for p in design.allParameters}, + 'timelineCount': design.timeline.count, + 'components': sorted(components, key=lambda c: c['name']), + 'occurrences': sorted(occurrences, key=lambda o: o['path']), + 'physical': {'volume': props.volume * 1000, 'mass': props.mass, + 'centerOfMass': vector(props.centerOfMass)}, + 'instanceVolume': sum(b['volume'] for b in all_bodies), + 'instanceCount': len(all_bodies)} + +require(platform.node().lower() == REQUEST['host'].lower(), 'Host identity differs from expected host') +require(re.fullmatch(r'[A-Za-z0-9_-]{12,100}', REQUEST['runId']) is not None, 'Invalid run ID') +modules = [m for n, m in list(sys.modules.items()) + if n.endswith('.mechanical.core') and getattr(m, 'SESSION_ID', None) == REQUEST['sessionId']] +require(len(modules) == 1, 'Exact serving mechanical session is unavailable; no ownership inference') +core = modules[0] +registries = getattr(builtins, '_adom_mechanical_ralph_runs', None) +if registries is None: + registries = {} + builtins._adom_mechanical_ralph_runs = registries +action = REQUEST['action'] +run = registries.get(REQUEST['runId']) + +def documents(): + return [{'creationId': d.creationId, 'name': d.name, 'modified': d.isModified, 'saved': d.isSaved} + for d in app.documents] + +def idle(): + require(ui.activeCommand in ('', 'SelectCommand', 'Select'), 'Interactive command active; refusing document lifecycle action') + +def fingerprint(document): + return {'creationId': document.creationId, 'name': document.name, + 'modified': document.isModified, 'saved': document.isSaved} + +def owned(document_id, allow_closed=False): + require(document_id in run['documents'], 'Document has no exact native ownership entry') + row = run['documents'][document_id] + if row.get('closed'): + require(allow_closed, 'Owned document is already closed') + return row + document = row['object'] + require(any(d == document for d in app.documents), 'Exact owned document is no longer open') + require(not any(d == document for d in run['baselineObjects']), 'Refusing a baseline document') + require(document.name == row['name'] and not document.isSaved, 'Owned document was renamed or saved externally') + design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType')) + marker = design.rootComponent.attributes.itemByName('AdomRalph', 'owner') + require(marker and marker.value == REQUEST['runId'], 'Run ownership marker changed') + marker = design.rootComponent.attributes.itemByName('AdomRalph', 'documentId') + require(marker and marker.value == document_id, 'Runtime document marker changed') + return row + +def path_in_scratch(path): + root = os.path.realpath(run['scratch']) + path = os.path.abspath(path) + require(os.path.commonpath([root, os.path.realpath(path)]) == root and os.path.realpath(path) != root, + 'Artifact is not inside the owned scratch directory') + require(not os.path.islink(path), 'Artifact is a symlink') + return path + +def file_info(path): + path = path_in_scratch(path) + require(os.path.isfile(path), 'Checkpoint file is absent') + require(os.path.getsize(path) <= 32 * 1024 * 1024, 'Fixture artifact exceeds 32 MiB budget') + with open(path, 'rb') as stream: data = stream.read() + return {'path': path.replace('\\', '/'), 'sha256': hashlib.sha256(data).hexdigest(), 'bytes': len(data)} + +def register(document, document_id, role): + require(not any(d == document for d in run['baselineObjects']), 'Creation returned a baseline document') + require(document_id not in run['documents'], 'Runtime ID is already registered') + # Retain exact object first, including if marker creation later fails. + row = {'object': document, 'documentId': document_id, 'role': role, + 'creationId': document.creationId, 'name': document.name, 'closed': False, 'checkpoint': None} + run['documents'][document_id] = row + require(not document.isSaved and document.name.startswith('Untitled'), 'Only new unnamed designs are owned') + design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType')) + design.rootComponent.attributes.add('AdomRalph', 'owner', REQUEST['runId']) + design.rootComponent.attributes.add('AdomRalph', 'documentId', document_id) + return row + +def public_row(row): + return {k: v for k, v in row.items() if k not in ('object', 'witness')} + +if action == 'begin': + idle() + require(run is None, 'Native run registry already exists; use recover') + require(app.documents.count > 0, 'An existing active design is required for a read-only baseline') + baseline = documents() + require(baseline == REQUEST['baseline'], 'Documents changed after baseline; refusing to start') + scratch = os.path.join(tempfile.gettempdir(), 'adom-fusion-ralph', REQUEST['runId']) + require(not os.path.exists(scratch), 'Run scratch already exists') + parent = os.path.dirname(scratch) + require(os.path.realpath(parent) == os.path.abspath(parent), 'Scratch parent resolves through a link') + os.makedirs(scratch) + run = {'sessionId': REQUEST['sessionId'], 'documents': {}, 'scratch': scratch, + 'baselineObjects': list(app.documents), 'baseline': baseline, + 'activeObject': app.activeDocument, 'activeFingerprint': fingerprint(app.activeDocument)} + registries[REQUEST['runId']] = run + result = {'success': True, 'scratch': scratch.replace('\\', '/'), 'documents': baseline} +else: + require(run is not None and run['sessionId'] == REQUEST['sessionId'], 'Native registry/session missing; no close attempted') + if action == 'inventory': + result = {'success': True, 'documents': [public_row(r) for r in run['documents'].values()], + 'provisionalImportCount': len(run.get('provisionalImports', [])), + 'scratch': run['scratch'].replace('\\', '/')} + elif action == 'register': + idle() + document, design, document_id = core.active(app) + require(document_id == REQUEST['documentId'], 'Active runtime document differs from typed creation result') + row = register(document, document_id, REQUEST['role']) + result = {'success': True, **public_row(row)} + elif action in ('witness', 'verify', 'activate', 'close', 'checkpoint', 'capture'): + row = owned(REQUEST['documentId'], action in ('close', 'verify')) + document = row['object'] + if action == 'verify': + if not row.get('closed'): + checkpoint = row['checkpoint'] + require(checkpoint is not None, 'No verified native checkpoint') + require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed') + require(same(witness(document), row['witness']), 'Model changed since checkpoint') + result = {'success': True, 'documentId': row['documentId'], 'ownerRunId': REQUEST['runId'], 'closed': row['closed']} + elif action == 'witness': + require(app.activeDocument == document, 'Active document changed; no implicit activation') + result = {'success': True, 'documentId': row['documentId'], 'witness': witness(document)} + elif action == 'activate': + idle() + require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']), + 'User selected an external document; refusing activation') + if app.activeDocument != document: + require(document.activate(), 'Owned document activation failed') + result = {'success': True, 'documentId': row['documentId']} + elif action == 'close': + idle() + if not row['closed']: + require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']), + 'User selected an external document; refusing lifecycle changes') + checkpoint = row['checkpoint'] + require(checkpoint is not None, 'No verified native checkpoint') + require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed') + require(same(witness(document), row['witness']), 'Model changed since checkpoint') + require(document.close(False), 'Owned document close returned false') + require(not any(d == document for d in app.documents), 'Owned document still appears in open documents') + row['closed'] = True + result = {'success': True, 'closedDocumentId': row['documentId'], 'closed': True} + elif action == 'capture': + require(app.activeDocument == document, 'Active document changed before capture') + path = path_in_scratch(REQUEST['path']) + require(not os.path.exists(path), 'Capture destination already exists') + viewport = app.activeViewport + viewport.fit() + viewport.refresh() + require(viewport.saveAsImageFile(path, 1280, 900), 'Viewport capture failed') + result = {'success': True, **file_info(path)} + else: + idle() + require(app.activeDocument == document, 'Active document changed before roundtrip') + path = path_in_scratch(REQUEST['path']) + archive = file_info(path) + before = witness(document) + options = app.importManager.createFusionArchiveImportOptions(path) + imported = app.importManager.importToNewDocument(options) + # Keep the actual returned API object before any fragile getter or + # identity lookup. A provisional object can only be retained/reported. + provisional = {'object': imported} + run.setdefault('provisionalImports', []).append(provisional) + require(imported is not None and app.activeDocument == imported, 'Archive import returned no active document') + reopened_doc, reopened_design, reopened_id = core.active(app) + require(reopened_doc == imported, 'Imported document identity mismatch') + reopened = register(imported, reopened_id, row['role'] + '-reopened') + run['provisionalImports'].remove(provisional) + after = witness(imported) + require(same(before, after), 'Native archive roundtrip changed measured model state') + # Mark both sides only after independent semantic comparison. + for item in (row, reopened): + item['checkpoint'] = archive + item['witness'] = before + result = {'success': True, 'archive': archive, 'before': before, 'after': after, + 'reopened': public_row(reopened), 'source': public_row(row)} + elif action == 'file': + info = file_info(REQUEST['path']) + with open(info['path'], 'rb') as stream: data = stream.read() + result = {'success': True, **info, 'base64': base64.b64encode(data).decode('ascii')} + if REQUEST.get('csv'): + with open(info['path'], encoding='utf-8', newline='') as stream: + result['rows'] = list(csv.DictReader(stream)) + elif action == 'restore': + idle() + require(not run.get('provisionalImports'), 'Unresolved imported object remains; restoration refused') + require(all(row['closed'] for row in run['documents'].values()), 'Owned documents remain open') + require(len(list(app.documents)) == len(run['baselineObjects']) and + all(any(d == original for d in app.documents) for original in run['baselineObjects']), + 'Document set changed; refusing to change active document') + require(documents() == run['baseline'], 'Original document flags changed') + original = run['activeObject'] + if app.activeDocument != original: + require(original.activate(), 'Original document activation failed') + require(fingerprint(original) == run['activeFingerprint'], 'Original active document changed') + result = {'success': True, 'documents': documents(), 'activeCreationId': original.creationId} + else: + raise RuntimeError('Unknown native action') + +EXPECTED = json.loads('{"runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", "host": "ADOM_DREW2", "pid": 41728, "scratch": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", "nonce": "7575c5bb7b3b474ab621f55d649416a4", "original": {"creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", "modified": false, "name": "Untitled", "saved": false}}') + +import time, threading +require(threading.current_thread() is threading.main_thread(), 'Main thread changed') +require(os.getpid() == EXPECTED['pid'], 'Native Fusion PID changed') +require(not run.get('provisionalImports') and not run.get('retainRequired'), 'Native recovery remains unresolved') +require(len(run['documents']) <= 1024 and all(row.get('closed') is True and not row.get('retainRequired') for row in run['documents'].values()), 'Owned native document remains open or retained') +require(len(run['baselineObjects']) == 1 and app.documents.count == 1, 'Native original inventory differs') +original = run['activeObject'] +require(app.activeDocument == original and app.documents.item(0) == original and run['baselineObjects'][0] == original, 'Exact original object differs') +require(run['activeFingerprint'] == EXPECTED['original'] and fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed') +require(not original.isModified and not original.isSaved, 'Original is not pristine') +require(documents() == run['baseline'] == [EXPECTED['original']], 'Original baseline changed') +idle() +design = adsk.fusion.Design.cast(original.products.itemByProductType('DesignProductType')) +require(design is not None and design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry is not pristine') +require(os.path.normcase(os.path.abspath(run['scratch'])) == os.path.normcase(os.path.abspath(EXPECTED['scratch'])), 'Scratch differs from native registry') +require(os.path.isdir(run['scratch']) and os.path.realpath(run['scratch']) == os.path.abspath(run['scratch']), 'Scratch root is linked or absent') +def state(): + require(app.activeDocument == original and app.documents.count == 1 and app.documents.item(0) == original, 'Original object changed during hold') + require(fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed during hold') + require(design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry changed during hold') + idle() + return fingerprint(original) +result = {'success': True, 'sessionId': EXPECTED['sessionId'], 'runId': EXPECTED['runId'], 'pid': os.getpid(), 'original': state()} + +PATHS = json.loads('{"entered": "C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\Temp\\\\adom-fusion-ralph\\\\20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\\busy-7575c5bb7b3b474ab621f55d649416a4\\\\entered.json", "exited": "C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\Temp\\\\adom-fusion-ralph\\\\20261005T210310Z-568fe7869d0b41d5a83014811fe170ac\\\\busy-7575c5bb7b3b474ab621f55d649416a4\\\\exited.json"}') + +folder = os.path.dirname(PATHS['entered']) +require(os.path.dirname(folder) == os.path.abspath(run['scratch']), 'Marker directory escaped exact scratch') +require(platform.system() == 'Windows', 'Shared QPC proof requires Windows') +import ctypes +kernel = ctypes.WinDLL('kernel32', use_last_error=True) +for function in (kernel.QueryPerformanceCounter, kernel.QueryPerformanceFrequency): + function.argtypes = [ctypes.POINTER(ctypes.c_longlong)] + function.restype = ctypes.c_int +def counter(): + ticks, frequency = ctypes.c_longlong(), ctypes.c_longlong() + require(kernel.QueryPerformanceFrequency(ctypes.byref(frequency)) and frequency.value > 0, 'QPC frequency unavailable') + require(kernel.QueryPerformanceCounter(ctypes.byref(ticks)) and ticks.value > 0, 'QPC timestamp unavailable') + return {'counterKind': 'windows_qpc', 'counterTicks': ticks.value, 'counterFrequency': frequency.value} +os.mkdir(folder) # Exclusive probe directory; never reuse or remove evidence. +def marker(kind): + row = {key: EXPECTED[key] for key in ('nonce', 'sessionId', 'runId', 'pid', 'host')} + row.update(kind=kind, wall=time.time(), monotonic=time.monotonic(), thread=threading.get_ident(), original=state()) + row.update(counter()) + raw = json.dumps(row, sort_keys=True, allow_nan=False).encode('utf-8') + require(len(raw) <= 4096, 'Marker exceeds byte budget') + pending = PATHS[kind] + '.pending' + with open(pending, 'xb') as stream: + stream.write(raw); stream.flush(); os.fsync(stream.fileno()) + os.link(pending, PATHS[kind]) # Exclusive publication of complete bytes. + os.unlink(pending) + return {'value': row, 'sha256': hashlib.sha256(raw).hexdigest(), 'bytes': len(raw), 'rawBase64': base64.b64encode(raw).decode('ascii')} +entered = marker('entered') +time.sleep(8) +exited = marker('exited') +result.update(entered=entered, exited=exited, holdSeconds=8) diff --git a/docs/mechanical-verification/cp8/busy/native-preflight.py b/docs/mechanical-verification/cp8/busy/native-preflight.py new file mode 100644 index 0000000..355b7ed --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/native-preflight.py @@ -0,0 +1,283 @@ +import threading, builtins +if threading.current_thread() is not threading.main_thread(): + raise RuntimeError('Busy probe requires the native main thread') +_registry = getattr(builtins, '_adom_mechanical_ralph_runs', None) +if not isinstance(_registry, dict) or '20261005T210310Z-568fe7869d0b41d5a83014811fe170ac' not in _registry: + raise RuntimeError('Existing exact run registry is required') +import json +REQUEST = json.loads('{"action": "inventory", "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", "host": "ADOM_DREW2", "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d"}') + +import base64, builtins, csv, hashlib, json, math, os, platform, re, sys, tempfile + +def require(condition, message): + if not condition: + raise RuntimeError(message) + +def same(a, b): + if isinstance(a, bool) or isinstance(b, bool): + return type(a) is type(b) and a == b + if isinstance(a, (int, float)) and isinstance(b, (int, float)): + return math.isfinite(a) and math.isfinite(b) and math.isclose(a, b, rel_tol=1e-7, abs_tol=1e-7) + if isinstance(a, dict) and isinstance(b, dict): + return a.keys() == b.keys() and all(same(a[k], b[k]) for k in a) + if isinstance(a, list) and isinstance(b, list): + return len(a) == len(b) and all(same(x, y) for x, y in zip(a, b)) + return a == b + +def vector(p): + return [p.x * 10, p.y * 10, p.z * 10] + +def body_measure(body): + properties = body.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy) + box = body.boundingBox + return {'name': body.name, 'volume': properties.volume * 1000, 'mass': properties.mass, + 'centerOfMass': vector(properties.centerOfMass), 'faces': body.faces.count, + 'bounds': [vector(box.minPoint), vector(box.maxPoint)], + 'material': body.material.name if body.material else None} + +def witness(document): + design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType')) + require(design is not None, 'Owned document is no longer a design') + root = design.rootComponent + components, occurrences = [], [] + all_bodies = [body_measure(b) for b in root.bRepBodies] + for comp in design.allComponents: + components.append({'name': '' if comp == root else comp.name, + 'partNumber': comp.partNumber, 'description': comp.description, + 'material': comp.material.name if comp.material else None, + 'attributes': {a.name: a.value for a in comp.attributes if a.groupName == 'AdomMechanical'}, + 'bodies': [body_measure(b) for b in comp.bRepBodies], + 'sketches': [{'name': s.name, 'fullyConstrained': s.isFullyConstrained, + 'curves': s.sketchCurves.count, 'profiles': s.profiles.count} for s in comp.sketches]}) + for occurrence in root.allOccurrences: + matrix = list(occurrence.transform2.asArray()) + for index in (3, 7, 11): matrix[index] *= 10 + bodies = [body_measure(b) for b in occurrence.bRepBodies] + all_bodies.extend(bodies) + occurrences.append({'path': occurrence.fullPathName, 'component': occurrence.component.name, + 'transform': matrix, 'bodies': bodies}) + props = root.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy) + return {'parameters': {p.name: p.expression for p in design.allParameters}, + 'timelineCount': design.timeline.count, + 'components': sorted(components, key=lambda c: c['name']), + 'occurrences': sorted(occurrences, key=lambda o: o['path']), + 'physical': {'volume': props.volume * 1000, 'mass': props.mass, + 'centerOfMass': vector(props.centerOfMass)}, + 'instanceVolume': sum(b['volume'] for b in all_bodies), + 'instanceCount': len(all_bodies)} + +require(platform.node().lower() == REQUEST['host'].lower(), 'Host identity differs from expected host') +require(re.fullmatch(r'[A-Za-z0-9_-]{12,100}', REQUEST['runId']) is not None, 'Invalid run ID') +modules = [m for n, m in list(sys.modules.items()) + if n.endswith('.mechanical.core') and getattr(m, 'SESSION_ID', None) == REQUEST['sessionId']] +require(len(modules) == 1, 'Exact serving mechanical session is unavailable; no ownership inference') +core = modules[0] +registries = getattr(builtins, '_adom_mechanical_ralph_runs', None) +if registries is None: + registries = {} + builtins._adom_mechanical_ralph_runs = registries +action = REQUEST['action'] +run = registries.get(REQUEST['runId']) + +def documents(): + return [{'creationId': d.creationId, 'name': d.name, 'modified': d.isModified, 'saved': d.isSaved} + for d in app.documents] + +def idle(): + require(ui.activeCommand in ('', 'SelectCommand', 'Select'), 'Interactive command active; refusing document lifecycle action') + +def fingerprint(document): + return {'creationId': document.creationId, 'name': document.name, + 'modified': document.isModified, 'saved': document.isSaved} + +def owned(document_id, allow_closed=False): + require(document_id in run['documents'], 'Document has no exact native ownership entry') + row = run['documents'][document_id] + if row.get('closed'): + require(allow_closed, 'Owned document is already closed') + return row + document = row['object'] + require(any(d == document for d in app.documents), 'Exact owned document is no longer open') + require(not any(d == document for d in run['baselineObjects']), 'Refusing a baseline document') + require(document.name == row['name'] and not document.isSaved, 'Owned document was renamed or saved externally') + design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType')) + marker = design.rootComponent.attributes.itemByName('AdomRalph', 'owner') + require(marker and marker.value == REQUEST['runId'], 'Run ownership marker changed') + marker = design.rootComponent.attributes.itemByName('AdomRalph', 'documentId') + require(marker and marker.value == document_id, 'Runtime document marker changed') + return row + +def path_in_scratch(path): + root = os.path.realpath(run['scratch']) + path = os.path.abspath(path) + require(os.path.commonpath([root, os.path.realpath(path)]) == root and os.path.realpath(path) != root, + 'Artifact is not inside the owned scratch directory') + require(not os.path.islink(path), 'Artifact is a symlink') + return path + +def file_info(path): + path = path_in_scratch(path) + require(os.path.isfile(path), 'Checkpoint file is absent') + require(os.path.getsize(path) <= 32 * 1024 * 1024, 'Fixture artifact exceeds 32 MiB budget') + with open(path, 'rb') as stream: data = stream.read() + return {'path': path.replace('\\', '/'), 'sha256': hashlib.sha256(data).hexdigest(), 'bytes': len(data)} + +def register(document, document_id, role): + require(not any(d == document for d in run['baselineObjects']), 'Creation returned a baseline document') + require(document_id not in run['documents'], 'Runtime ID is already registered') + # Retain exact object first, including if marker creation later fails. + row = {'object': document, 'documentId': document_id, 'role': role, + 'creationId': document.creationId, 'name': document.name, 'closed': False, 'checkpoint': None} + run['documents'][document_id] = row + require(not document.isSaved and document.name.startswith('Untitled'), 'Only new unnamed designs are owned') + design = adsk.fusion.Design.cast(document.products.itemByProductType('DesignProductType')) + design.rootComponent.attributes.add('AdomRalph', 'owner', REQUEST['runId']) + design.rootComponent.attributes.add('AdomRalph', 'documentId', document_id) + return row + +def public_row(row): + return {k: v for k, v in row.items() if k not in ('object', 'witness')} + +if action == 'begin': + idle() + require(run is None, 'Native run registry already exists; use recover') + require(app.documents.count > 0, 'An existing active design is required for a read-only baseline') + baseline = documents() + require(baseline == REQUEST['baseline'], 'Documents changed after baseline; refusing to start') + scratch = os.path.join(tempfile.gettempdir(), 'adom-fusion-ralph', REQUEST['runId']) + require(not os.path.exists(scratch), 'Run scratch already exists') + parent = os.path.dirname(scratch) + require(os.path.realpath(parent) == os.path.abspath(parent), 'Scratch parent resolves through a link') + os.makedirs(scratch) + run = {'sessionId': REQUEST['sessionId'], 'documents': {}, 'scratch': scratch, + 'baselineObjects': list(app.documents), 'baseline': baseline, + 'activeObject': app.activeDocument, 'activeFingerprint': fingerprint(app.activeDocument)} + registries[REQUEST['runId']] = run + result = {'success': True, 'scratch': scratch.replace('\\', '/'), 'documents': baseline} +else: + require(run is not None and run['sessionId'] == REQUEST['sessionId'], 'Native registry/session missing; no close attempted') + if action == 'inventory': + result = {'success': True, 'documents': [public_row(r) for r in run['documents'].values()], + 'provisionalImportCount': len(run.get('provisionalImports', [])), + 'scratch': run['scratch'].replace('\\', '/')} + elif action == 'register': + idle() + document, design, document_id = core.active(app) + require(document_id == REQUEST['documentId'], 'Active runtime document differs from typed creation result') + row = register(document, document_id, REQUEST['role']) + result = {'success': True, **public_row(row)} + elif action in ('witness', 'verify', 'activate', 'close', 'checkpoint', 'capture'): + row = owned(REQUEST['documentId'], action in ('close', 'verify')) + document = row['object'] + if action == 'verify': + if not row.get('closed'): + checkpoint = row['checkpoint'] + require(checkpoint is not None, 'No verified native checkpoint') + require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed') + require(same(witness(document), row['witness']), 'Model changed since checkpoint') + result = {'success': True, 'documentId': row['documentId'], 'ownerRunId': REQUEST['runId'], 'closed': row['closed']} + elif action == 'witness': + require(app.activeDocument == document, 'Active document changed; no implicit activation') + result = {'success': True, 'documentId': row['documentId'], 'witness': witness(document)} + elif action == 'activate': + idle() + require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']), + 'User selected an external document; refusing activation') + if app.activeDocument != document: + require(document.activate(), 'Owned document activation failed') + result = {'success': True, 'documentId': row['documentId']} + elif action == 'close': + idle() + if not row['closed']: + require(any(app.activeDocument == r['object'] for r in run['documents'].values() if not r['closed']), + 'User selected an external document; refusing lifecycle changes') + checkpoint = row['checkpoint'] + require(checkpoint is not None, 'No verified native checkpoint') + require(file_info(checkpoint['path'])['sha256'] == checkpoint['sha256'], 'Checkpoint bytes changed') + require(same(witness(document), row['witness']), 'Model changed since checkpoint') + require(document.close(False), 'Owned document close returned false') + require(not any(d == document for d in app.documents), 'Owned document still appears in open documents') + row['closed'] = True + result = {'success': True, 'closedDocumentId': row['documentId'], 'closed': True} + elif action == 'capture': + require(app.activeDocument == document, 'Active document changed before capture') + path = path_in_scratch(REQUEST['path']) + require(not os.path.exists(path), 'Capture destination already exists') + viewport = app.activeViewport + viewport.fit() + viewport.refresh() + require(viewport.saveAsImageFile(path, 1280, 900), 'Viewport capture failed') + result = {'success': True, **file_info(path)} + else: + idle() + require(app.activeDocument == document, 'Active document changed before roundtrip') + path = path_in_scratch(REQUEST['path']) + archive = file_info(path) + before = witness(document) + options = app.importManager.createFusionArchiveImportOptions(path) + imported = app.importManager.importToNewDocument(options) + # Keep the actual returned API object before any fragile getter or + # identity lookup. A provisional object can only be retained/reported. + provisional = {'object': imported} + run.setdefault('provisionalImports', []).append(provisional) + require(imported is not None and app.activeDocument == imported, 'Archive import returned no active document') + reopened_doc, reopened_design, reopened_id = core.active(app) + require(reopened_doc == imported, 'Imported document identity mismatch') + reopened = register(imported, reopened_id, row['role'] + '-reopened') + run['provisionalImports'].remove(provisional) + after = witness(imported) + require(same(before, after), 'Native archive roundtrip changed measured model state') + # Mark both sides only after independent semantic comparison. + for item in (row, reopened): + item['checkpoint'] = archive + item['witness'] = before + result = {'success': True, 'archive': archive, 'before': before, 'after': after, + 'reopened': public_row(reopened), 'source': public_row(row)} + elif action == 'file': + info = file_info(REQUEST['path']) + with open(info['path'], 'rb') as stream: data = stream.read() + result = {'success': True, **info, 'base64': base64.b64encode(data).decode('ascii')} + if REQUEST.get('csv'): + with open(info['path'], encoding='utf-8', newline='') as stream: + result['rows'] = list(csv.DictReader(stream)) + elif action == 'restore': + idle() + require(not run.get('provisionalImports'), 'Unresolved imported object remains; restoration refused') + require(all(row['closed'] for row in run['documents'].values()), 'Owned documents remain open') + require(len(list(app.documents)) == len(run['baselineObjects']) and + all(any(d == original for d in app.documents) for original in run['baselineObjects']), + 'Document set changed; refusing to change active document') + require(documents() == run['baseline'], 'Original document flags changed') + original = run['activeObject'] + if app.activeDocument != original: + require(original.activate(), 'Original document activation failed') + require(fingerprint(original) == run['activeFingerprint'], 'Original active document changed') + result = {'success': True, 'documents': documents(), 'activeCreationId': original.creationId} + else: + raise RuntimeError('Unknown native action') + +EXPECTED = json.loads('{"runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", "host": "ADOM_DREW2", "pid": 41728, "scratch": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", "nonce": "7575c5bb7b3b474ab621f55d649416a4", "original": {"creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", "modified": false, "name": "Untitled", "saved": false}}') + +import time, threading +require(threading.current_thread() is threading.main_thread(), 'Main thread changed') +require(os.getpid() == EXPECTED['pid'], 'Native Fusion PID changed') +require(not run.get('provisionalImports') and not run.get('retainRequired'), 'Native recovery remains unresolved') +require(len(run['documents']) <= 1024 and all(row.get('closed') is True and not row.get('retainRequired') for row in run['documents'].values()), 'Owned native document remains open or retained') +require(len(run['baselineObjects']) == 1 and app.documents.count == 1, 'Native original inventory differs') +original = run['activeObject'] +require(app.activeDocument == original and app.documents.item(0) == original and run['baselineObjects'][0] == original, 'Exact original object differs') +require(run['activeFingerprint'] == EXPECTED['original'] and fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed') +require(not original.isModified and not original.isSaved, 'Original is not pristine') +require(documents() == run['baseline'] == [EXPECTED['original']], 'Original baseline changed') +idle() +design = adsk.fusion.Design.cast(original.products.itemByProductType('DesignProductType')) +require(design is not None and design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry is not pristine') +require(os.path.normcase(os.path.abspath(run['scratch'])) == os.path.normcase(os.path.abspath(EXPECTED['scratch'])), 'Scratch differs from native registry') +require(os.path.isdir(run['scratch']) and os.path.realpath(run['scratch']) == os.path.abspath(run['scratch']), 'Scratch root is linked or absent') +def state(): + require(app.activeDocument == original and app.documents.count == 1 and app.documents.item(0) == original, 'Original object changed during hold') + require(fingerprint(original) == EXPECTED['original'], 'Original fingerprint changed during hold') + require(design.rootComponent.bRepBodies.count == 0 and design.rootComponent.sketches.count == 0 and design.rootComponent.allOccurrences.count == 0 and design.timeline.count == 0, 'Original geometry changed during hold') + idle() + return fingerprint(original) +result = {'success': True, 'sessionId': EXPECTED['sessionId'], 'runId': EXPECTED['runId'], 'pid': os.getpid(), 'original': state()} diff --git a/docs/mechanical-verification/cp8/busy/qualified-offline/manifest.json b/docs/mechanical-verification/cp8/busy/qualified-offline/manifest.json new file mode 100644 index 0000000..2a2fa58 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/qualified-offline/manifest.json @@ -0,0 +1,16 @@ +{ + "files": [ + { + "path": "native-r1-qualified.json", + "sha256": "fd246882874ef2504e9163af9565f6b299c05ff47adbfdb4e526b52ebf05c9a1" + }, + { + "path": "qualify-native-r1.py", + "sha256": "e691a3c07dbcad909bfa77090e64c3a9bbca2a9ceac50296f7dfb601708735a9" + } + ], + "originalReportUnchanged": true, + "hostCalls": 0, + "images": 0, + "shotlogUploads": 0 +} diff --git a/docs/mechanical-verification/cp8/busy/qualified-offline/native-r1-qualified.json b/docs/mechanical-verification/cp8/busy/qualified-offline/native-r1-qualified.json new file mode 100644 index 0000000..40612da --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/qualified-offline/native-r1-qualified.json @@ -0,0 +1,44 @@ +{ + "status": "QUALIFIED_OFFLINE_PASS", + "scope": "Existing completed busy native observation, authoritative unchanged marker bytes with one reported float roundtrip difference", + "originalOverall": "FAIL", + "originalFailurePreserved": true, + "holdCompletedNormally": true, + "allThreeWholeStatusesExact": true, + "reportMatchesOriginalRawAttempts": true, + "normalizationOnly": [ + { + "location": "hold.entered.value.wall", + "rawValue": 1791234613.4198995, + "parsedValue": 1791234613.4198997, + "difference": 2.384185791015625e-07, + "ulp": 2.384185791015625e-07 + } + ], + "interval": { + "hostClockIntervalProven": true, + "sharedCounter": "windows_qpc", + "counterFrequency": 10000000, + "nativeElapsedSeconds": 8.004181700001936, + "qpcElapsedSeconds": 8.0042803, + "statusUpperBoundTicks": 3663071394650, + "statusUpperBound": 1791234615.6569302, + "upperToExitMarginSeconds": 5.7555424 + }, + "sourceSha256": "70d04613f9c745eddaa3260059f4f464d223ebd10905dc6a0fbc40a8cfcd7aa2", + "evidenceSha256": { + "calls/0001-run_script.json": "0e35fb50e74d14479bad059e74ee30ddc3e45ade777c151e905837bdafb77db2", + "calls/0006-run_script.json": "03754a87a54e8a13a62930b06efb60282429b0bba62ce80f1ef8979cec9091e8", + "calls/0008-run_script.json": "90f59b07f08125d2328650a7135f8c2f356d7a663cbf4b27a066daa4d4454f32", + "calls/0009-run_script.json": "05affe3928c349b05ac87947f481edb5deeb242a4a32f329ca882daebd70e5dc", + "calls/0005-fusion_mech_operation_status.json": "2b50f49492ffefeb6af526e051e428a358fb984f970cf46042a51efd3bc75b1a", + "calls/0007-fusion_mech_operation_status.json": "b30ded5ca413ac6d2cecb3410c5583557122837b5bfc699e36607cf8a6e88a11", + "calls/0010-fusion_mech_operation_status.json": "caefca09159db03013b9d8c0ca732302a8e042fd81b86124a92e97db44d8e762", + "hold-calls/0001-fusion_run_modeling_script.json": "d8fee2b8c8a52ef00d93d792330d412ddfe48412bd4b60957e4d2a80932570b0", + "report.json": "35929e964fd86886da8f08288f908deecd01934319bd015b11e5ef6b3ef55f71" + }, + "hostCalls": 0, + "limitations": [ + "No native rerun. Original failed acceptance is not rewritten. Proof remains GIL-releasing main-thread sleep, not native-kernel progress or interrupted mutation." + ] +} diff --git a/docs/mechanical-verification/cp8/busy/qualified-offline/qualify-native-r1.py b/docs/mechanical-verification/cp8/busy/qualified-offline/qualify-native-r1.py new file mode 100644 index 0000000..fc33192 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/qualified-offline/qualify-native-r1.py @@ -0,0 +1,50 @@ +from pathlib import Path +import sys,json,base64,hashlib,copy,math +V=Path('/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1') +R=Path('/home/adom/project/research/fusion-roadmap-build-2026-10-02/cp8-busy-preparation/source-r3') +sys.path.insert(0,str(R));import busy_status as b +report=json.loads((V/'report.json').read_text());ordinary=Path(report['ordinaryEvidence']);orr=json.loads((ordinary/'report.json').read_text());owner=json.loads((ordinary/'ownership.json').read_text());folder=Path(orr['harnessSources'][0]['path']).parent +sys.path.insert(0,str(folder));import fusion_harness as harness;import ralph_jobs as jobs +assert report['overall']=='FAIL' and report['failure']['message']=='Native/host marker evidence differs' +report_hash=hashlib.sha256((V/'report.json').read_bytes()).hexdigest();evidence={};notes=[] +def loadcall(path): + row=json.loads(path.read_text());assert row['returncode']==0 and row['target']==orr['target'] and row['runId']==orr['runId'] + assert b.canonical(json.loads(row['requestJson']))==b.canonical(row['args']) + assert b.canonical(json.loads(row['stdout']))==b.canonical(row['raw']) + assert type(row['startedAt']) in (float,int) and row['startedAt']<=row['finishedAt'] + assert harness.evaluate(row['raw'],{'ok':True})==[] + evidence[str(path.relative_to(V))]=hashlib.sha256(path.read_bytes()).hexdigest();return row +observed=report['observations'] +for label,num in [('initial',1),('entered',6),('clock',8),('final',9)]: + c=loadcall(V/f'calls/{num:04d}-run_script.json');assert c['raw']['exitCode']==0 and c['raw']['timedOut'] is False + assert b.canonical(json.loads(c['raw']['stdout']))==b.canonical(observed[label]) + assert base64.b64decode(c['args']['scriptB64']).decode()==(V/f'host-{label}.ps1').read_text() +for label,num in [('before',5),('during',7),('after',10)]: + c=loadcall(V/f'calls/{num:04d}-fusion_mech_operation_status.json');assert b.canonical(harness.observe(c['raw']).payload)==b.canonical(observed[label]) + assert c['args']=={'sessionId':report['expected']['sessionId'],'operationId':orr['runId']+'-depth'} +request,receipt=b.depth_receipt(ordinary,orr,owner) +for label in ('before','during','after'):assert jobs.terminal_contract(request,jobs.native_envelope(receipt),observed[label],orr['baseline']['addin']['version'],request['target']['documentId'])==[] +b.same_status(*(jobs.native_signature(observed[label]) for label in ('before','during','after'))) +hold=loadcall(V/'hold-calls/0001-fusion_run_modeling_script.json');assert hold['args']['script']==(V/'native-hold.py').read_text();assert b.canonical(hold['raw']['data']['result'])==b.canonical(observed['hold']) +assert b.canonical(hold['raw'])==b.canonical(report['holdResponse']) +copy_report=copy.deepcopy(report);obs=copy_report['observations'] +def receipt_from_bytes(row,label): + raw=base64.b64decode(row['rawBase64'],validate=True);assert len(raw)==row['bytes'] and hashlib.sha256(raw).hexdigest()==row['sha256'];parsed=json.loads(raw) + assert set(parsed)==set(row['value']) + for k,a in parsed.items(): + z=row['value'][k] + if b.canonical(a)==b.canonical(z):continue + assert k in ('wall','monotonic') and type(a) is float and type(z) is float and math.isfinite(a) and math.isfinite(z) + assert abs(a-z)<=math.ulp(a),(label,k,a,z) + notes.append({'location':label+'.value.'+k,'rawValue':a,'parsedValue':z,'difference':z-a,'ulp':math.ulp(a)}) + row['value']=parsed +for label in ('entered','final'): + for kind,receipt_row in obs[label]['markers'].items():receipt_from_bytes(receipt_row,label+'.markers.'+kind) +for kind in ('entered','exited'):receipt_from_bytes(obs['hold'][kind],'hold.'+kind) +proof=b.interval_proof(copy_report['expected'],obs['initial'],obs['entered'],obs['clock'],obs['final'],obs['hold']) +assert len(notes)==1 and notes[0]['location']=='hold.entered.value.wall' +proof['upperToExitMarginSeconds']=(obs['hold']['exited']['value']['counterTicks']-obs['clock']['counterTicks'])/proof['counterFrequency'] +assert hashlib.sha256((V/'report.json').read_bytes()).hexdigest()==report_hash +evidence['report.json']=report_hash +out={'status':'QUALIFIED_OFFLINE_PASS','scope':'Existing completed busy native observation, authoritative unchanged marker bytes with one reported float roundtrip difference','originalOverall':'FAIL','originalFailurePreserved':True,'holdCompletedNormally':True,'allThreeWholeStatusesExact':True,'reportMatchesOriginalRawAttempts':True,'normalizationOnly':notes,'interval':proof,'sourceSha256':hashlib.sha256((R/'busy_status.py').read_bytes()).hexdigest(),'evidenceSha256':evidence,'hostCalls':0,'limitations':['No native rerun. Original failed acceptance is not rewritten. Proof remains GIL-releasing main-thread sleep, not native-kernel progress or interrupted mutation.']} +Path('/tmp/fusion-roadmap-adversary/cp8-busy/native-r1-qualified.json').write_text(json.dumps(out,indent=2)+'\n');print(json.dumps(out,indent=2)) diff --git a/docs/mechanical-verification/cp8/busy/report.json b/docs/mechanical-verification/cp8/busy/report.json new file mode 100644 index 0000000..6a74ee0 --- /dev/null +++ b/docs/mechanical-verification/cp8/busy/report.json @@ -0,0 +1,626 @@ +{ + "overall": "FAIL", + "expected": { + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "host": "ADOM_DREW2", + "pid": 41728, + "scratch": "C:/Users/drew/AppData/Local/Temp/adom-fusion-ralph/20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + } + }, + "ordinaryEvidence": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-ordinary-1", + "observations": { + "initial": { + "markers": {}, + "counterKind": "windows_qpc", + "executablePath": "C:\\Users\\drew\\AppData\\Local\\Autodesk\\webdeploy\\production\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\Fusion360.exe", + "highResolution": true, + "counterFrequency": 10000000, + "processCreatedUtc": "2026-10-05T21:01:46.6536380Z", + "success": true, + "counterTicks": 3663021206800, + "host": "ADOM_DREW2", + "pid": 41728, + "wall": 1791234610.6331239 + }, + "preflight": { + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "before": { + "_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.", + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "durationMs": 36, + "error": "", + "historical": false, + "history": { + "createdAt": 1791234223.44495, + "events": [ + { + "at": 1791234223.44495, + "phase": "admitted" + }, + { + "at": 1791234223.4515686, + "phase": "dispatched" + }, + { + "at": 1791234223.4627895, + "phase": "executing" + }, + { + "at": 1791234223.534875, + "phase": "succeeded" + } + ], + "observedDocument": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38" + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "phase": "succeeded", + "requestDigest": "13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828", + "requestedTarget": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234223.534875 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "outcome": "recorded", + "output": "{\"_timeoutHint\":\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\",\"currentSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"historical\":false,\"history\":{\"createdAt\":1791234223.44495,\"events\":[{\"at\":1791234223.44495,\"phase\":\"admitted\"},{\"at\":1791234223.4515686,\"phase\":\"dispatched\"},{\"at\":1791234223.4627895,\"phase\":\"executing\"},{\"at\":1791234223.534875,\"phase\":\"succeeded\"}],\"observedDocument\":{\"creationId\":\"94431d29-0acf-4799-b677-3f564085aa9d\",\"dataFileId\":null,\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"phase\":\"succeeded\",\"requestDigest\":\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\"requestedTarget\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"sourceVersion\":\"1.12.0-dev.8\",\"storageVersion\":1,\"updatedAt\":1791234223.534875},\"nativeExecutionStarted\":null,\"observedResult\":null,\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"outcome\":\"recorded\",\"persistenceFailure\":null,\"phase\":\"succeeded\",\"reconciliationRequired\":false,\"result\":{\"data\":{\"health\":{\"complete\":true,\"computeSucceeded\":true,\"faults\":[],\"healthy\":true,\"suppressed\":[],\"timelineCount\":2,\"unknown\":[]},\"parameter\":{\"displayUnit\":\"mm\",\"expression\":\"20 mm\",\"name\":\"depth\",\"unit\":\"mm\",\"value\":20.0},\"recoveryStrategy\":\"restore_parameter_expression\",\"target\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"},\"transactional\":false},\"durability\":{\"phase\":\"succeeded\",\"recordedSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"storageVersion\":1,\"terminalRecorded\":true},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"success\":true},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"state\":\"succeeded\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "persistenceFailure": null, + "phase": "succeeded", + "reconciliationRequired": false, + "result": { + "data": { + "health": { + "complete": true, + "computeSucceeded": true, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "parameter": { + "displayUnit": "mm", + "expression": "20 mm", + "name": "depth", + "unit": "mm", + "value": 20.0 + }, + "recoveryStrategy": "restore_parameter_expression", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "transactional": false + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "schemaVersion": 1, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "succeeded", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + }, + "entered": { + "markers": { + "entered": { + "sha256": "145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4", + "bytes": 503, + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663048907271, + "host": "ADOM_DREW2", + "kind": "entered", + "monotonic": 366304.8903565, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234613.4198995 + }, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=" + } + }, + "counterKind": "windows_qpc", + "executablePath": "C:\\Users\\drew\\AppData\\Local\\Autodesk\\webdeploy\\production\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\Fusion360.exe", + "highResolution": true, + "counterFrequency": 10000000, + "processCreatedUtc": "2026-10-05T21:01:46.6536380Z", + "success": true, + "counterTicks": 3663057354709, + "host": "ADOM_DREW2", + "pid": 41728, + "wall": 1791234614.2516735 + }, + "during": { + "_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.", + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "durationMs": 32, + "error": "", + "historical": false, + "history": { + "createdAt": 1791234223.44495, + "events": [ + { + "at": 1791234223.44495, + "phase": "admitted" + }, + { + "at": 1791234223.4515686, + "phase": "dispatched" + }, + { + "at": 1791234223.4627895, + "phase": "executing" + }, + { + "at": 1791234223.534875, + "phase": "succeeded" + } + ], + "observedDocument": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38" + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "phase": "succeeded", + "requestDigest": "13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828", + "requestedTarget": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234223.534875 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "outcome": "recorded", + "output": "{\"_timeoutHint\":\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\",\"currentSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"historical\":false,\"history\":{\"createdAt\":1791234223.44495,\"events\":[{\"at\":1791234223.44495,\"phase\":\"admitted\"},{\"at\":1791234223.4515686,\"phase\":\"dispatched\"},{\"at\":1791234223.4627895,\"phase\":\"executing\"},{\"at\":1791234223.534875,\"phase\":\"succeeded\"}],\"observedDocument\":{\"creationId\":\"94431d29-0acf-4799-b677-3f564085aa9d\",\"dataFileId\":null,\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"phase\":\"succeeded\",\"requestDigest\":\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\"requestedTarget\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"sourceVersion\":\"1.12.0-dev.8\",\"storageVersion\":1,\"updatedAt\":1791234223.534875},\"nativeExecutionStarted\":null,\"observedResult\":null,\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"outcome\":\"recorded\",\"persistenceFailure\":null,\"phase\":\"succeeded\",\"reconciliationRequired\":false,\"result\":{\"data\":{\"health\":{\"complete\":true,\"computeSucceeded\":true,\"faults\":[],\"healthy\":true,\"suppressed\":[],\"timelineCount\":2,\"unknown\":[]},\"parameter\":{\"displayUnit\":\"mm\",\"expression\":\"20 mm\",\"name\":\"depth\",\"unit\":\"mm\",\"value\":20.0},\"recoveryStrategy\":\"restore_parameter_expression\",\"target\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"},\"transactional\":false},\"durability\":{\"phase\":\"succeeded\",\"recordedSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"storageVersion\":1,\"terminalRecorded\":true},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"success\":true},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"state\":\"succeeded\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "persistenceFailure": null, + "phase": "succeeded", + "reconciliationRequired": false, + "result": { + "data": { + "health": { + "complete": true, + "computeSucceeded": true, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "parameter": { + "displayUnit": "mm", + "expression": "20 mm", + "name": "depth", + "unit": "mm", + "value": 20.0 + }, + "recoveryStrategy": "restore_parameter_expression", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "transactional": false + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "schemaVersion": 1, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "succeeded", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + }, + "clock": { + "markers": {}, + "counterKind": "windows_qpc", + "executablePath": "C:\\Users\\drew\\AppData\\Local\\Autodesk\\webdeploy\\production\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\Fusion360.exe", + "highResolution": true, + "counterFrequency": 10000000, + "processCreatedUtc": "2026-10-05T21:01:46.6536380Z", + "success": true, + "counterTicks": 3663071394650, + "host": "ADOM_DREW2", + "pid": 41728, + "wall": 1791234615.6569302 + }, + "hold": { + "entered": { + "bytes": 503, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=", + "sha256": "145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4", + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663048907271, + "host": "ADOM_DREW2", + "kind": "entered", + "monotonic": 366304.8903565, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234613.4198997 + } + }, + "exited": { + "bytes": 502, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMTI4OTUwMDc0LCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZXhpdGVkIiwgIm1vbm90b25pYyI6IDM2NjMxMi44OTQ1MzgyLCAibm9uY2UiOiAiNzU3NWM1YmI3YjNiNDc0YWI2MjFmNTVkNjQ5NDE2YTQiLCAib3JpZ2luYWwiOiB7ImNyZWF0aW9uSWQiOiAiNzBiMmM1NzUtZjgzMC00NzUxLTlmODgtMmYxZjNhYjkxZmIxIiwgIm1vZGlmaWVkIjogZmFsc2UsICJuYW1lIjogIlVudGl0bGVkIiwgInNhdmVkIjogZmFsc2V9LCAicGlkIjogNDE3MjgsICJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAidGhyZWFkIjogNTQwODQsICJ3YWxsIjogMTc5MTIzNDYyMS40MjQwODA2fQ==", + "sha256": "efb7b28c00f81b810ad549d80208ed7734716ba1998763b6333ce6c099799611", + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663128950074, + "host": "ADOM_DREW2", + "kind": "exited", + "monotonic": 366312.8945382, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234621.4240806 + } + }, + "holdSeconds": 8, + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "final": { + "markers": { + "entered": { + "sha256": "145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4", + "bytes": 503, + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663048907271, + "host": "ADOM_DREW2", + "kind": "entered", + "monotonic": 366304.8903565, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234613.4198995 + }, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=" + }, + "exited": { + "sha256": "efb7b28c00f81b810ad549d80208ed7734716ba1998763b6333ce6c099799611", + "bytes": 502, + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663128950074, + "host": "ADOM_DREW2", + "kind": "exited", + "monotonic": 366312.8945382, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234621.4240806 + }, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMTI4OTUwMDc0LCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZXhpdGVkIiwgIm1vbm90b25pYyI6IDM2NjMxMi44OTQ1MzgyLCAibm9uY2UiOiAiNzU3NWM1YmI3YjNiNDc0YWI2MjFmNTVkNjQ5NDE2YTQiLCAib3JpZ2luYWwiOiB7ImNyZWF0aW9uSWQiOiAiNzBiMmM1NzUtZjgzMC00NzUxLTlmODgtMmYxZjNhYjkxZmIxIiwgIm1vZGlmaWVkIjogZmFsc2UsICJuYW1lIjogIlVudGl0bGVkIiwgInNhdmVkIjogZmFsc2V9LCAicGlkIjogNDE3MjgsICJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAidGhyZWFkIjogNTQwODQsICJ3YWxsIjogMTc5MTIzNDYyMS40MjQwODA2fQ==" + } + }, + "counterKind": "windows_qpc", + "executablePath": "C:\\Users\\drew\\AppData\\Local\\Autodesk\\webdeploy\\production\\736d2b4c5e6b95e77c11721da222cf21c6a1fc1f\\Fusion360.exe", + "highResolution": true, + "counterFrequency": 10000000, + "processCreatedUtc": "2026-10-05T21:01:46.6536380Z", + "success": true, + "counterTicks": 3663155083006, + "host": "ADOM_DREW2", + "pid": 41728, + "wall": 1791234624.0247588 + }, + "after": { + "_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.", + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "durationMs": 71, + "error": "", + "historical": false, + "history": { + "createdAt": 1791234223.44495, + "events": [ + { + "at": 1791234223.44495, + "phase": "admitted" + }, + { + "at": 1791234223.4515686, + "phase": "dispatched" + }, + { + "at": 1791234223.4627895, + "phase": "executing" + }, + { + "at": 1791234223.534875, + "phase": "succeeded" + } + ], + "observedDocument": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38" + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "phase": "succeeded", + "requestDigest": "13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828", + "requestedTarget": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234223.534875 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "outcome": "recorded", + "output": "{\"_timeoutHint\":\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\",\"currentSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"historical\":false,\"history\":{\"createdAt\":1791234223.44495,\"events\":[{\"at\":1791234223.44495,\"phase\":\"admitted\"},{\"at\":1791234223.4515686,\"phase\":\"dispatched\"},{\"at\":1791234223.4627895,\"phase\":\"executing\"},{\"at\":1791234223.534875,\"phase\":\"succeeded\"}],\"observedDocument\":{\"creationId\":\"94431d29-0acf-4799-b677-3f564085aa9d\",\"dataFileId\":null,\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\"},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"phase\":\"succeeded\",\"requestDigest\":\"13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828\",\"requestedTarget\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0\"},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"sourceVersion\":\"1.12.0-dev.8\",\"storageVersion\":1,\"updatedAt\":1791234223.534875},\"nativeExecutionStarted\":null,\"observedResult\":null,\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"outcome\":\"recorded\",\"persistenceFailure\":null,\"phase\":\"succeeded\",\"reconciliationRequired\":false,\"result\":{\"data\":{\"health\":{\"complete\":true,\"computeSucceeded\":true,\"faults\":[],\"healthy\":true,\"suppressed\":[],\"timelineCount\":2,\"unknown\":[]},\"parameter\":{\"displayUnit\":\"mm\",\"expression\":\"20 mm\",\"name\":\"depth\",\"unit\":\"mm\",\"value\":20.0},\"recoveryStrategy\":\"restore_parameter_expression\",\"target\":{\"documentId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38\",\"revision\":\"1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96\"},\"transactional\":false},\"durability\":{\"phase\":\"succeeded\",\"recordedSessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"storageVersion\":1,\"terminalRecorded\":true},\"operation\":\"parameter_set\",\"operationId\":\"20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth\",\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"success\":true},\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"state\":\"succeeded\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60}", + "persistenceFailure": null, + "phase": "succeeded", + "reconciliationRequired": false, + "result": { + "data": { + "health": { + "complete": true, + "computeSucceeded": true, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "parameter": { + "displayUnit": "mm", + "expression": "20 mm", + "name": "depth", + "unit": "mm", + "value": 20.0 + }, + "recoveryStrategy": "restore_parameter_expression", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "transactional": false + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "schemaVersion": 1, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "succeeded", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } + }, + "limitations": [ + "Releases Python GIL during sleep; no kernel/GIL-wedge, cancellation or crash proof." + ], + "holdDispatched": true, + "failure": { + "type": "ValueError", + "message": "Native/host marker evidence differs" + }, + "intervalQualification": "INCONCLUSIVE", + "holdResponse": { + "_hint": "Window opened/changed in the BACKGROUND - the user's focus was NOT touched; do NOT foreground anything to compensate. Render results via fusion_state. If the USER asks to watch, re-call with {\"foreground\": true, \"foregroundReason\": \"\"}.", + "_timeoutHint": "ab waits up to 180s 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.", + "_timing": { + "addinSec": 8.08, + "dialogsSec": 0.61, + "postSec": 0.95, + "preSec": 0.02, + "scope": "one exe pass-through of this verb only: excludes the relay hop, ab's queue, and any earlier pass-through a composite verb (routing, tour) made before this one, so the caller's wall clock can be longer", + "totalSec": 9.66 + }, + "data": { + "createdDocument": null, + "documentName": "Untitled", + "result": { + "entered": { + "bytes": 503, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMDQ4OTA3MjcxLCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZW50ZXJlZCIsICJtb25vdG9uaWMiOiAzNjYzMDQuODkwMzU2NSwgIm5vbmNlIjogIjc1NzVjNWJiN2IzYjQ3NGFiNjIxZjU1ZDY0OTQxNmE0IiwgIm9yaWdpbmFsIjogeyJjcmVhdGlvbklkIjogIjcwYjJjNTc1LWY4MzAtNDc1MS05Zjg4LTJmMWYzYWI5MWZiMSIsICJtb2RpZmllZCI6IGZhbHNlLCAibmFtZSI6ICJVbnRpdGxlZCIsICJzYXZlZCI6IGZhbHNlfSwgInBpZCI6IDQxNzI4LCAicnVuSWQiOiAiMjAyNjEwMDVUMjEwMzEwWi01NjhmZTc4NjlkMGI0MWQ1YTgzMDE0ODExZmUxNzBhYyIsICJzZXNzaW9uSWQiOiAiM2M1ZTY3NDQtZDFhYy00Mjc2LTkyNjQtYjA1YTk2YzUxZTNkIiwgInRocmVhZCI6IDU0MDg0LCAid2FsbCI6IDE3OTEyMzQ2MTMuNDE5ODk5NX0=", + "sha256": "145ee4d258de2de2b52d43c93ee7c5fe90e917fead60d487339387da3ad75be4", + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663048907271, + "host": "ADOM_DREW2", + "kind": "entered", + "monotonic": 366304.8903565, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234613.4198997 + } + }, + "exited": { + "bytes": 502, + "rawBase64": "eyJjb3VudGVyRnJlcXVlbmN5IjogMTAwMDAwMDAsICJjb3VudGVyS2luZCI6ICJ3aW5kb3dzX3FwYyIsICJjb3VudGVyVGlja3MiOiAzNjYzMTI4OTUwMDc0LCAiaG9zdCI6ICJBRE9NX0RSRVcyIiwgImtpbmQiOiAiZXhpdGVkIiwgIm1vbm90b25pYyI6IDM2NjMxMi44OTQ1MzgyLCAibm9uY2UiOiAiNzU3NWM1YmI3YjNiNDc0YWI2MjFmNTVkNjQ5NDE2YTQiLCAib3JpZ2luYWwiOiB7ImNyZWF0aW9uSWQiOiAiNzBiMmM1NzUtZjgzMC00NzUxLTlmODgtMmYxZjNhYjkxZmIxIiwgIm1vZGlmaWVkIjogZmFsc2UsICJuYW1lIjogIlVudGl0bGVkIiwgInNhdmVkIjogZmFsc2V9LCAicGlkIjogNDE3MjgsICJydW5JZCI6ICIyMDI2MTAwNVQyMTAzMTBaLTU2OGZlNzg2OWQwYjQxZDVhODMwMTQ4MTFmZTE3MGFjIiwgInNlc3Npb25JZCI6ICIzYzVlNjc0NC1kMWFjLTQyNzYtOTI2NC1iMDVhOTZjNTFlM2QiLCAidGhyZWFkIjogNTQwODQsICJ3YWxsIjogMTc5MTIzNDYyMS40MjQwODA2fQ==", + "sha256": "efb7b28c00f81b810ad549d80208ed7734716ba1998763b6333ce6c099799611", + "value": { + "counterFrequency": 10000000, + "counterKind": "windows_qpc", + "counterTicks": 3663128950074, + "host": "ADOM_DREW2", + "kind": "exited", + "monotonic": 366312.8945382, + "nonce": "7575c5bb7b3b474ab621f55d649416a4", + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "thread": 54084, + "wall": 1791234621.4240806 + } + }, + "holdSeconds": 8, + "original": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + }, + "pid": 41728, + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + } + }, + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 0, + "openDocumentCount": 1, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 9765, + "error": "", + "output": "Modeling script ran successfully.", + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 180, + "windowEtiquette": "background" + } +} diff --git a/docs/mechanical-verification/cp8/busy-maintained-qualification.json b/docs/mechanical-verification/cp8/busy-maintained-qualification.json new file mode 100644 index 0000000..77798cb --- /dev/null +++ b/docs/mechanical-verification/cp8/busy-maintained-qualification.json @@ -0,0 +1,77 @@ +{ + "qualification": "PASS", + "nativeRerun": false, + "originalOverall": "FAIL", + "originalFailure": { + "type": "ValueError", + "message": "Native/host marker evidence differs" + }, + "originalEvidence": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1", + "inputHashes": { + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/report.json": "35929e964fd86886da8f08288f908deecd01934319bd015b11e5ef6b3ef55f71", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0001-run_script.json": "0e35fb50e74d14479bad059e74ee30ddc3e45ade777c151e905837bdafb77db2", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0002-fusion_state.json": "922e681f6b61b3ed3c097763d670e302578f95ecf60aedc0fbf983f68c7d54df", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0003-fusion_document_info.json": "068b5586a96d80deae0428ea615e0a628360686a518038c82803d98f71a22911", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0004-fusion_run_modeling_script.json": "46cdfc5636e376428d563ef5a05e16a12515b2e71f5a8fada6445c1c936de748", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0005-fusion_mech_operation_status.json": "2b50f49492ffefeb6af526e051e428a358fb984f970cf46042a51efd3bc75b1a", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0006-run_script.json": "03754a87a54e8a13a62930b06efb60282429b0bba62ce80f1ef8979cec9091e8", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0007-fusion_mech_operation_status.json": "b30ded5ca413ac6d2cecb3410c5583557122837b5bfc699e36607cf8a6e88a11", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0008-run_script.json": "90f59b07f08125d2328650a7135f8c2f356d7a663cbf4b27a066daa4d4454f32", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0009-run_script.json": "05affe3928c349b05ac87947f481edb5deeb242a4a32f329ca882daebd70e5dc", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/calls/0010-fusion_mech_operation_status.json": "caefca09159db03013b9d8c0ca732302a8e042fd81b86124a92e97db44d8e762", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/hold-calls/0001-fusion_run_modeling_script.json": "d8fee2b8c8a52ef00d93d792330d412ddfe48412bd4b60957e4d2a80932570b0", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/native-hold.py": "d89d2ed848a4a7fd177a34b668c143b20dcecfef8035c5906fb940711e6223b6", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/native-preflight.py": "9f03fd6368a4ac53d6ab08684ee579477c3d567fa0673f50bc374d8a8d0a2031", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/host-clock.ps1": "e09cde21d3cba0e82619b5cabfe8de57b5442d0af09961d7df6aa1c9ceb41175", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/host-entered.ps1": "039b213152932c3ede3a8d3966236d4e123777a0eed9bf55eb6cfeb3b0692b3b", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/host-final.ps1": "ef8f4f3590937d9d5f36b24012e4a272a065b5f84962a13d76dcc0b37cb2d263", + "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-busy-1/host-initial.ps1": "72848a3535468d5ebc13bbf297c66583848aba2042b259af60c6f988e5848c04" + }, + "checkerSha256": "3cdb4ccf2b326bdd940e209f8254fe773d084cc4ba77933a5651701d03b0f236", + "adjudicatorSha256": "d97f1e44e99b14bacecfbb52cc4bc5a1d747d9b9c1f7a306f2f29258f8608221", + "publicCallsValidated": 11, + "immutableStatusComparisons": 3, + "interval": { + "hostClockIntervalProven": true, + "sharedCounter": "windows_qpc", + "counterFrequency": 10000000, + "nativeElapsedSeconds": 8.004181700001936, + "qpcElapsedSeconds": 8.0042803, + "statusUpperBoundTicks": 3663071394650, + "statusUpperBound": 1791234615.6569302, + "transportClockRoundTrips": [ + { + "receipt": "nativeEntered", + "field": "wall", + "byteValue": 1791234613.4198995, + "transportValue": 1791234613.4198997, + "qualification": "one adjacent IEEE754 float; proof uses original bytes" + } + ] + }, + "ordinaryHarnessSources": [ + { + "name": "ralph_jobs.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-ordinary-1/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_jobs.py", + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f" + }, + { + "name": "ralph_mechanical.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-ordinary-1/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_mechanical.py", + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e" + }, + { + "name": "ralph_support.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-ordinary-1/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_support.py", + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27" + }, + { + "name": "fusion_harness.py", + "path": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-ordinary-1/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/fusion_harness.py", + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2" + } + ], + "limitations": [ + "Releases Python GIL during sleep; no kernel/GIL-wedge, cancellation or crash proof." + ] +} diff --git a/docs/mechanical-verification/cp8/evidence-manifest.json b/docs/mechanical-verification/cp8/evidence-manifest.json new file mode 100644 index 0000000..598d0bd --- /dev/null +++ b/docs/mechanical-verification/cp8/evidence-manifest.json @@ -0,0 +1,726 @@ +{ + "files": [ + { + "path": "accepted-scope.json", + "bytes": 730, + "sha256": "b3b14ac1da72b51ae69d8e9efe9a5285c02c2bbc3544627fe6c50e4bbe3dcc37" + }, + { + "path": "busy/calls/0001-run_script.json", + "bytes": 14199, + "sha256": "0e35fb50e74d14479bad059e74ee30ddc3e45ade777c151e905837bdafb77db2" + }, + { + "path": "busy/calls/0002-fusion_state.json", + "bytes": 19223, + "sha256": "922e681f6b61b3ed3c097763d670e302578f95ecf60aedc0fbf983f68c7d54df" + }, + { + "path": "busy/calls/0003-fusion_document_info.json", + "bytes": 3856, + "sha256": "068b5586a96d80deae0428ea615e0a628360686a518038c82803d98f71a22911" + }, + { + "path": "busy/calls/0004-fusion_run_modeling_script.json", + "bytes": 42052, + "sha256": "46cdfc5636e376428d563ef5a05e16a12515b2e71f5a8fada6445c1c936de748" + }, + { + "path": "busy/calls/0005-fusion_mech_operation_status.json", + "bytes": 13186, + "sha256": "2b50f49492ffefeb6af526e051e428a358fb984f970cf46042a51efd3bc75b1a" + }, + { + "path": "busy/calls/0006-run_script.json", + "bytes": 16987, + "sha256": "03754a87a54e8a13a62930b06efb60282429b0bba62ce80f1ef8979cec9091e8" + }, + { + "path": "busy/calls/0007-fusion_mech_operation_status.json", + "bytes": 13186, + "sha256": "b30ded5ca413ac6d2cecb3410c5583557122837b5bfc699e36607cf8a6e88a11" + }, + { + "path": "busy/calls/0008-run_script.json", + "bytes": 14190, + "sha256": "90f59b07f08125d2328650a7135f8c2f356d7a663cbf4b27a066daa4d4454f32" + }, + { + "path": "busy/calls/0009-run_script.json", + "bytes": 19764, + "sha256": "05affe3928c349b05ac87947f481edb5deeb242a4a32f329ca882daebd70e5dc" + }, + { + "path": "busy/calls/0010-fusion_mech_operation_status.json", + "bytes": 13187, + "sha256": "caefca09159db03013b9d8c0ca732302a8e042fd81b86124a92e97db44d8e762" + }, + { + "path": "busy/hold-calls/0001-fusion_run_modeling_script.json", + "bytes": 54340, + "sha256": "d8fee2b8c8a52ef00d93d792330d412ddfe48412bd4b60957e4d2a80932570b0" + }, + { + "path": "busy/host-clock.ps1", + "bytes": 4522, + "sha256": "e09cde21d3cba0e82619b5cabfe8de57b5442d0af09961d7df6aa1c9ceb41175" + }, + { + "path": "busy/host-entered.ps1", + "bytes": 4526, + "sha256": "039b213152932c3ede3a8d3966236d4e123777a0eed9bf55eb6cfeb3b0692b3b" + }, + { + "path": "busy/host-final.ps1", + "bytes": 4522, + "sha256": "ef8f4f3590937d9d5f36b24012e4a272a065b5f84962a13d76dcc0b37cb2d263" + }, + { + "path": "busy/host-initial.ps1", + "bytes": 4526, + "sha256": "72848a3535468d5ebc13bbf297c66583848aba2042b259af60c6f988e5848c04" + }, + { + "path": "busy/native-hold.py", + "bytes": 20806, + "sha256": "d89d2ed848a4a7fd177a34b668c143b20dcecfef8035c5906fb940711e6223b6" + }, + { + "path": "busy/native-preflight.py", + "bytes": 18507, + "sha256": "9f03fd6368a4ac53d6ab08684ee579477c3d567fa0673f50bc374d8a8d0a2031" + }, + { + "path": "busy/qualified-offline/manifest.json", + "bytes": 383, + "sha256": "d203f1f147dc7fa9b2537252ea940847e6d1698b00b8d4a3e457e013d51f030f" + }, + { + "path": "busy/qualified-offline/native-r1-qualified.json", + "bytes": 2245, + "sha256": "fd246882874ef2504e9163af9565f6b299c05ff47adbfdb4e526b52ebf05c9a1" + }, + { + "path": "busy/qualified-offline/qualify-native-r1.py", + "bytes": 4896, + "sha256": "e691a3c07dbcad909bfa77090e64c3a9bbca2a9ceac50296f7dfb601708735a9" + }, + { + "path": "busy/report.json", + "bytes": 35566, + "sha256": "35929e964fd86886da8f08288f908deecd01934319bd015b11e5ef6b3ef55f71" + }, + { + "path": "busy-maintained-qualification.json", + "bytes": 5912, + "sha256": "d645a9024ff9ecb26f7cbe034a4605941edf75cc50d09b97fa6a4e60fac9e9ac" + }, + { + "path": "history-snapshot.json", + "bytes": 30571, + "sha256": "70001c98dde53eb617e91dfc0c297970f49245b6762c0c37f392764b7f7254a4" + }, + { + "path": "installed-file-verification.json", + "bytes": 72807, + "sha256": "224ac9eb143e0128f9c8d7773944d7bd5049803ef48ac1dc4f86383e965ae3e1" + }, + { + "path": "installed-package.json", + "bytes": 195, + "sha256": "51d19311ee8b055a82cf905921769b53c1d9917d771974a7e1bdf69c6cea54d9" + }, + { + "path": "native-build-reuse.json", + "bytes": 16934, + "sha256": "967f8d5a8378b30ea61af6a993a2caeeacfbdb2c6308de68b113851f9ae46c35" + }, + { + "path": "offline-accepted-summary.json", + "bytes": 1827, + "sha256": "d3ffbbb057c06dc6eaa4ac28f91931cd9c946d45606151c3418df00a666613bd" + }, + { + "path": "ordinary/baseline.json", + "bytes": 12378, + "sha256": "974331825de34d4a180874b2b252c7663b3ef322fbd7349feb72dbdabf2bdacf" + }, + { + "path": "ordinary/calls/0001-fusion_state.json", + "bytes": 19185, + "sha256": "44425639191232b8b2a63e1af898faa8d82bf33973713f0b47eb39a2ebbe088b" + }, + { + "path": "ordinary/calls/0002-fusion_addin_status.json", + "bytes": 2086, + "sha256": "42d61c4bec8839ecf1924591b782506c864fdfea3f4e0d81f7380b0717c9ce78" + }, + { + "path": "ordinary/calls/0003-bridge_list.json", + "bytes": 106327, + "sha256": "96dfc6908ab0f72d3e992f6ba9f5c33737d63822667359be706051ca7328d918" + }, + { + "path": "ordinary/calls/0004-run_script.json", + "bytes": 10962, + "sha256": "3d7f538ca8916516950eb6f9822e82318f65f34b8b967763b06690101f9949a3" + }, + { + "path": "ordinary/calls/0005-fusion_document_info.json", + "bytes": 3848, + "sha256": "b90d7a2bf439a10f36dc64197cb42f3a8ac022fe094a629d2d18122cdb085db8" + }, + { + "path": "ordinary/calls/0006-fusion_run_modeling_script.json", + "bytes": 5494, + "sha256": "cd33184b1d91bcb6e96a7347d91513b3e68b6f9268986dce0a3c1adfa56d2d62" + }, + { + "path": "ordinary/calls/0007-fusion_get_preferences.json", + "bytes": 4741, + "sha256": "90dca8cff96f32367bed6bd5060c55f2a677afcaab34c378867af1f7cfa46cb5" + }, + { + "path": "ordinary/calls/0008-fusion_mech_capabilities.json", + "bytes": 628321, + "sha256": "1e21edd0b65ff2670adee34611ca3b9ad55ec4828bb1bd4c12878b64df58ad3f" + }, + { + "path": "ordinary/calls/0009-fusion_run_modeling_script.json", + "bytes": 35563, + "sha256": "040db501b5152e6408a4b0034ea9cfe3ec837a5130b5aba84548ea4924648362" + }, + { + "path": "ordinary/calls/0010-fusion_mech_capabilities.json", + "bytes": 628322, + "sha256": "7222f66113981f8a24a5d8b39130bd5e90db257fdfb0e1c30705926322f174fa" + }, + { + "path": "ordinary/calls/0011-fusion_mechanical.json", + "bytes": 12250, + "sha256": "9a9c58c6e8a1116c3d3c9989d203a8448a2ca4c7fdf3aac0b4502a6a008fc1d8" + }, + { + "path": "ordinary/calls/0012-fusion_run_modeling_script.json", + "bytes": 36075, + "sha256": "909ca528ed8e3d90f9973a92eaf378c731da19cff77bc11bddec1398e9e247ad" + }, + { + "path": "ordinary/calls/0013-fusion_mechanical.json", + "bytes": 27080, + "sha256": "4865b4d2f38a38cb0ed135a0ce33791aa29616d8a57a2a2dcff44343b0ab921a" + }, + { + "path": "ordinary/calls/0014-fusion_run_modeling_script.json", + "bytes": 38296, + "sha256": "3f76dac627292ea2545ff8c2b3b3e15b5a2765125d40338fb6165f99ee855bc4" + }, + { + "path": "ordinary/calls/0015-fusion_mechanical.json", + "bytes": 32629, + "sha256": "993671b72adad45ab861f2c507dcfb40471b00096bbc7a785e5b62513a5e31c4" + }, + { + "path": "ordinary/calls/0016-fusion_run_modeling_script.json", + "bytes": 41585, + "sha256": "902c3b62fbd0475a0b9c156735a400c49b77c537554025dc25e3b08b7bbf53c9" + }, + { + "path": "ordinary/calls/0017-fusion_mechanical.json", + "bytes": 32629, + "sha256": "4011ca4995e94eb19e260c1b7ef43dd961d711be2202e8b94c4a815ff739cf84" + }, + { + "path": "ordinary/calls/0018-fusion_mechanical.json", + "bytes": 14774, + "sha256": "86453b264a7cc7906ba2d552c9181609e7666521bb632976ca58e2f21017c01d" + }, + { + "path": "ordinary/calls/0019-fusion_run_modeling_script.json", + "bytes": 39827, + "sha256": "c49a3c6ba526536a163c4ceca668e7aae137f24365cde76cccefdcae5c72ced9" + }, + { + "path": "ordinary/calls/0020-fusion_mech_operation_status.json", + "bytes": 33597, + "sha256": "34c13e918359d5f9b87f20617e4b16af2244c9e7c482a486c626feabca36826b" + }, + { + "path": "ordinary/calls/0021-fusion_run_modeling_script.json", + "bytes": 39826, + "sha256": "8ee6d55f92f7ad9e9a8e08195a3bf1f1c58ff4b65ee08220cad5385d9ce99abb" + }, + { + "path": "ordinary/calls/0022-fusion_mechanical.json", + "bytes": 27164, + "sha256": "f6aee158aac6249cd9f58dbf7bd822d33b5418a83b2255a5d819b393fda973fc" + }, + { + "path": "ordinary/calls/0023-fusion_run_modeling_script.json", + "bytes": 39827, + "sha256": "084ee6e0d4e723f84acde89885901e54e3d9aa44ffb51eb1f306c46fd484e920" + }, + { + "path": "ordinary/calls/0024-fusion_run_modeling_script.json", + "bytes": 41585, + "sha256": "8d088685ae42efd0e128c0ae4605e3764d2f721b25f5999b0063297f51be26d9" + }, + { + "path": "ordinary/calls/0025-fusion_mechanical.json", + "bytes": 6588, + "sha256": "965cb682a9b896e45c7f17d8c19ac85e447d4eeb54b7d1bbc29a6faa4ea85e98" + }, + { + "path": "ordinary/calls/0026-fusion_run_modeling_script.json", + "bytes": 39827, + "sha256": "bbd9ea39d2382b37793387e875836e67f55507ce0db8d4f47a7daea57ff5ce47" + }, + { + "path": "ordinary/calls/0027-fusion_run_modeling_script.json", + "bytes": 41583, + "sha256": "40905ee0ef195aadd24256dbde59d4c5bce2518ae304669278eaeb89acca81e5" + }, + { + "path": "ordinary/calls/0028-fusion_mech_operation_status.json", + "bytes": 33596, + "sha256": "db50b1d2288ff316e601bada1bc7f9330a2e180c7c3f077241d621bb6cf2cd52" + }, + { + "path": "ordinary/calls/0029-fusion_mechanical.json", + "bytes": 32628, + "sha256": "beba8ccf2cbf4f13d0e95108448d0b6d31a95a28852d95f250d03a9cc803f2fa" + }, + { + "path": "ordinary/calls/0030-fusion_mechanical.json", + "bytes": 6956, + "sha256": "204906e280699e19b5cf876aeded8b9e36a804aff5929290e449a1e3a29ef662" + }, + { + "path": "ordinary/calls/0031-fusion_mechanical.json", + "bytes": 32629, + "sha256": "d2aebabe305f5fc39210bfa69111d4a06dd28847cbfce24369ec2eb957c21d7f" + }, + { + "path": "ordinary/calls/0032-fusion_run_modeling_script.json", + "bytes": 41591, + "sha256": "ff259dd1db4a048d3f876b485aa8fd845e0440f2ebcde9389ca4d5889a16fefe" + }, + { + "path": "ordinary/calls/0033-fusion_mechanical.json", + "bytes": 32628, + "sha256": "2c97e3d02747eed1c0899feedc34d46dcf4bbc46f6b1af6f8b046ae3cdbf227b" + }, + { + "path": "ordinary/calls/0034-fusion_mechanical.json", + "bytes": 14782, + "sha256": "eb9f2afe6f393a7f3e21317098fe354f9e0f30d49341acc18d66a4836d70b1c0" + }, + { + "path": "ordinary/calls/0035-fusion_mech_operation_status.json", + "bytes": 13179, + "sha256": "31160e2705de614032a9cadc2f6dfc75727b51c9b6282834bbef23f2f2ebca3c" + }, + { + "path": "ordinary/calls/0036-fusion_mechanical.json", + "bytes": 7217, + "sha256": "697157684ee77a32a53fdda77c046bd6b3ffc3104457864e376b15c06606086e" + }, + { + "path": "ordinary/calls/0037-fusion_run_modeling_script.json", + "bytes": 41591, + "sha256": "9a840f59d408a7df90b63d0a12c13c0875ea600665fa7aa659bfffda2e7026bb" + }, + { + "path": "ordinary/calls/0038-fusion_mech_operation_status.json", + "bytes": 13179, + "sha256": "f6e6ea0c0f4da51a4674ff4f352a384fafc54155b313e43a022bb92d654b2c71" + }, + { + "path": "ordinary/calls/0039-fusion_mechanical.json", + "bytes": 32629, + "sha256": "e74e91429c7f2fd330b623c56830dd290ba250be683ed1868d85c2d443974f1b" + }, + { + "path": "ordinary/calls/0040-fusion_mechanical.json", + "bytes": 9206, + "sha256": "1243dd429d2d52cd3ab25b108b9fb819630f11d3224bbc33a1f91d2cfc0de969" + }, + { + "path": "ordinary/calls/0041-fusion_run_modeling_script.json", + "bytes": 41591, + "sha256": "a4ab00d33792849f81ab3121b6ec8d3544cfc71942efc01aacc61ef4baba5904" + }, + { + "path": "ordinary/calls/0042-fusion_mech_operation_status.json", + "bytes": 13390, + "sha256": "9ca37c9485b401c326e2094eb5a8a261048fc3fa9fb0ea03b1ad6b5ce443cd8d" + }, + { + "path": "ordinary/calls/0043-fusion_mechanical.json", + "bytes": 9292, + "sha256": "c5141e934e0861caa1e26a76fb80d86100ce312104ab4da96a72cf9ca1ecd259" + }, + { + "path": "ordinary/calls/0044-fusion_run_modeling_script.json", + "bytes": 41589, + "sha256": "a260ee03f92ce6ffbb8cfffbd33360247f066d6fdf732dee8efcd9b35c078577" + }, + { + "path": "ordinary/calls/0045-fusion_mech_operation_status.json", + "bytes": 13390, + "sha256": "ff962a0b31d18572cb21a593ff4b5e9773a17b0911473a8574d0ab25443c3137" + }, + { + "path": "ordinary/calls/0046-fusion_mechanical.json", + "bytes": 32629, + "sha256": "9561c95f4e29bb124a36ddb4f547995aec0642de538d85926051bc379da2e79a" + }, + { + "path": "ordinary/calls/0047-fusion_mechanical.json", + "bytes": 32629, + "sha256": "b91e8c6065b7600b0dfc1db99c3a3837e1e8e299a796add5ae26023781745128" + }, + { + "path": "ordinary/calls/0048-fusion_run_modeling_script.json", + "bytes": 46579, + "sha256": "fd71f3516ae0cb0b27c60b263bdd812ff5db24fcd428d945fcffb21b37d940d8" + }, + { + "path": "ordinary/calls/0049-fusion_run_modeling_script.json", + "bytes": 88813, + "sha256": "7bbee71b9ade88fd5c9332c3e144b30ddccbd2e9bc9677ec257170b7e8c0a628" + }, + { + "path": "ordinary/calls/0050-fusion_mechanical.json", + "bytes": 7217, + "sha256": "b01dc54b364cc804af5e02c205fa1ca3b08d9ec2bbf6be73fc99da91d12fce03" + }, + { + "path": "ordinary/calls/0051-fusion_run_modeling_script.json", + "bytes": 50201, + "sha256": "285ca66537d8f3239b940e2165e3e1a56db89ab0553012ea1cfa8dd1b099c148" + }, + { + "path": "ordinary/calls/0052-fusion_run_modeling_script.json", + "bytes": 235102, + "sha256": "4c92e55bf981e7728b5df5a56415deecce4e1bfdc42d7dea58ea3808d374ac37" + }, + { + "path": "ordinary/calls/0053-fusion_run_modeling_script.json", + "bytes": 38604, + "sha256": "615780c67c50ee87d49e7c3d904d24bd84df1d034a1434e6d3836b457e775b5a" + }, + { + "path": "ordinary/calls/0054-fusion_run_modeling_script.json", + "bytes": 37875, + "sha256": "6c15edf45675b5b1e48ee5b989eac90e903fd6cd423067ad6f6e88506045a27f" + }, + { + "path": "ordinary/calls/0055-fusion_run_modeling_script.json", + "bytes": 35709, + "sha256": "3b138044d4b2f93f0be1e3a90f849e14d3fde9f2816c446d5e8edf70f60ab361" + }, + { + "path": "ordinary/calls/0056-fusion_run_modeling_script.json", + "bytes": 37437, + "sha256": "eeb284939d8f010ebaee5d7c3a39d56f79a3f9cd7e7bd4d7becb382635c24194" + }, + { + "path": "ordinary/calls/0057-fusion_run_modeling_script.json", + "bytes": 35178, + "sha256": "9c88ab86c58ade6c6dcf7872110cd6ddf3b5af140113b926c18e78f3fc9545ea" + }, + { + "path": "ordinary/calls/0058-fusion_run_modeling_script.json", + "bytes": 35034, + "sha256": "1f43e5ef17d6443425c2d491f163564445f9aee6bcbd8ab0ce290546d5fdf954" + }, + { + "path": "ordinary/calls/0059-fusion_run_modeling_script.json", + "bytes": 35177, + "sha256": "969ec84546ef913532e7c04cccb3204166efc8edb29953e3ea9b3e98d7b7127e" + }, + { + "path": "ordinary/calls/0060-fusion_run_modeling_script.json", + "bytes": 35032, + "sha256": "f00de391eea2f8667d57aca179da1e5a8d568c37ac33381c2892d655ca3244a7" + }, + { + "path": "ordinary/calls/0061-fusion_run_modeling_script.json", + "bytes": 35151, + "sha256": "31a3b76c3da53a5230a0a612ee1f577dcb45a3cfac91c393b1e1a7b43a2339e3" + }, + { + "path": "ordinary/calls/0062-fusion_get_preferences.json", + "bytes": 4741, + "sha256": "5281e5a1bdfda2767265af896850bf9bacca6273e4da5b5e6e57770be7724758" + }, + { + "path": "ordinary/calls/0063-fusion_state.json", + "bytes": 19213, + "sha256": "d8bb84064d2c747ef2b27976620977833d14ef9930b88f87f5897411cc0c222f" + }, + { + "path": "ordinary/calls/0064-fusion_addin_status.json", + "bytes": 2086, + "sha256": "63b5f2240b57655e2015ef4a1c7795aa26989dace368861a93438517c8e609c5" + }, + { + "path": "ordinary/calls/0065-bridge_list.json", + "bytes": 106330, + "sha256": "ff21752a8a133846619d979df4db5e17a79f87fc94275f227fe64bb8fa89b6da" + }, + { + "path": "ordinary/calls/0066-run_script.json", + "bytes": 10963, + "sha256": "7f4a6a3cff40e22b4b2131b26e53f31047b1310438e8aa1519be7339bf151ef3" + }, + { + "path": "ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/fusion_harness.py", + "bytes": 28903, + "sha256": "0ded009f2ad0b5d8919ac215b9366df2b44d9ef98416e5f4a076e36656f88ec2" + }, + { + "path": "ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_jobs.py", + "bytes": 17361, + "sha256": "4322d735104fb82f722fe03a1a806f6cc64fb264541ef22968111df14150a56f" + }, + { + "path": "ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_mechanical.py", + "bytes": 39936, + "sha256": "ab7451dbc3dda32442128a6262aebf3b9b53884571c6174e9bc2151e5f912d2e" + }, + { + "path": "ordinary/harness-20261005T210310Z-568fe7869d0b41d5a83014811fe170ac/ralph_support.py", + "bytes": 25311, + "sha256": "a152fed6766ba0e86f89a84b52ce9090bcabcbc3bf888ae1b7f7b08836895e27" + }, + { + "path": "ordinary/live-runtime-identity.json", + "bytes": 1656, + "sha256": "df509d6f54d2b30846176c1b81a97c5090b4dd491427d326f1001f62089cc056" + }, + { + "path": "ordinary/ownership.json", + "bytes": 4207, + "sha256": "ba38aa455941a5a6ddfdef1cfa51393388ce078a0ca6dab7d5458dfdf9ab4efa" + }, + { + "path": "ordinary/report.json", + "bytes": 115507, + "sha256": "06ec3a9875fb3a88e947d1a18c1292ae84e71a9ebe80098a2797ddc5abc4b573" + }, + { + "path": "ordinary/visual-annotations.json", + "bytes": 399, + "sha256": "6e7559b3d56828fd1785fe406917561b9995ab68101bf355966006da30da98fd" + }, + { + "path": "restart/after-native.py", + "bytes": 871, + "sha256": "8c6216acb59cf7918fe1f34c4ee20fa096445810abe22c98c0522116923b277b" + }, + { + "path": "restart/before-native.py", + "bytes": 1968, + "sha256": "8ae7d8635c332b0efc8ea6e2c4069a35f1423cf2e58c8831ae3e1ce92ec3cdb5" + }, + { + "path": "restart/calls/0001-run_script.json", + "bytes": 2776, + "sha256": "03ccf36337bcd0235d527a0d49cc467f3ddfa95f66a878cbd995f8ec25ed1176" + }, + { + "path": "restart/calls/0002-bridge_list.json", + "bytes": 106327, + "sha256": "15e06b594b0913d91c0a4c1461d213c66f7a46e4f7812955b72b50f317efa714" + }, + { + "path": "restart/calls/0003-fusion_get_preferences.json", + "bytes": 4740, + "sha256": "d53ab9e5535800a7f283e0b1b78b54e2897c00d549a1f60e35bdc1fc06f4cffd" + }, + { + "path": "restart/calls/0004-fusion_mcp_call.json", + "bytes": 10433, + "sha256": "076248950fa8f1c16e4a7ebe487a70e9ffea2caa815de1f1f5ff700161c0c2b4" + }, + { + "path": "restart/calls/0005-run_script.json", + "bytes": 7060, + "sha256": "843abdf71c1e5eb398f97bad8c028ed899c236ebd08cfa0b2d6ba2b7753b1549" + }, + { + "path": "restart/calls/0006-launch_process.json", + "bytes": 2061, + "sha256": "bf11352738684c0637dd0bbe3a206d6aa8ed9ca5fec35216d7a90644b018ee15" + }, + { + "path": "restart/calls/0007-run_script.json", + "bytes": 3674, + "sha256": "c3174bc2e57dabddbef7819029161284e655e42d2c9749b94d8c40d19e4684c9" + }, + { + "path": "restart/calls/0008-run_script.json", + "bytes": 3676, + "sha256": "f5346ef3d0906879f358f998ebb2af04873313e2d6b394af3f43ea58f00e88c5" + }, + { + "path": "restart/calls/0009-run_script.json", + "bytes": 3676, + "sha256": "0c70024b79f8d615d252d07c0ae58f06378987a8ac6538262ea04763707968e1" + }, + { + "path": "restart/calls/0010-run_script.json", + "bytes": 3394, + "sha256": "97860c7dfd1bf054bfd96522fddc1191640a71806ebe629f7d9b5145c129842b" + }, + { + "path": "restart/calls/0011-run_script.json", + "bytes": 2776, + "sha256": "85649397bcf203a2f35886f0f9712fd454d5d9c6bb00fb26a8b9ea6b414e6a2e" + }, + { + "path": "restart/calls/0012-fusion_mech_capabilities.json", + "bytes": 628320, + "sha256": "b885e24cd0b17393e5dd7655b21b64ffb79da543374cdf787ae87340cad23e7c" + }, + { + "path": "restart/calls/0013-fusion_mech_operation_status.json", + "bytes": 33590, + "sha256": "a42eff9e869f5e4035c391b19d5a830f9d656fb9cb9817e2f15aa609d3149130" + }, + { + "path": "restart/calls/0014-fusion_mech_operation_status.json", + "bytes": 13171, + "sha256": "35f322799b3365b3195d02f372bde4c6b0d64f06d6752235f92017bccae5a684" + }, + { + "path": "restart/calls/0015-fusion_mech_operation_status.json", + "bytes": 13384, + "sha256": "cc1835b321952ced900838792fc725ad67a153431ccf6354950b28dd4a71254c" + }, + { + "path": "restart/calls/0016-bridge_list.json", + "bytes": 106327, + "sha256": "99f565883a298e4351664f60b0713c6b242667a6c453d27f8d45745af36ba554" + }, + { + "path": "restart/calls/0017-fusion_get_preferences.json", + "bytes": 4741, + "sha256": "cb748adfa397de17b1243a57fe5c635f4bc088a45c4c899b83a62d951fe62bd5" + }, + { + "path": "restart/calls/0018-fusion_mcp_call.json", + "bytes": 8316, + "sha256": "85bd50a6589f11b6ffaf0eeb6b6ed606a1fc187efbdc848f2b9a2af42290a736" + }, + { + "path": "restart/close-exact-process.ps1", + "bytes": 1931, + "sha256": "81604bee1f1ba2fa944e340e2dbae7b3c40150def6bc6cee48e85aaf41dd745d" + }, + { + "path": "restart/qualified-postcheck/calls/0001-fusion_mcp_call.json", + "bytes": 7786, + "sha256": "2b7e2114e6de6af476a1b25e90053fa53980fe7068892e90a92a20cff4f33763" + }, + { + "path": "restart/qualified-postcheck/calls/0002-fusion_mech_capabilities.json", + "bytes": 628292, + "sha256": "90265e4873fad2c30edda9d3c815e7b725b9b342ce02ea277e09345b34548f48" + }, + { + "path": "restart/qualified-postcheck/historical-acceptance.json", + "bytes": 1599, + "sha256": "9a0c989c4f8e74bfd889f4195dda762cc6c3ce46abb10e2035ad0ae3833c9bd2" + }, + { + "path": "restart/qualified-postcheck/native.py", + "bytes": 1025, + "sha256": "11718d0ef137e8f8d2ffa1497665d3caa5f881444db34b05252ffff045b716b8" + }, + { + "path": "restart/qualified-postcheck/result.json", + "bytes": 2999, + "sha256": "0f22946feda5f79f31e4d60ff710300a419f8a53a59818c53b3fad05fa70d3b2" + }, + { + "path": "restart/report.json", + "bytes": 6161, + "sha256": "3a4c31643bb11226b7cf4f2b5bef1e193f20a5cdc84f4d82e964da2bffcd2244" + }, + { + "path": "restart-independent-qualification.json", + "bytes": 2641, + "sha256": "dc1e3fba4a65cc32aec5fa00b2d5626274a58ff4d4a38794dfe7949f4a8954d4" + }, + { + "path": "restart-preflight-original/before-native.py", + "bytes": 18507, + "sha256": "9f03fd6368a4ac53d6ab08684ee579477c3d567fa0673f50bc374d8a8d0a2031" + }, + { + "path": "restart-preflight-original/calls/0001-run_script.json", + "bytes": 2776, + "sha256": "1113e34094ee352f581081cb4b5410eb8ffb1df62cdd29a91f5228fec9d1068a" + }, + { + "path": "restart-preflight-original/calls/0002-bridge_list.json", + "bytes": 106328, + "sha256": "048475712fe7c9e1fdbf00cbdd5c729b65185e593a73e019c50f56e477e7d315" + }, + { + "path": "restart-preflight-original/calls/0003-fusion_get_preferences.json", + "bytes": 4739, + "sha256": "becb783c6326469ab7091f0693882e8b6a32da299fe9549004300eed951b8cb6" + }, + { + "path": "restart-preflight-original/calls/0004-fusion_mcp_call.json", + "bytes": 50080, + "sha256": "bbe7e0ae67de08c24b5a9e2c01c10b654d419a43a0593ae4bf39bb2cf654fd00" + }, + { + "path": "restart-preflight-original/report.json", + "bytes": 1062, + "sha256": "bba779fdedcb32dc7ec2e627eeb7377b584d7967a27272443abe40e5fb04a167" + }, + { + "path": "runtime-source-manifest.json", + "bytes": 164348, + "sha256": "614e00b08991efae6a12eab2335360d42348d47293d8ccf4edcbc3f5ebbaeb0d" + }, + { + "path": "stale-session/calls/0001-fusion_mechanical.json", + "bytes": 12222, + "sha256": "7932d4f0346e734dd6864b5697a171f686ab88bd8f61b0daa0cb9774c101b18b" + }, + { + "path": "stale-session/calls/0002-fusion_mech_operation_status.json", + "bytes": 13146, + "sha256": "92c6e86855603620b77f900723a28d6cada6354050bcd0629c2eb832a16073c4" + }, + { + "path": "stale-session/calls/0003-fusion_mechanical.json", + "bytes": 5423, + "sha256": "482936f88c467a99da7ad28996db59a132c4087ef7b93ce5bed6a1c0c92b0ee8" + }, + { + "path": "stale-session/calls/0004-fusion_mechanical.json", + "bytes": 12223, + "sha256": "db619ad1e93c4cb095d5eed2a6b845e0ae873aecc2e8a99261524b723805f665" + }, + { + "path": "stale-session/calls/0005-fusion_mech_operation_status.json", + "bytes": 13148, + "sha256": "a8ffcaaea0d03f1d2e2815dea6deb0f1c7d9efb99bd5edf8a0c629e8c57f275f" + }, + { + "path": "stale-session/report.json", + "bytes": 2395, + "sha256": "7289b89aae8ec86dda153dd1189ecf8168eee03ad7e6b0ad4e7ad156634fe52a" + } + ], + "newImagesIncluded": 0, + "scope": "Structured evidence only; original failures preserved. Native images remain local." +} diff --git a/docs/mechanical-verification/cp8/history-snapshot.json b/docs/mechanical-verification/cp8/history-snapshot.json new file mode 100644 index 0000000..3c39ef5 --- /dev/null +++ b/docs/mechanical-verification/cp8/history-snapshot.json @@ -0,0 +1,806 @@ +{ + "scope": "terminal history across a newly attested add-in session; no host calls", + "ordinaryDirectory": "/home/adom/project/research/fusion-mechanical-verification-2026-10-02/cp8-r6-ordinary-1", + "target": "adom_drew2", + "oldSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "evidenceSha256": { + "report.json": "06ec3a9875fb3a88e947d1a18c1292ae84e71a9ebe80098a2797ddc5abc4b573", + "calls/0020-fusion_mech_operation_status.json": "34c13e918359d5f9b87f20617e4b16af2244c9e7c482a486c626feabca36826b", + "calls/0028-fusion_mech_operation_status.json": "db50b1d2288ff316e601bada1bc7f9330a2e180c7c3f077241d621bb6cf2cd52", + "calls/0013-fusion_mechanical.json": "4865b4d2f38a38cb0ed135a0ce33791aa29616d8a57a2a2dcff44343b0ab921a", + "calls/0035-fusion_mech_operation_status.json": "31160e2705de614032a9cadc2f6dfc75727b51c9b6282834bbef23f2f2ebca3c", + "calls/0038-fusion_mech_operation_status.json": "f6e6ea0c0f4da51a4674ff4f352a384fafc54155b313e43a022bb92d654b2c71", + "calls/0030-fusion_mechanical.json": "204906e280699e19b5cf876aeded8b9e36a804aff5929290e449a1e3a29ef662", + "calls/0042-fusion_mech_operation_status.json": "9ca37c9485b401c326e2094eb5a8a261048fc3fa9fb0ea03b1ad6b5ce443cd8d", + "calls/0045-fusion_mech_operation_status.json": "ff962a0b31d18572cb21a593ff4b5e9773a17b0911473a8574d0ab25443c3137", + "calls/0040-fusion_mechanical.json": "1243dd429d2d52cd3ab25b108b9fb819630f11d3224bbc33a1f91d2cfc0de969" + }, + "operations": [ + { + "label": "create", + "request": { + "op": "new_design", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-create", + "name": "Untitled", + "box": { + "width": 20, + "height": 30, + "depth": 10 + } + }, + "response": { + "data": { + "bodies": [ + { + "area": 2200.0, + "bounds": { + "max": [ + 20.0, + 30.0, + 10.0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ] + }, + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "componentId": "92d6cb55-570d-46bd-9e50-af58cdf66248", + "edges": 12, + "faces": 6, + "isSolid": true, + "mass": 0.0162, + "name": "Block", + "ref": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "objectType": "adsk::fusion::BRepBody", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQooIi4zCc/eJkxZwabq2nF8FVGGkYGymYGaaamBsmGqhm2RpaqJrkpRsrmuRmGqqa25gZGlokpqWmGqYAlYLNIMBDYDtM1AAWwey3tjAAAAPH/CDiAAAAA==" + }, + "space": "component", + "units": { + "angle": "deg", + "area": "mm2", + "length": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6000.0 + } + ], + "complete": true, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodyCount": 1, + "description": "", + "id": "92d6cb55-570d-46bd-9e50-af58cdf66248", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "2026-10-05-14-03-22-047", + "ref": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0", + "rootComponentId": "92d6cb55-570d-46bd-9e50-af58cdf66248", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "sketchCount": 1 + } + ], + "configuration": { + "complete": true, + "configurationRowId": "", + "configurationWritesEnabled": false, + "configured": false, + "configuredOccurrences": [], + "isConfiguration": false, + "readErrors": [], + "scope": "loaded Design ordinary and reserved test rows; no activation or recompute", + "table": null, + "unsupported": [] + }, + "constructionAxes": [], + "designIntent": "2", + "document": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "name": "Untitled", + "requestedName": "Untitled", + "saved": false + }, + "features": [ + { + "componentFeatureOrder": 0, + "index": 1, + "name": "Base extrusion", + "ref": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "objectType": "adsk::fusion::ExtrudeFeature", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQooIi4zCc/eJkxZwabq2nF8FVGGkYGymYGaaamBsmGqhm2RpaqJrkpRsrmuRmGqqa25gZGlokpqWmGqYAlYLNIMBDYDtM1AAWwey3sjMAgCMWrPaiAAAAA==" + }, + "suppressed": false, + "type": "adsk::fusion::ExtrudeFeature" + } + ], + "health": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "jointOrigins": [], + "joints": [], + "motionLinks": [], + "occurrences": [], + "parameters": [ + { + "displayUnit": "mm", + "expression": "20.0 mm", + "name": "width", + "unit": "mm", + "value": 20.0 + }, + { + "displayUnit": "mm", + "expression": "30.0 mm", + "name": "height", + "unit": "mm", + "value": 30.0 + }, + { + "displayUnit": "mm", + "expression": "10.0 mm", + "name": "depth", + "unit": "mm", + "value": 10.0 + }, + { + "displayUnit": "mm", + "expression": "width", + "name": "d5", + "unit": "mm", + "value": 20.0 + }, + { + "displayUnit": "mm", + "expression": "height", + "name": "d6", + "unit": "mm", + "value": 30.0 + }, + { + "displayUnit": "mm", + "expression": "depth", + "name": "d7", + "unit": "mm", + "value": 10.0 + }, + { + "displayUnit": "deg", + "expression": "0.0 deg", + "name": "d8", + "unit": "deg", + "value": 0.0 + } + ], + "rigidGroups": [], + "sketches": [ + { + "componentId": "92d6cb55-570d-46bd-9e50-af58cdf66248", + "fullyConstrained": false, + "name": "Base rectangle", + "profileCount": 1, + "ref": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "objectType": "adsk::fusion::Sketch", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQooIi4zCc/eJkxZwabq2nF8FVGGkYGymYGaaamBsmGqhm2RpaqJrkpRsrmuRmGqqa25gZGlokpqWmGqYAlYLNIMBDYDtM1AAWwey3sjAHACb4FYciAAAAA==" + } + } + ], + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "units": { + "angle": "deg", + "area": "mm2", + "length": "mm", + "mass": "kg", + "volume": "mm3" + } + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "new_design", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-create", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "status": { + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "historical": false, + "history": { + "createdAt": 1791234202.016997, + "events": [ + { + "at": 1791234202.016997, + "phase": "admitted" + }, + { + "at": 1791234202.0256662, + "phase": "dispatched" + }, + { + "at": 1791234202.036122, + "phase": "executing" + }, + { + "at": 1791234202.5080516, + "phase": "succeeded" + } + ], + "observedDocument": { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:9ac6d627-5b37-462a-82b3-e1313f068aa9" + }, + "operation": "new_design", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-create", + "phase": "succeeded", + "requestDigest": "e665502bce3651b2afaf5a01bb04a0b3954f32299485a0561bba963b26d3cd93", + "requestedTarget": null, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234202.5080516 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-create", + "outcome": "recorded", + "persistenceFailure": null, + "phase": "succeeded", + "reconciliationRequired": false, + "result": { + "data": { + "bodies": [ + { + "area": 2200.0, + "bounds": { + "max": [ + 20.0, + 30.0, + 10.0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ] + }, + "centerOfMass": [ + 10.0, + 15.0, + 5.0 + ], + "componentId": "92d6cb55-570d-46bd-9e50-af58cdf66248", + "edges": 12, + "faces": 6, + "isSolid": true, + "mass": 0.0162, + "name": "Block", + "ref": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "objectType": "adsk::fusion::BRepBody", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQooIi4zCc/eJkxZwabq2nF8FVGGkYGymYGaaamBsmGqhm2RpaqJrkpRsrmuRmGqqa25gZGlokpqWmGqYAlYLNIMBDYDtM1AAWwey3tjAAAAPH/CDiAAAAA==" + }, + "space": "component", + "units": { + "angle": "deg", + "area": "mm2", + "length": "mm", + "mass": "kg", + "volume": "mm3" + }, + "volume": 6000.0 + } + ], + "complete": true, + "components": [ + { + "attributes": { + "requestedName": "Untitled" + }, + "bodyCount": 1, + "description": "", + "id": "92d6cb55-570d-46bd-9e50-af58cdf66248", + "material": { + "id": "PrismMaterial-002", + "name": "Aluminum" + }, + "name": "(Unsaved)", + "partNumber": "2026-10-05-14-03-22-047", + "ref": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "objectType": "adsk::fusion::Component", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0", + "rootComponentId": "92d6cb55-570d-46bd-9e50-af58cdf66248", + "token": "/v4BAAEAAwAAAAAAAAAAAAAA" + }, + "sketchCount": 1 + } + ], + "configuration": { + "complete": true, + "configurationRowId": "", + "configurationWritesEnabled": false, + "configured": false, + "configuredOccurrences": [], + "isConfiguration": false, + "readErrors": [], + "scope": "loaded Design ordinary and reserved test rows; no activation or recompute", + "table": null, + "unsupported": [] + }, + "constructionAxes": [], + "designIntent": "2", + "document": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "name": "Untitled", + "requestedName": "Untitled", + "saved": false + }, + "features": [ + { + "componentFeatureOrder": 0, + "index": 1, + "name": "Base extrusion", + "ref": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "objectType": "adsk::fusion::ExtrudeFeature", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQooIi4zCc/eJkxZwabq2nF8FVGGkYGymYGaaamBsmGqhm2RpaqJrkpRsrmuRmGqqa25gZGlokpqWmGqYAlYLNIMBDYDtM1AAWwey3sjMAgCMWrPaiAAAAA==" + }, + "suppressed": false, + "type": "adsk::fusion::ExtrudeFeature" + } + ], + "health": { + "complete": true, + "computeSucceeded": null, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "jointOrigins": [], + "joints": [], + "motionLinks": [], + "occurrences": [], + "parameters": [ + { + "displayUnit": "mm", + "expression": "20.0 mm", + "name": "width", + "unit": "mm", + "value": 20.0 + }, + { + "displayUnit": "mm", + "expression": "30.0 mm", + "name": "height", + "unit": "mm", + "value": 30.0 + }, + { + "displayUnit": "mm", + "expression": "10.0 mm", + "name": "depth", + "unit": "mm", + "value": 10.0 + }, + { + "displayUnit": "mm", + "expression": "width", + "name": "d5", + "unit": "mm", + "value": 20.0 + }, + { + "displayUnit": "mm", + "expression": "height", + "name": "d6", + "unit": "mm", + "value": 30.0 + }, + { + "displayUnit": "mm", + "expression": "depth", + "name": "d7", + "unit": "mm", + "value": 10.0 + }, + { + "displayUnit": "deg", + "expression": "0.0 deg", + "name": "d8", + "unit": "deg", + "value": 0.0 + } + ], + "rigidGroups": [], + "sketches": [ + { + "componentId": "92d6cb55-570d-46bd-9e50-af58cdf66248", + "fullyConstrained": false, + "name": "Base rectangle", + "profileCount": 1, + "ref": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "objectType": "adsk::fusion::Sketch", + "occurrencePath": null, + "occurrenceToken": null, + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0", + "token": "/v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZQooIi4zCc/eJkxZwabq2nF8FVGGkYGymYGaaamBsmGqhm2RpaqJrkpRsrmuRmGqqa25gZGlokpqWmGqYAlYLNIMBDYDtM1AAWwey3sjAHACb4FYciAAAAA==" + } + } + ], + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "units": { + "angle": "deg", + "area": "mm2", + "length": "mm", + "mass": "kg", + "volume": "mm3" + } + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "new_design", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-create", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "succeeded", + "success": true + }, + "query": { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-create" + } + }, + { + "label": "depth", + "request": { + "op": "parameter_set", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "name": "depth", + "expression": "20 mm", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + } + }, + "response": { + "data": { + "health": { + "complete": true, + "computeSucceeded": true, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "parameter": { + "displayUnit": "mm", + "expression": "20 mm", + "name": "depth", + "unit": "mm", + "value": 20.0 + }, + "recoveryStrategy": "restore_parameter_expression", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "transactional": false + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "status": { + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "historical": false, + "history": { + "createdAt": 1791234223.44495, + "events": [ + { + "at": 1791234223.44495, + "phase": "admitted" + }, + { + "at": 1791234223.4515686, + "phase": "dispatched" + }, + { + "at": 1791234223.4627895, + "phase": "executing" + }, + { + "at": 1791234223.534875, + "phase": "succeeded" + } + ], + "observedDocument": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38" + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "phase": "succeeded", + "requestDigest": "13c5f19db24f72644eea170718cb893fe751a7e2bcfeebc5952a9438ddfa8828", + "requestedTarget": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b4495a66c9ad2830889838c2e77f116374580d149e6585bb9059e1565e6a8cf0" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234223.534875 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "outcome": "recorded", + "persistenceFailure": null, + "phase": "succeeded", + "reconciliationRequired": false, + "result": { + "data": { + "health": { + "complete": true, + "computeSucceeded": true, + "faults": [], + "healthy": true, + "suppressed": [], + "timelineCount": 2, + "unknown": [] + }, + "parameter": { + "displayUnit": "mm", + "expression": "20 mm", + "name": "depth", + "unit": "mm", + "value": 20.0 + }, + "recoveryStrategy": "restore_parameter_expression", + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "transactional": false + }, + "durability": { + "phase": "succeeded", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "operation": "parameter_set", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": true + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "succeeded", + "success": true + }, + "query": { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth" + } + }, + { + "label": "abort", + "request": { + "op": "parameter_batch", + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-abort", + "changes": [ + { + "action": "set", + "name": "depth", + "expression": "15 mm" + }, + { + "action": "set", + "name": "depth", + "expression": "MissingDurableDepth + 1 mm" + } + ], + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + } + }, + "response": { + "causeCode": "invalid_expression", + "durability": { + "phase": "failed", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "error": "Invalid expression for depth", + "errorCode": "mutation_failed", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-abort", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "complete supported configuration graph including inactive cells, parameters, feature state, sketch geometry/constraint graph and offset links, construction axes, body geometry metrics, component metadata/materials, occurrence transforms/grounding, joint attachments/origins/motion/limits, motion links and timeline marker" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": false, + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b56ad55520965ab48cb5d803aa9dc486ef4e9d65a6f81b3fa3d3e28d131f81eb" + } + }, + "status": { + "currentSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "historical": false, + "history": { + "createdAt": 1791234231.9286351, + "events": [ + { + "at": 1791234231.9286351, + "phase": "admitted" + }, + { + "at": 1791234231.9376595, + "phase": "dispatched" + }, + { + "at": 1791234231.947326, + "phase": "executing" + }, + { + "at": 1791234232.0110946, + "phase": "failed" + } + ], + "observedDocument": { + "creationId": "94431d29-0acf-4799-b677-3f564085aa9d", + "dataFileId": null, + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38" + }, + "operation": "parameter_batch", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-abort", + "phase": "failed", + "requestDigest": "51cad24383463392492b9f31205b0c8684ea99b01884527257993f54649371a1", + "requestedTarget": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "1f857c58f281bac954328309c7bae9a5f33681a1b3dd3d5d6316c28b03910a96" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "sourceVersion": "1.12.0-dev.8", + "storageVersion": 1, + "updatedAt": 1791234232.0110946 + }, + "nativeExecutionStarted": null, + "observedResult": null, + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-abort", + "outcome": "recorded", + "persistenceFailure": null, + "phase": "failed", + "reconciliationRequired": false, + "result": { + "causeCode": "invalid_expression", + "durability": { + "phase": "failed", + "recordedSessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "storageVersion": 1, + "terminalRecorded": true + }, + "error": "Invalid expression for depth", + "errorCode": "mutation_failed", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-abort", + "recovery": { + "strategy": "PTransaction.Abort", + "verified": true, + "witness": "complete supported configuration graph including inactive cells, parameters, feature state, sketch geometry/constraint graph and offset links, construction axes, body geometry metrics, component metadata/materials, occurrence transforms/grounding, joint attachments/origins/motion/limits, motion links and timeline marker" + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "success": false, + "target": { + "documentId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d:62ef982d-2751-4709-be62-b9da61c64a38", + "revision": "b56ad55520965ab48cb5d803aa9dc486ef4e9d65a6f81b3fa3d3e28d131f81eb" + } + }, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "state": "failed", + "success": true + }, + "query": { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-abort" + } + } + ], + "queries": [ + { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-create" + }, + { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-depth" + }, + { + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "operationId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac-abort" + } + ], + "notProved": [ + "process crash recovery", + "in-flight interruption", + "native replay after restart", + "current model/target usability" + ] +} diff --git a/docs/mechanical-verification/cp8/installed-file-verification.json b/docs/mechanical-verification/cp8/installed-file-verification.json new file mode 100644 index 0000000..d258b54 --- /dev/null +++ b/docs/mechanical-verification/cp8/installed-file-verification.json @@ -0,0 +1,1297 @@ +{ + "count": 215, + "rows": [ + { + "expected": "7c60c6078683d49c9e4f4b0704eb03830b50e2048f28f9de3c27bde05f06e734", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\BRIDGE_VERSION", + "actual": "7c60c6078683d49c9e4f4b0704eb03830b50e2048f28f9de3c27bde05f06e734", + "matches": true + }, + { + "expected": "f356ef43df83e7ba3846cbaf3725d826f9c263c05c1b4b042135fd822dbe0e05", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\AdomBridge.manifest", + "actual": "f356ef43df83e7ba3846cbaf3725d826f9c263c05c1b4b042135fd822dbe0e05", + "matches": true + }, + { + "expected": "f356ef43df83e7ba3846cbaf3725d826f9c263c05c1b4b042135fd822dbe0e05", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\AdomBridge.manifest", + "actual": "f356ef43df83e7ba3846cbaf3725d826f9c263c05c1b4b042135fd822dbe0e05", + "matches": true + }, + { + "expected": "f356ef43df83e7ba3846cbaf3725d826f9c263c05c1b4b042135fd822dbe0e05", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\AdomBridge.manifest", + "actual": "f356ef43df83e7ba3846cbaf3725d826f9c263c05c1b4b042135fd822dbe0e05", + "matches": true + }, + { + "expected": "f356ef43df83e7ba3846cbaf3725d826f9c263c05c1b4b042135fd822dbe0e05", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\AdomBridge.manifest", + "actual": "f356ef43df83e7ba3846cbaf3725d826f9c263c05c1b4b042135fd822dbe0e05", + "matches": true + }, + { + "expected": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\AdomBridge.py", + "actual": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "matches": true + }, + { + "expected": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\AdomBridge.py", + "actual": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "matches": true + }, + { + "expected": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\AdomBridge.py", + "actual": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "matches": true + }, + { + "expected": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\AdomBridge.py", + "actual": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee", + "matches": true + }, + { + "expected": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\__init__.py", + "actual": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "matches": true + }, + { + "expected": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\__init__.py", + "actual": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "matches": true + }, + { + "expected": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\__init__.py", + "actual": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "matches": true + }, + { + "expected": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\__init__.py", + "actual": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df", + "matches": true + }, + { + "expected": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\activity_palette.py", + "actual": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "matches": true + }, + { + "expected": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\activity_palette.py", + "actual": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "matches": true + }, + { + "expected": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\activity_palette.py", + "actual": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "matches": true + }, + { + "expected": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\activity_palette.py", + "actual": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5", + "matches": true + }, + { + "expected": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\app_state.py", + "actual": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "matches": true + }, + { + "expected": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\app_state.py", + "actual": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "matches": true + }, + { + "expected": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\app_state.py", + "actual": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "matches": true + }, + { + "expected": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\app_state.py", + "actual": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21", + "matches": true + }, + { + "expected": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\assembly_bom.py", + "actual": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "matches": true + }, + { + "expected": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\assembly_bom.py", + "actual": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "matches": true + }, + { + "expected": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\assembly_bom.py", + "actual": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "matches": true + }, + { + "expected": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\assembly_bom.py", + "actual": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5", + "matches": true + }, + { + "expected": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\close_document.py", + "actual": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "matches": true + }, + { + "expected": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\close_document.py", + "actual": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "matches": true + }, + { + "expected": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\close_document.py", + "actual": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "matches": true + }, + { + "expected": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\close_document.py", + "actual": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb", + "matches": true + }, + { + "expected": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\cloud_documents.py", + "actual": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "matches": true + }, + { + "expected": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\cloud_documents.py", + "actual": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "matches": true + }, + { + "expected": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\cloud_documents.py", + "actual": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "matches": true + }, + { + "expected": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\cloud_documents.py", + "actual": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d", + "matches": true + }, + { + "expected": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\design_info.py", + "actual": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "matches": true + }, + { + "expected": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\design_info.py", + "actual": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "matches": true + }, + { + "expected": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\design_info.py", + "actual": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "matches": true + }, + { + "expected": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\design_info.py", + "actual": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b", + "matches": true + }, + { + "expected": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\document_hygiene.py", + "actual": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "matches": true + }, + { + "expected": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\document_hygiene.py", + "actual": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "matches": true + }, + { + "expected": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\document_hygiene.py", + "actual": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "matches": true + }, + { + "expected": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\document_hygiene.py", + "actual": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29", + "matches": true + }, + { + "expected": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\document_info.py", + "actual": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "matches": true + }, + { + "expected": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\document_info.py", + "actual": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "matches": true + }, + { + "expected": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\document_info.py", + "actual": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "matches": true + }, + { + "expected": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\document_info.py", + "actual": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c", + "matches": true + }, + { + "expected": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\electron_view.py", + "actual": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "matches": true + }, + { + "expected": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\electron_view.py", + "actual": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "matches": true + }, + { + "expected": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\electron_view.py", + "actual": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "matches": true + }, + { + "expected": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\electron_view.py", + "actual": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6", + "matches": true + }, + { + "expected": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\electronics.py", + "actual": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "matches": true + }, + { + "expected": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\electronics.py", + "actual": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "matches": true + }, + { + "expected": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\electronics.py", + "actual": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "matches": true + }, + { + "expected": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\electronics.py", + "actual": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb", + "matches": true + }, + { + "expected": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\export.py", + "actual": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "matches": true + }, + { + "expected": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\export.py", + "actual": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "matches": true + }, + { + "expected": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\export.py", + "actual": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "matches": true + }, + { + "expected": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\export.py", + "actual": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2", + "matches": true + }, + { + "expected": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\import_file.py", + "actual": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "matches": true + }, + { + "expected": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\import_file.py", + "actual": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "matches": true + }, + { + "expected": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\import_file.py", + "actual": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "matches": true + }, + { + "expected": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\import_file.py", + "actual": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753", + "matches": true + }, + { + "expected": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\manufacturing.py", + "actual": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "matches": true + }, + { + "expected": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\manufacturing.py", + "actual": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "matches": true + }, + { + "expected": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\manufacturing.py", + "actual": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "matches": true + }, + { + "expected": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\manufacturing.py", + "actual": "47e9a5cb7fc5a9ba70d25130e26b69c87e904f087db0f6ed36feb8d05c1b16a9", + "matches": true + }, + { + "expected": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\__init__.py", + "actual": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "matches": true + }, + { + "expected": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\__init__.py", + "actual": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "matches": true + }, + { + "expected": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\__init__.py", + "actual": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "matches": true + }, + { + "expected": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\__init__.py", + "actual": "3e52c5e0bfc306306158ce948070f3cc36597a8cd45479a08df6768b2626119f", + "matches": true + }, + { + "expected": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\assemblies.py", + "actual": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "matches": true + }, + { + "expected": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\assemblies.py", + "actual": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "matches": true + }, + { + "expected": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\assemblies.py", + "actual": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "matches": true + }, + { + "expected": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\assemblies.py", + "actual": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876", + "matches": true + }, + { + "expected": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\assembly_state.py", + "actual": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "matches": true + }, + { + "expected": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\assembly_state.py", + "actual": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "matches": true + }, + { + "expected": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\assembly_state.py", + "actual": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "matches": true + }, + { + "expected": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\assembly_state.py", + "actual": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e", + "matches": true + }, + { + "expected": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\bill_of_materials.py", + "actual": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "matches": true + }, + { + "expected": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\bill_of_materials.py", + "actual": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "matches": true + }, + { + "expected": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\bill_of_materials.py", + "actual": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "matches": true + }, + { + "expected": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\bill_of_materials.py", + "actual": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0", + "matches": true + }, + { + "expected": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\configurations.py", + "actual": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "matches": true + }, + { + "expected": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\configurations.py", + "actual": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "matches": true + }, + { + "expected": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\configurations.py", + "actual": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "matches": true + }, + { + "expected": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\configurations.py", + "actual": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0", + "matches": true + }, + { + "expected": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\core.py", + "actual": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "matches": true + }, + { + "expected": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\core.py", + "actual": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "matches": true + }, + { + "expected": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\core.py", + "actual": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "matches": true + }, + { + "expected": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\core.py", + "actual": "9f57dd86f4f5a7bdd62c147b45bb5e16d9d24549b8b92b2394d93ea535ae721a", + "matches": true + }, + { + "expected": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\exporting.py", + "actual": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "matches": true + }, + { + "expected": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\exporting.py", + "actual": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "matches": true + }, + { + "expected": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\exporting.py", + "actual": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "matches": true + }, + { + "expected": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\exporting.py", + "actual": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868", + "matches": true + }, + { + "expected": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\features.py", + "actual": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "matches": true + }, + { + "expected": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\features.py", + "actual": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "matches": true + }, + { + "expected": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\features.py", + "actual": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "matches": true + }, + { + "expected": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\features.py", + "actual": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d", + "matches": true + }, + { + "expected": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\geometry.py", + "actual": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "matches": true + }, + { + "expected": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\geometry.py", + "actual": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "matches": true + }, + { + "expected": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\geometry.py", + "actual": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "matches": true + }, + { + "expected": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\geometry.py", + "actual": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939", + "matches": true + }, + { + "expected": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\joint_state.py", + "actual": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "matches": true + }, + { + "expected": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\joint_state.py", + "actual": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "matches": true + }, + { + "expected": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\joint_state.py", + "actual": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "matches": true + }, + { + "expected": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\joint_state.py", + "actual": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba", + "matches": true + }, + { + "expected": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\journal.py", + "actual": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "matches": true + }, + { + "expected": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\journal.py", + "actual": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "matches": true + }, + { + "expected": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\journal.py", + "actual": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "matches": true + }, + { + "expected": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\journal.py", + "actual": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15", + "matches": true + }, + { + "expected": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\motion_links.py", + "actual": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "matches": true + }, + { + "expected": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\motion_links.py", + "actual": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "matches": true + }, + { + "expected": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\motion_links.py", + "actual": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "matches": true + }, + { + "expected": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\motion_links.py", + "actual": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99", + "matches": true + }, + { + "expected": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\operation_history.py", + "actual": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "matches": true + }, + { + "expected": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\operation_history.py", + "actual": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "matches": true + }, + { + "expected": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\operation_history.py", + "actual": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "matches": true + }, + { + "expected": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\operation_history.py", + "actual": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c", + "matches": true + }, + { + "expected": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\operations.py", + "actual": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "matches": true + }, + { + "expected": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\operations.py", + "actual": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "matches": true + }, + { + "expected": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\operations.py", + "actual": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "matches": true + }, + { + "expected": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\operations.py", + "actual": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd", + "matches": true + }, + { + "expected": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\purchased.py", + "actual": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "matches": true + }, + { + "expected": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\purchased.py", + "actual": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "matches": true + }, + { + "expected": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\purchased.py", + "actual": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "matches": true + }, + { + "expected": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\purchased.py", + "actual": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1", + "matches": true + }, + { + "expected": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\readback.py", + "actual": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "matches": true + }, + { + "expected": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\readback.py", + "actual": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "matches": true + }, + { + "expected": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\readback.py", + "actual": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "matches": true + }, + { + "expected": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\readback.py", + "actual": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e", + "matches": true + }, + { + "expected": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\regular_joints.py", + "actual": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "matches": true + }, + { + "expected": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\regular_joints.py", + "actual": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "matches": true + }, + { + "expected": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\regular_joints.py", + "actual": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "matches": true + }, + { + "expected": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\regular_joints.py", + "actual": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434", + "matches": true + }, + { + "expected": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\schema.json", + "actual": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "matches": true + }, + { + "expected": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\schema.json", + "actual": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "matches": true + }, + { + "expected": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\schema.json", + "actual": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "matches": true + }, + { + "expected": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\schema.json", + "actual": "41804a160a0bb6d0ed31d74429a3ab3a97fd5146a4db05aee72cd8fefd180c88", + "matches": true + }, + { + "expected": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\sketch_edits.py", + "actual": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "matches": true + }, + { + "expected": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\sketch_edits.py", + "actual": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "matches": true + }, + { + "expected": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\sketch_edits.py", + "actual": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "matches": true + }, + { + "expected": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\sketch_edits.py", + "actual": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981", + "matches": true + }, + { + "expected": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\sketches.py", + "actual": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "matches": true + }, + { + "expected": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\sketches.py", + "actual": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "matches": true + }, + { + "expected": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\sketches.py", + "actual": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "matches": true + }, + { + "expected": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\sketches.py", + "actual": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c", + "matches": true + }, + { + "expected": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\mechanical\\transactions.py", + "actual": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "matches": true + }, + { + "expected": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\mechanical\\transactions.py", + "actual": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "matches": true + }, + { + "expected": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\mechanical\\transactions.py", + "actual": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "matches": true + }, + { + "expected": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\mechanical\\transactions.py", + "actual": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f", + "matches": true + }, + { + "expected": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\modeling.py", + "actual": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "matches": true + }, + { + "expected": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\modeling.py", + "actual": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "matches": true + }, + { + "expected": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\modeling.py", + "actual": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "matches": true + }, + { + "expected": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\modeling.py", + "actual": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356", + "matches": true + }, + { + "expected": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\open_electronics_file.py", + "actual": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "matches": true + }, + { + "expected": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\open_electronics_file.py", + "actual": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "matches": true + }, + { + "expected": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\open_electronics_file.py", + "actual": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "matches": true + }, + { + "expected": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\open_electronics_file.py", + "actual": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd", + "matches": true + }, + { + "expected": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\open_lbr.py", + "actual": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "matches": true + }, + { + "expected": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\open_lbr.py", + "actual": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "matches": true + }, + { + "expected": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\open_lbr.py", + "actual": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "matches": true + }, + { + "expected": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\open_lbr.py", + "actual": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94", + "matches": true + }, + { + "expected": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\parameters.py", + "actual": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "matches": true + }, + { + "expected": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\parameters.py", + "actual": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "matches": true + }, + { + "expected": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\parameters.py", + "actual": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "matches": true + }, + { + "expected": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\parameters.py", + "actual": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471", + "matches": true + }, + { + "expected": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\physical_properties.py", + "actual": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "matches": true + }, + { + "expected": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\physical_properties.py", + "actual": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "matches": true + }, + { + "expected": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\physical_properties.py", + "actual": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "matches": true + }, + { + "expected": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\physical_properties.py", + "actual": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29", + "matches": true + }, + { + "expected": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\screenshot.py", + "actual": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "matches": true + }, + { + "expected": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\screenshot.py", + "actual": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "matches": true + }, + { + "expected": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\screenshot.py", + "actual": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "matches": true + }, + { + "expected": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\screenshot.py", + "actual": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86", + "matches": true + }, + { + "expected": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\commands\\silkscreen_capture.py", + "actual": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "matches": true + }, + { + "expected": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\commands\\silkscreen_capture.py", + "actual": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "matches": true + }, + { + "expected": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\commands\\silkscreen_capture.py", + "actual": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "matches": true + }, + { + "expected": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\commands\\silkscreen_capture.py", + "actual": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1", + "matches": true + }, + { + "expected": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\http_server.py", + "actual": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "matches": true + }, + { + "expected": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\http_server.py", + "actual": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "matches": true + }, + { + "expected": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\http_server.py", + "actual": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "matches": true + }, + { + "expected": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\http_server.py", + "actual": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285", + "matches": true + }, + { + "expected": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\resources\\cam\\jlcpcb-2layers.cam", + "actual": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "matches": true + }, + { + "expected": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\resources\\cam\\jlcpcb-2layers.cam", + "actual": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "matches": true + }, + { + "expected": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\resources\\cam\\jlcpcb-2layers.cam", + "actual": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "matches": true + }, + { + "expected": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\resources\\cam\\jlcpcb-2layers.cam", + "actual": "7c3cb11a4c9710a15ea60bc7b8015f3fae45b1ea2b0ba4c93789eabd36137f19", + "matches": true + }, + { + "expected": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\resources\\cam\\jlcpcb-4layers.cam", + "actual": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "matches": true + }, + { + "expected": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\resources\\cam\\jlcpcb-4layers.cam", + "actual": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "matches": true + }, + { + "expected": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\resources\\cam\\jlcpcb-4layers.cam", + "actual": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "matches": true + }, + { + "expected": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\resources\\cam\\jlcpcb-4layers.cam", + "actual": "68d25e5560b1b8e01b09aea4e50ca435effdd304b32f3a4a0a8f4e2d49c3bc47", + "matches": true + }, + { + "expected": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\resources\\dru\\Adom-InstaPCB-2-Layer.edru", + "actual": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "matches": true + }, + { + "expected": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\resources\\dru\\Adom-InstaPCB-2-Layer.edru", + "actual": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "matches": true + }, + { + "expected": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\resources\\dru\\Adom-InstaPCB-2-Layer.edru", + "actual": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "matches": true + }, + { + "expected": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\resources\\dru\\Adom-InstaPCB-2-Layer.edru", + "actual": "30a933ba954d60b276cba6c7cad5a12ba3c6630d8e569e4c2ef5608861e84e2d", + "matches": true + }, + { + "expected": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\resources\\dru\\Adom-InstaPCB-4-Layer.edru", + "actual": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "matches": true + }, + { + "expected": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\resources\\dru\\Adom-InstaPCB-4-Layer.edru", + "actual": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "matches": true + }, + { + "expected": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\resources\\dru\\Adom-InstaPCB-4-Layer.edru", + "actual": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "matches": true + }, + { + "expected": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\resources\\dru\\Adom-InstaPCB-4-Layer.edru", + "actual": "fc05ae26c6035d02fa944a48026bdf8a69872bd1531b8b088f5f0bac0ef9f92b", + "matches": true + }, + { + "expected": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\resources\\dru\\AdomDefaults-jlcpcb-2layers-accurate.edru", + "actual": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "matches": true + }, + { + "expected": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\resources\\dru\\AdomDefaults-jlcpcb-2layers-accurate.edru", + "actual": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "matches": true + }, + { + "expected": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\resources\\dru\\AdomDefaults-jlcpcb-2layers-accurate.edru", + "actual": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "matches": true + }, + { + "expected": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\resources\\dru\\AdomDefaults-jlcpcb-2layers-accurate.edru", + "actual": "7bb4355593810ecfb224ab3bc4f5393b82921421fcd274a0c76f0f1e84776d8a", + "matches": true + }, + { + "expected": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\resources\\dru\\AdomDefaults-jlcpcb-4layers-accurate.edru", + "actual": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "matches": true + }, + { + "expected": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\resources\\dru\\AdomDefaults-jlcpcb-4layers-accurate.edru", + "actual": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "matches": true + }, + { + "expected": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\resources\\dru\\AdomDefaults-jlcpcb-4layers-accurate.edru", + "actual": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "matches": true + }, + { + "expected": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\resources\\dru\\AdomDefaults-jlcpcb-4layers-accurate.edru", + "actual": "98027dde4314fb2c10837028d11bd136d16e6122388aff72a338288719329748", + "matches": true + }, + { + "expected": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\addin\\AdomBridge\\resources\\ulp\\detect_layers.ulp", + "actual": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "matches": true + }, + { + "expected": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion 360\\API\\AddIns\\AdomBridge\\resources\\ulp\\detect_layers.ulp", + "actual": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "matches": true + }, + { + "expected": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\Autodesk Fusion\\API\\AddIns\\AdomBridge\\resources\\ulp\\detect_layers.ulp", + "actual": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "matches": true + }, + { + "expected": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "path": "C:\\Users\\drew\\AppData\\Roaming\\Autodesk\\FusionAddins\\AdomBridge\\resources\\ulp\\detect_layers.ulp", + "actual": "7c7a95b901ec0879fe92bd575fec88ea9403e01df3e31c4f23f9b9a7539379e6", + "matches": true + }, + { + "expected": "040375740df75a2147e7a2c30437ef5d8bd35c3a1c861d386dc79c860214229b", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\adom-fusion-bridge.exe", + "actual": "040375740df75a2147e7a2c30437ef5d8bd35c3a1c861d386dc79c860214229b", + "matches": true + }, + { + "expected": "5e8f2de378470f41e7cd0c84d041e8e7a7ec5305840158c65b1fc622cc5ce7d8", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\bridge.json", + "actual": "5e8f2de378470f41e7cd0c84d041e8e7a7ec5305840158c65b1fc622cc5ce7d8", + "matches": true + }, + { + "expected": "cec3b54f62de409b4b8c0442a85515a0fa30e2e3aa2881a01229dade58193853", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\contracts\\describe.json", + "actual": "cec3b54f62de409b4b8c0442a85515a0fa30e2e3aa2881a01229dade58193853", + "matches": true + }, + { + "expected": "66247d28ffbb4b375e12ab6e49bbf2277401fce56541739c3b980ca3e92199d8", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\describe.py", + "actual": "66247d28ffbb4b375e12ab6e49bbf2277401fce56541739c3b980ca3e92199d8", + "matches": true + }, + { + "expected": "761f95ecb6151d85d9dc6ad6c353378c936fce95a956414db122b955b7a0095f", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\package.json", + "actual": "761f95ecb6151d85d9dc6ad6c353378c936fce95a956414db122b955b7a0095f", + "matches": true + }, + { + "expected": "6779dcd4c6f5cca5560062399ae092aaacf702b2f7250fc633da588455829e6c", + "path": "C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges-cache\\fusion360\\server.py", + "actual": "6779dcd4c6f5cca5560062399ae092aaacf702b2f7250fc633da588455829e6c", + "matches": true + } + ], + "devPinned": true, + "success": true +} diff --git a/docs/mechanical-verification/cp8/installed-package.json b/docs/mechanical-verification/cp8/installed-package.json new file mode 100644 index 0000000..7e49306 --- /dev/null +++ b/docs/mechanical-verification/cp8/installed-package.json @@ -0,0 +1 @@ +{"version": "1.12.0-dev.8", "path": "/tmp/fusion-mechanical-1.12.0-dev.8-r6.zip", "fileCount": 59, "bytes": 4195975, "sha256": "74cd3a10f12374c764621001ebb06144047760c4cb477ccc16337a30892bdf56"} diff --git a/docs/mechanical-verification/cp8/native-build-reuse.json b/docs/mechanical-verification/cp8/native-build-reuse.json new file mode 100644 index 0000000..a08b2fb --- /dev/null +++ b/docs/mechanical-verification/cp8/native-build-reuse.json @@ -0,0 +1,158 @@ +{ + "basis": "cp8-offline-r3 PASS; all151 native inputs unchanged throughr6", + "inputs": { + "BRIDGE_VERSION": "7c60c6078683d49c9e4f4b0704eb03830b50e2048f28f9de3c27bde05f06e734", + "contracts/describe.json": "cec3b54f62de409b4b8c0442a85515a0fa30e2e3aa2881a01229dade58193853", + "dashboard/.gitignore": "b53ee26e6ff1da219b0563333a76d2c9ec19eec713d6ee54e11a1edacb0e9f3d", + "dashboard/Cargo.lock": "39b2cc399b0e82481cc862d8c0d76b9de4ff5d660b1d4ccd964134feda7c2532", + "dashboard/Cargo.toml": "5526930d258504b125a9f460846ee73df839c8bdf2d66da6d2a7ef95fbf07ebd", + "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", + "rust/Cargo.lock": "55055865b89830fa3c77281abecb2eb87c5e6cb48faa5f56b0d150df5435cddb", + "rust/Cargo.toml": "453e33046d6e2a4a575356efdb7d55eced58eb25bd2baae5d9c6daba6be432d7", + "rust/PORTING.md": "cdbd1c7795936a73c4fa294964cc89937b32854b7d1474668c55c781e0407d71", + "rust/bridge/Cargo.toml": "a4a29bcb211c9713f78f8c6846b8cd84d3868373d4b5cfcb8ffc82c264153177", + "rust/bridge/src/addin.rs": "1c047f60ff494524886c3042accc6c8466363dde9ccfc7f0cea7f639eba5a38a", + "rust/bridge/src/addin_install.rs": "aa75349181977f7985210c56688621b62744a23f3083d69ec9e4e544fb706092", + "rust/bridge/src/aps_signin.rs": "21d01ee554dd95e61d550860b1d3d090d15e1ceaf99c5a965d16a712ebc67686", + "rust/bridge/src/attach_orient_block.py": "e6fd837dad1b266f999202224665c6d9ea602b8afea13bd759c9cdd735446cbc", + "rust/bridge/src/attach_template.py": "c402f7ec4a928280e38feea2c5a864d8e93496840473832db73908de76f35c38", + "rust/bridge/src/chainexec.rs": "4d02d83422ab70485ef413c87a189acf980254954430781dbafafab074fa01a9", + "rust/bridge/src/chains.rs": "dac4d311cae41e7a086fa08931afdbe2c29dd9f6ff7ecff74da8f92278aedc4f", + "rust/bridge/src/demo.rs": "e2069c22d85e48869b934b17e6b07f91d0c137848cb25a0c6c29d0eea2a6df31", + "rust/bridge/src/electronics.rs": "3a83fbe0f615db400a74ef5a3eec949d615dbe4e4f7d065af42b951630967984", + "rust/bridge/src/epg.rs": "0ccedd7192514b02ceffc082508362d4807e3a27fcf6dd4ab0e54e11959891f4", + "rust/bridge/src/epg_template.py": "b9bfeeb270e8505d04625d41f69d7a4a48646478c1c64e1c9e171c2ed7db40a1", + "rust/bridge/src/epg_types.json": "be5fd128d7becf98002e3ce257f5a2f5c630480a385fe7d5319800c62e19636a", + "rust/bridge/src/etiquette.rs": "2ebc3ae027f1a976c6d1265832507bafb32d14732295d487602093dd9e2c3822", + "rust/bridge/src/fusion_prefs.rs": "2aee1d6d12545aaead793719589484a1b1b628230bc0849cbbc0eb3d485a0634", + "rust/bridge/src/fusionpath.rs": "e9d7b98507c70d9d1fccb35f312143e0f6a05e5462b6926b08a2cb48d17e6a45", + "rust/bridge/src/inspect_bodies_script.py": "5e1cf1a6516b3fc4fc705d1dcf7eb4dacc23bef9124a2e0cd6f13dd977cb7dea", + "rust/bridge/src/janitor.rs": "76b64e601dd22f68634498c39829ecea6003cc0648fd645283ab242c3e61df18", + "rust/bridge/src/launch.rs": "76054e794a63abf15defc89166703f0d3da87531a4ea7c9bf2123e1e279dac14", + "rust/bridge/src/lbr_wrap_parts.json": "f237770833807f095940f8b8acbf544b0ce337f44a9b0593eef336a46e3dfb29", + "rust/bridge/src/lifecycle.rs": "7a909d100de6cd57779ab9bb9dcd786293b6d531ce1aeff2e7555a85908b5057", + "rust/bridge/src/livefeed.rs": "08d1f445b524aa602fac937b28bec3e2254f3e7f9405b09a932d8e39d0a1c3b9", + "rust/bridge/src/main.rs": "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": "d996f1499047e45af23be2ea7ab31f6b7f926d85cb1351d61b54bd2b31f49af0", + "rust/bridge/src/palette.rs": "dea46dbce7c7644ee2f366ab7a848dca77872e8224787b784324dbe2d3dd6541", + "rust/bridge/src/pref_script.py": "d057d8240103313483bb8627a4a980553e8cc5901dd62249e87d97fd70935f19", + "rust/bridge/src/prove.rs": "4fa3bab3277f885c6017ad368af80d161f8fb5f9c8d0481ef42d0892e2ccd37d", + "rust/bridge/src/readiness_exec.rs": "f6653592d7ec05ebbf6eb548b7484fc4e99a14970e87fc486de6810ca810ef14", + "rust/bridge/src/routing.rs": "42851d9f6f00be76199f9ce3f038f57ac0ed8b1f6a31f8d9e20fe0ffa442302c", + "rust/bridge/src/routing_planner.py": "d60d3cd24c702cc6c6ce5f4eb8de7b859b894d6a8dea24fd8b0cea1c1901f303", + "rust/bridge/src/routing_script.py": "6cf55372ff5cd2e7e4e64b44b9c6f87a8c67f1c20251be6459bc930e453ca7a2", + "rust/bridge/src/seat.rs": "62029258deddc252ae016ba2afcd8904cbe697e5cd38a03302f6798018317f49", + "rust/bridge/src/services.rs": "73c5c017b8a943521c7ed0a320ca58a8797af6369fbf64bfd26c1200e3dc580c", + "rust/bridge/src/signin.rs": "cb4dcbbabaf83dc1dbd8ce2e80fd1733b6a81c4fbbc4cf20e78b3cba7c37bd61", + "rust/bridge/src/small_verbs.rs": "a05053ce098062498e7f9b912d12e5998b93b8903f7bec4db243cf22c4a0c526", + "rust/bridge/src/testproject.rs": "02b4d1ec6ab2d196b396f57f58b07e0bdcc522f02524ccbedfae4a4af5f90e21", + "rust/bridge/src/timings.rs": "b41fc1604c44f403bc1fe51f01119c19d62e93d5e5d393c2f733539ad2d6daad", + "rust/bridge/src/tour.rs": "bec9eac6fa40075325f66280f3509633b26cd18b3878b3e7cd84696e4d1a2bed", + "rust/bridge/tests/fixtures/board_info_sample.json": "f2c8688bf3f877f7c13efa6510d73af4792553e8325e91bd4f3be14c20df4ba6", + "rust/bridge/tests/golden/attach_script.json": "506b21ab31ebe8a7a948056bed532186decefabe220e739d1d96894f3caf5495", + "rust/bridge/tests/golden/epg_script.json": "748f7b1c161cdf663cdec3e720714fec0d3757819d96b645b38e3ac5dbbe338c", + "rust/bridge/tests/golden/make3d_script.json": "80ff2d73c9a7c88e5170935d292a8475ef963e324957200c6764b8342356d1c2", + "rust/bridge/tests/golden/mtp.json": "1d61ddf58ff5d121f878cb3304101ff328fb1e219d99652894b34ec2e172fe35", + "rust/core/Cargo.toml": "317c07a50b175ae3fd3ac9ee82065568738e3e84fbe647612c109ecd7ba076dd", + "rust/core/src/ab.rs": "f71893214420b66fa75abce0c1ebaeb763fa26b191c6d420abae6201acd0c943", + "rust/core/src/alerts.rs": "e51914d3c4a8122762a45c0ee825f0459ba4197488b319fb755a4170c405b593", + "rust/core/src/aps.rs": "a5bb2860aa8a2b155f41280e8abb1cb8a01fcc50379b1c964f032816d3a2c4fa", + "rust/core/src/contract.rs": "69ca49c4469c323887efecb10333b51ad9f6813fc450422c155f9983238acd26", + "rust/core/src/dialog_rules.json": "05c015e80ee38b68d3a0330d34327cacd294d8f0e235dba1a21d2999c6091784", + "rust/core/src/dialogs.rs": "a6e99c6e836dbb462d8d9a90e94234e980b321a61d23d5b0e2493ebbb9663607", + "rust/core/src/host.rs": "7183e1cb5e3fc00d2f1c0b98446612de77a397bc77adcb677822131df36d3943", + "rust/core/src/lib.rs": "4897c959c4bc61a118d4039f2550c7ea365a839e6d537a3f041f26ad6bb41662", + "rust/core/src/readiness.rs": "0e89546a8411645e880e27e22d113bebbe04d2a61e019738b82b3ff215737e2d", + "rust/core/src/readiness_hints.json": "c9825ddc2cace06e73c414e2117748f0b49754b240eee0f69a37705034bff867", + "rust/core/src/windows_facts.rs": "12a76a7a56ff7b28cd229bf93628e836deb6d804177b2d65c3545e8793c28013", + "rust/core/tests/alerts_golden.rs": "286b72406009bf3041954c2e4e0becf6bb1c71b30b7458a6251e47ff067e503c", + "rust/core/tests/dialogs_golden.rs": "15247100daca1c2cb70d0d434998934191e0fa0d317d92ab3ef53593a011c850", + "rust/core/tests/golden/alerts.json": "87a0f799497e63ad1e3ae36c469dcd667cd41bec79d8c733cf391746bae59ffc", + "rust/core/tests/golden/dialog_titles.json": "ca164599b90d6d3b800c232bf9105e10130a5d35c92a93428e3ab63a2f668076", + "rust/core/tests/golden/readiness.json": "2475846c8c047d78dc72d4770f2b1ef4d6b755907576b217c4ad507e8c6df98d", + "rust/core/tests/readiness_golden.rs": "092afc32a81098c2cd8267b827751606a34794be6358fe7c7c3b2a6860a19359", + "rust/lbr/Cargo.toml": "9e943260ba115865f6c734e12a4088a0474963615ad3138b5631513f5336feb0", + "rust/lbr/src/lib.rs": "c23a1c6aa81c95ae24d76e2d1bcb5c3d8ca9321a0d11069987d7758f3135c676", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbr": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "rust/lbr/tests/fixtures/ABM8-16.000MHZ-B2-T.lbrx": "7cab1a3cf059fa908e06be9f7b87fe8b81a03bc78a1ee3641125ad423470bd61", + "rust/lbr/tests/fixtures/CH340G.lbr": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "rust/lbr/tests/fixtures/CH340G.lbrx": "d77277a84841a7b5a9d696e090ea2c5dc917b2aec997aa679ca0f617bf23f479", + "rust/lbr/tests/fixtures/Demo_Board.bundle.zip": "ad7d754bebdae8e46ee67de4901373b2114c87ad4356da44b6601a38d5c0721f", + "rust/lbr/tests/fixtures/Demo_Board.lbr": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "rust/lbr/tests/fixtures/Demo_Board.lbrx": "d875a73f00299b45bbc3d69b0273ea8a0eee0e9781917119be9d915ef863d9db", + "rust/lbr/tests/fixtures/IN-S63BTG.lbr": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "rust/lbr/tests/fixtures/IN-S63BTG.lbrx": "35db6272a61665eba2ec81a6abe543572bd479af32307200ce2517ffe89fac67", + "rust/lbr/tests/fixtures/LAN7800.lbr": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "rust/lbr/tests/fixtures/LAN7800.lbrx": "ba2c72a1c62007189359e8b12525c26f9960116a307087cbec832573075d8007", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbr": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "rust/lbr/tests/fixtures/STM32L431RCT6TR.lbrx": "0ade993800cb3159d7b31e035ea6f8460dd879a9af42c06724b45474bd06a2ad", + "rust/lbr/tests/fixtures/syn_deadconnect.lbr": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "rust/lbr/tests/fixtures/syn_deadconnect.lbrx": "d391a1d70976bb9f79a48416d0de507067c89b9916126a0f2fd80a7f872d5d6c", + "rust/lbr/tests/fixtures/syn_duppad.lbr": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "rust/lbr/tests/fixtures/syn_duppad.lbrx": "af3bbf98629b7d8ffbd15754b0fd98cd5412f0da5985f64a8b7c50a4d2209333", + "rust/lbr/tests/fixtures/syn_noteagle.lbr": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "rust/lbr/tests/fixtures/syn_noteagle.lbrx": "2881c47145e15bd2ad3770825e390630841be83fc4f788709810746ee8c64fc7", + "rust/lbr/tests/fixtures/syn_truncated.lbr": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "rust/lbr/tests/fixtures/syn_truncated.lbrx": "bac1e5d759f5ad41f39c0a4d851a320fedf87e37ad3252187953c05682c3ed11", + "rust/lbr/tests/fixtures/zipslip.zip": "62789c0c18ec56ea3a7ae6c6dcceff94581ea5a3f4a7d250229820fc44fb1657", + "rust/lbr/tests/golden/ABM8-16.000MHZ-B2-T.json": "59f0a1eb337db1aecd9bd4438c29fa39ff50fc3829e9fc34f8e8b09f1dd6e75d", + "rust/lbr/tests/golden/CH340G.json": "a6ab7cc05ec4ef537a499dc844857bbd0b4fbcb693d42f60be2755efa47d7412", + "rust/lbr/tests/golden/Demo_Board.bound3.lbr": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "rust/lbr/tests/golden/Demo_Board.bound3.lbrx": "91744af418f0b50679b9837a94b28956769817f9a6389e93659ad527f7fe5d68", + "rust/lbr/tests/golden/Demo_Board.bound5.lbr": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "rust/lbr/tests/golden/Demo_Board.bound5.lbrx": "35018f2a1ae5f9754c2825fb0f3397bf40fb2fab3caa1815f922984bba239e00", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbr": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "rust/lbr/tests/golden/Demo_Board.bound5again.lbrx": "e747baabaaefc45b8cc5af295cdacd9a580c7a457e48cbe0b157a29773ef3e08", + "rust/lbr/tests/golden/Demo_Board.json": "f5250ac9d4e1761ea2a37f99437dbb431d90011863bbdc3793cddd586334f900", + "rust/lbr/tests/golden/Demo_Board.metadata.json": "f77498a63f5c99f5e228dbc6d5d27d32ffbbdb0fc385f3e6f423812105eefd1a", + "rust/lbr/tests/golden/IN-S63BTG.json": "2c9695c52cb73609c8c11af135609746a25f903b556e45dbb1b2bffcde031cda", + "rust/lbr/tests/golden/LAN7800.json": "400187b6fa0d2c2a55a1fc166f45be48fd1e1716910f97c15bc86ee3ca29ba9f", + "rust/lbr/tests/golden/STM32L431RCT6TR.json": "a4abd1bc6e0d9e22ecb3bb05b188a0df3dcd3acfe645c00c3c0ffdf394526212", + "rust/lbr/tests/golden/bundle_files.json": "e9ce9c1fcc880aebdfd9ca91cd3c489fca0c44a109f594d6d71535e24e98b02d", + "rust/lbr/tests/golden/inject_bindings.json": "70f08781980c5b3932154f4e05bde9527b8519e57cb79fb625e650d91e428680", + "rust/lbr/tests/golden/pair_parts.json": "269217c7b343b934c49668fd3cf31ca26124759198df05971d195c5eff2f7fc5", + "rust/lbr/tests/golden/preflight_and_parts.json": "3fab24b531175c303933c303550bbb36b1a4fac84631e8e136cc5bf5c3d7f4fc", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbr": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T.lbrx": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbr": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/ABM8-16.000MHZ-B2-T__Crystal_SMD_3225-4Pin_3.2x2.5mm.lbrx": "2bd45bbae0af1681b4645a22fddfcdb82cece1ef750cf70a48a6571c10276852", + "rust/lbr/tests/golden/split/CH340G.lbr": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G.lbrx": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbr": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/CH340G__SOIC-16_3.9x9.9mm_P1.27mm.lbrx": "d7688b6e5416f447fd379a18fefe6c4a6cf6c65d1656dac62116a610a52a6fdc", + "rust/lbr/tests/golden/split/IN-S63BTG.lbr": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG.lbrx": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbr": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/IN-S63BTG__IN-S63BTG.lbrx": "e9d652ebfae8d51768054daa11ef6a2bc3a742ae5d6b847bfd1252fa6d89040d", + "rust/lbr/tests/golden/split/LAN7800.lbr": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800.lbrx": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbr": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/LAN7800__QFN-48_7x7mm.lbrx": "18543107003d7a83f9e96cc32cd5c1c64bd77fb5a05c51d8fd59f8592c3b30c9", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbr": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR.lbrx": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbr": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/STM32L431RCT6TR__LQFP-64_10x10mm_P0.5mm.lbrx": "b87bc274a16274e08712af6b2b9bebb5e8671e368ce3460ec83d18902376e45a", + "rust/lbr/tests/golden/split/index.json": "a21429c3d77845998f97a2233394e1756ed99a1ca1b24d19a2fee2a156d0b362", + "rust/lbr/tests/golden.rs": "02df17a9be23b9727e1732f4b5079c23910b2fbfd45dbeaa8b07636c23a306cf", + "rust/os-mac/Cargo.toml": "864f9685ed5bb133c51c7fb979ab03175c6310f7a74db761e024b7635aa10851", + "rust/os-mac/src/lib.rs": "d0840cfd26262792ed9318b73df071eb523f7d19ffb72277ccc3ba1ba47263a4", + "rust/os-win/Cargo.toml": "1dbd93b057c4ac2a895a0b2dc2636c19330248854f3a8bde8922d27011b01f45", + "rust/os-win/src/lib.rs": "4461931dbe8899dfc8ccc1e80e557cdb7eefbc4e584d4dbe743a31b507f1682b", + "resources/adom-overlay-32.png": "23014fd52b3a531e4567837cfed0668843353e02ff7682e06a1c4a2f57d394c5" + }, + "binarySha256": "040375740df75a2147e7a2c30437ef5d8bd35c3a1c861d386dc79c860214229b", + "freshBuild": false +} diff --git a/docs/mechanical-verification/cp8/offline-accepted-summary.json b/docs/mechanical-verification/cp8/offline-accepted-summary.json new file mode 100644 index 0000000..3ce56b8 --- /dev/null +++ b/docs/mechanical-verification/cp8/offline-accepted-summary.json @@ -0,0 +1,73 @@ +{ + "status": "PASS", + "scope": "Merged publication Python source and acceptance helpers; unchanged runtime/native build files", + "groups": [ + { + "name": "python", + "command": [ + "python3", + "-m", + "unittest", + "discover", + "-s", + "tests", + "-p", + "test_*.py" + ], + "returncode": 0, + "seconds": 11.594511032104492, + "logSha256": "7c7a8e3240669c92cc13a9b7520cc9a5f629c9defc09a9ce7c76ae70b14155f8", + "tests": 454 + }, + { + "name": "portability", + "command": [ + "bash", + "tools/check-portable.sh" + ], + "returncode": 0, + "seconds": 0.970660924911499, + "pathAdded": "/home/adom/.cargo/bin", + "originalFailure": "cargo was absent from the shell PATH; original log retained", + "logSha256": "fb8c9aac3c2c97a5897544b54849d7717ff206067e050a52db20f796593fb175", + "tests": null + }, + { + "name": "history", + "command": [ + "python3", + "-m", + "unittest", + "discover", + "-s", + "tests/job_acceptance/history", + "-p", + "test_*.py" + ], + "returncode": 0, + "seconds": 0.21706604957580566, + "logSha256": "abcbc7c2ecff0091517dc87378f7547cdf0607023a80aa421db0a5b408a804be", + "tests": 38 + }, + { + "name": "busy", + "command": [ + "python3", + "-m", + "unittest", + "discover", + "-s", + "tests/job_acceptance/busy", + "-p", + "test_*.py" + ], + "returncode": 0, + "seconds": 0.12195658683776855, + "logSha256": "8c98a8688de2131c510e6ddd33f4858b84ca0b86823ee437bf2d0addbfa195dd", + "tests": 21 + } + ], + "originalEnvironmentFailurePreserved": true, + "runtimeMatchesInstalledR6": true, + "newNativeBuild": false +} diff --git a/docs/mechanical-verification/cp8/ordinary/baseline.json b/docs/mechanical-verification/cp8/ordinary/baseline.json new file mode 100644 index 0000000..9e72c34 --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/baseline.json @@ -0,0 +1,518 @@ +{ + "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": null, + "lastError": null + }, + "durationMs": 226, + "error": "", + "focusEvents": [], + "hwnd": 29757446, + "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": 1791233607, + "p50": 0.2, + "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": 1791233611, + "p50": 0.1, + "p90": 0.2 + } + }, + "verb:mech_operation_status": { + "any": { + "count": 10, + "lastAt": 1791229196, + "p50": 0.1, + "p90": 0.1 + } + }, + "verb:mechanical": { + "any": { + "count": 10, + "lastAt": 1791233999, + "p50": 0.8, + "p90": 1.4 + } + }, + "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": 1791234017, + "p50": 1.8, + "p90": 2.1 + } + }, + "verb:search_cloud_files": { + "any": { + "count": 3, + "lastAt": 1789143642, + "p50": 0.0, + "p90": 0.4 + } + }, + "verb:show_2d_board": { + "any": { + "count": 2, + "lastAt": 1788456656, + "p50": 26.6, + "p90": 34.9 + } + }, + "verb:show_3d_board": { + "any": { + "count": 6, + "lastAt": 1788456760, + "p50": 10.2, + "p90": 19.6 + } + }, + "verb:signin": { + "any": { + "count": 1, + "lastAt": 1788899909, + "p50": 56.1, + "p90": 56.1 + } + }, + "verb:start": { + "any": { + "count": 7, + "lastAt": 1791230617, + "p50": 57.4, + "p90": 64.9 + } + }, + "verb:status": { + "any": { + "count": 2, + "lastAt": 1788194217, + "p50": 0.8, + "p90": 1.0 + } + }, + "verb:stop": { + "any": { + "count": 1, + "lastAt": 1787831926, + "p50": 19.7, + "p90": 19.7 + } + }, + "verb:window_info": { + "any": { + "count": 10, + "lastAt": 1788899841, + "p50": 7.2, + "p90": 10.9 + } + } + }, + "timingsSentence": "on this machine Fusion starts in cold 41s, warm 0s (measured)", + "title": "Untitled - Autodesk Fusion " + }, + "addin": { + "_timeoutHint": "ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.", + "addinStale": false, + "addinVersion": "1.12.0-dev.8", + "busy": false, + "durationMs": 57, + "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": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "activeProductType": "DesignProductType", + "documents": [ + { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "fusionVersion": "2705.1.30", + "host": "adom_drew2", + "platform": "Windows", + "temporaryDirectory": "C:/Users/drew/AppData/Local/Temp" + } +} diff --git a/docs/mechanical-verification/cp8/ordinary/calls/0001-fusion_state.json b/docs/mechanical-verification/cp8/ordinary/calls/0001-fusion_state.json new file mode 100644 index 0000000..08815d1 --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/calls/0001-fusion_state.json @@ -0,0 +1,439 @@ +{ + "target": "adom_drew2", + "verb": "fusion_state", + "args": { + "screenshot": false, + "nativeViewport": false + }, + "requestJson": "{\"screenshot\": false, \"nativeViewport\": false}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion mechanical Ralph", + "startedAt": 1791234190.207337, + "mutating": false, + "stdout": "{\n \"_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).\",\n \"_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.\",\n \"activeDocument\": \"Untitled\",\n \"addinResponding\": true,\n \"blockingDialogs\": [],\n \"dialogs\": [],\n \"drivingBadge\": {\n \"active\": false,\n \"enabled\": true,\n \"idleShedSeconds\": 300,\n \"lastDrivingVerbAt\": null,\n \"lastError\": null\n },\n \"durationMs\": 226,\n \"error\": \"\",\n \"focusEvents\": [],\n \"hwnd\": 29757446,\n \"mainThreadBusy\": null,\n \"output\": \"{\\\"running\\\":true,\\\"activeDocument\\\":\\\"Untitled\\\",\\\"mainThreadBusy\\\":null,\\\"blockingDialogs\\\":[],\\\"screenshot\\\":null}\",\n \"rect\": {\n \"bottom\": 1549,\n \"height\": 1549,\n \"left\": -11,\n \"right\": 2572,\n \"top\": 0,\n \"width\": 2583\n },\n \"running\": true,\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60,\n \"timings\": {\n \"launch\": {\n \"cold\": {\n \"count\": 10,\n \"lastAt\": 1791234147,\n \"p50\": 41.1,\n \"p90\": 216.2\n },\n \"warm\": {\n \"count\": 2,\n \"lastAt\": 1791230617,\n \"p50\": 0.0,\n \"p90\": 1.0\n }\n },\n \"verb:activate_document\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1789145672,\n \"p50\": 3.1,\n \"p90\": 5.6\n }\n },\n \"verb:addin_status\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1788899767,\n \"p50\": 2.0,\n \"p90\": 2.0\n }\n },\n \"verb:aps_browse\": {\n \"any\": {\n \"count\": 4,\n \"lastAt\": 1789143968,\n \"p50\": 1.9,\n \"p90\": 2.3\n }\n },\n \"verb:aps_file_info\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1789144745,\n \"p50\": 34.8,\n \"p90\": 36.2\n }\n },\n \"verb:aps_get_browser\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1787944552,\n \"p50\": 0.0,\n \"p90\": 0.0\n }\n },\n \"verb:aps_open\": {\n \"any\": {\n \"count\": 5,\n \"lastAt\": 1788196241,\n \"p50\": 0.2,\n \"p90\": 37.2\n }\n },\n \"verb:aps_search\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1789684900,\n \"p50\": 35.7,\n \"p90\": 65.6\n }\n },\n \"verb:aps_signin\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1787949063,\n \"p50\": 0.4,\n \"p90\": 1.1\n }\n },\n \"verb:aps_status\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788899782,\n \"p50\": 0.0,\n \"p90\": 0.0\n }\n },\n \"verb:assembly_bom\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1790955710,\n \"p50\": 0.1,\n \"p90\": 0.6\n }\n },\n \"verb:check_dialogs\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1788195388,\n \"p50\": 1.4,\n \"p90\": 1.4\n }\n },\n \"verb:close_document\": {\n \"any\": {\n \"count\": 9,\n \"lastAt\": 1789145809,\n \"p50\": 6.7,\n \"p90\": 46.1\n }\n },\n \"verb:describe\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1789144008,\n \"p50\": 0.0,\n \"p90\": 0.0\n }\n },\n \"verb:document_info\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791233607,\n \"p50\": 0.2,\n \"p90\": 0.2\n }\n },\n \"verb:eagle_import_status\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1790978404,\n \"p50\": 1.8,\n \"p90\": 1.8\n }\n },\n \"verb:electron_run\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788456727,\n \"p50\": 6.3,\n \"p90\": 13.3\n }\n },\n \"verb:export_cloud_file\": {\n \"any\": {\n \"count\": 4,\n \"lastAt\": 1789685179,\n \"p50\": 223.4,\n \"p90\": 290.3\n }\n },\n \"verb:export_eagle_source\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788456713,\n \"p50\": 1.7,\n \"p90\": 2.2\n }\n },\n \"verb:export_f3d\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1790955227,\n \"p50\": 3.7,\n \"p90\": 4.4\n }\n },\n \"verb:export_obj\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1787944913,\n \"p50\": 0.7,\n \"p90\": 0.7\n }\n },\n \"verb:export_step\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788456783,\n \"p50\": 5.5,\n \"p90\": 7.9\n }\n },\n \"verb:get_app_state\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234147,\n \"p50\": 1.3,\n \"p90\": 3.6\n }\n },\n \"verb:get_design_info\": {\n \"any\": {\n \"count\": 5,\n \"lastAt\": 1788900070,\n \"p50\": 5.2,\n \"p90\": 10.8\n }\n },\n \"verb:help\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1788194522,\n \"p50\": 1.0,\n \"p90\": 1.0\n }\n },\n \"verb:kill\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1787833443,\n \"p50\": 66.9,\n \"p90\": 66.9\n }\n },\n \"verb:list_cloud_files\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1787832975,\n \"p50\": 15.8,\n \"p90\": 15.8\n }\n },\n \"verb:mcp_call\": {\n \"any\": {\n \"count\": 5,\n \"lastAt\": 1788455586,\n \"p50\": 0.0,\n \"p90\": 1.8\n }\n },\n \"verb:mech_capabilities\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791233611,\n \"p50\": 0.1,\n \"p90\": 0.2\n }\n },\n \"verb:mech_operation_status\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791229196,\n \"p50\": 0.1,\n \"p90\": 0.1\n }\n },\n \"verb:mechanical\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791233999,\n \"p50\": 0.8,\n \"p90\": 1.4\n }\n },\n \"verb:open_by_urn\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1789144985,\n \"p50\": 43.4,\n \"p90\": 59.1\n }\n },\n \"verb:open_cloud_file\": {\n \"any\": {\n \"count\": 8,\n \"lastAt\": 1789666231,\n \"p50\": 24.2,\n \"p90\": 87.5\n }\n },\n \"verb:open_design\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1790955721,\n \"p50\": 5.9,\n \"p90\": 6.1\n }\n },\n \"verb:open_lbr\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1788195396,\n \"p50\": 2.7,\n \"p90\": 5.0\n }\n },\n \"verb:physical_properties\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1790955710,\n \"p50\": 0.1,\n \"p90\": 0.2\n }\n },\n \"verb:readiness\": {\n \"any\": {\n \"count\": 5,\n \"lastAt\": 1788900108,\n \"p50\": 14.9,\n \"p90\": 56.9\n }\n },\n \"verb:restart_for_addin\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234174,\n \"p50\": 0.0,\n \"p90\": 125.2\n }\n },\n \"verb:run_modeling_script\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1791234017,\n \"p50\": 1.8,\n \"p90\": 2.1\n }\n },\n \"verb:search_cloud_files\": {\n \"any\": {\n \"count\": 3,\n \"lastAt\": 1789143642,\n \"p50\": 0.0,\n \"p90\": 0.4\n }\n },\n \"verb:show_2d_board\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1788456656,\n \"p50\": 26.6,\n \"p90\": 34.9\n }\n },\n \"verb:show_3d_board\": {\n \"any\": {\n \"count\": 6,\n \"lastAt\": 1788456760,\n \"p50\": 10.2,\n \"p90\": 19.6\n }\n },\n \"verb:signin\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1788899909,\n \"p50\": 56.1,\n \"p90\": 56.1\n }\n },\n \"verb:start\": {\n \"any\": {\n \"count\": 7,\n \"lastAt\": 1791230617,\n \"p50\": 57.4,\n \"p90\": 64.9\n }\n },\n \"verb:status\": {\n \"any\": {\n \"count\": 2,\n \"lastAt\": 1788194217,\n \"p50\": 0.8,\n \"p90\": 1.0\n }\n },\n \"verb:stop\": {\n \"any\": {\n \"count\": 1,\n \"lastAt\": 1787831926,\n \"p50\": 19.7,\n \"p90\": 19.7\n }\n },\n \"verb:window_info\": {\n \"any\": {\n \"count\": 10,\n \"lastAt\": 1788899841,\n \"p50\": 7.2,\n \"p90\": 10.9\n }\n }\n },\n \"timingsSentence\": \"on this machine Fusion starts in cold 41s, warm 0s (measured)\",\n \"title\": \"Untitled - Autodesk Fusion \"\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234190.440328, + "raw": { + "_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": null, + "lastError": null + }, + "durationMs": 226, + "error": "", + "focusEvents": [], + "hwnd": 29757446, + "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": 1791233607, + "p50": 0.2, + "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": 1791233611, + "p50": 0.1, + "p90": 0.2 + } + }, + "verb:mech_operation_status": { + "any": { + "count": 10, + "lastAt": 1791229196, + "p50": 0.1, + "p90": 0.1 + } + }, + "verb:mechanical": { + "any": { + "count": 10, + "lastAt": 1791233999, + "p50": 0.8, + "p90": 1.4 + } + }, + "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": 1791234017, + "p50": 1.8, + "p90": 2.1 + } + }, + "verb:search_cloud_files": { + "any": { + "count": 3, + "lastAt": 1789143642, + "p50": 0.0, + "p90": 0.4 + } + }, + "verb:show_2d_board": { + "any": { + "count": 2, + "lastAt": 1788456656, + "p50": 26.6, + "p90": 34.9 + } + }, + "verb:show_3d_board": { + "any": { + "count": 6, + "lastAt": 1788456760, + "p50": 10.2, + "p90": 19.6 + } + }, + "verb:signin": { + "any": { + "count": 1, + "lastAt": 1788899909, + "p50": 56.1, + "p90": 56.1 + } + }, + "verb:start": { + "any": { + "count": 7, + "lastAt": 1791230617, + "p50": 57.4, + "p90": 64.9 + } + }, + "verb:status": { + "any": { + "count": 2, + "lastAt": 1788194217, + "p50": 0.8, + "p90": 1.0 + } + }, + "verb:stop": { + "any": { + "count": 1, + "lastAt": 1787831926, + "p50": 19.7, + "p90": 19.7 + } + }, + "verb:window_info": { + "any": { + "count": 10, + "lastAt": 1788899841, + "p50": 7.2, + "p90": 10.9 + } + } + }, + "timingsSentence": "on this machine Fusion starts in cold 41s, warm 0s (measured)", + "title": "Untitled - Autodesk Fusion " + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/ordinary/calls/0002-fusion_addin_status.json b/docs/mechanical-verification/cp8/ordinary/calls/0002-fusion_addin_status.json new file mode 100644 index 0000000..241e1a5 --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/calls/0002-fusion_addin_status.json @@ -0,0 +1,32 @@ +{ + "target": "adom_drew2", + "verb": "fusion_addin_status", + "args": {}, + "requestJson": "{}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion mechanical Ralph", + "startedAt": 1791234190.4413986, + "mutating": false, + "stdout": "{\n \"_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.\",\n \"addinStale\": false,\n \"addinVersion\": \"1.12.0-dev.8\",\n \"busy\": false,\n \"durationMs\": 57,\n \"error\": \"\",\n \"expectedAddinVersion\": \"1.12.0-dev.8\",\n \"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}\",\n \"pyThreads\": 4,\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60,\n \"version\": \"1.12.0-dev.8\"\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234190.5049598, + "raw": { + "_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": 57, + "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" + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/ordinary/calls/0003-bridge_list.json b/docs/mechanical-verification/cp8/ordinary/calls/0003-bridge_list.json new file mode 100644 index 0000000..bdbcb74 --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/calls/0003-bridge_list.json @@ -0,0 +1,1455 @@ +{ + "target": "adom_drew2", + "verb": "bridge_list", + "args": {}, + "requestJson": "{}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion mechanical Ralph", + "startedAt": 1791234190.5054584, + "mutating": false, + "stdout": "{\n \"_hint\": \"Per-bridge runtime info. `source` tells you where the bridge code lives: bundled (installer ships it) / cache (wiki-streamed, writable) / third_party (installed via bridge_install). Use bridge_install to add a new bridge from a wiki manifest URL, bridge_pause/resume to control lifecycle without uninstalling, bridge_uninstall to remove. v1.8.0+.\",\n \"_skillsHint\": \"For each bridge here with skillPkg != null, the container should run its `installSkill` to get that bridge's SKILL.md into ~/.claude/skills/ (then `adom-wiki pkg update` keeps them current). skillPkg:null bridges ship their skill in the adom-bridge core pkg (or have none).\",\n \"bridges\": [\n {\n \"author\": \"Adom Inc.\",\n \"category\": \"CAD\",\n \"depsInstallingSec\": null,\n \"description\": \"Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.\",\n \"devPinned\": true,\n \"displayName\": \"Autodesk Fusion 360\",\n \"docs\": \"https://wiki.adom.inc/adom/fusion-bridge\",\n \"entryMismatch\": false,\n \"entrypoint\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/fusion360/adom-fusion-bridge.exe\",\n \"expectedImage\": \"adom-fusion-bridge.exe\",\n \"heroAvailable\": false,\n \"heroDocs\": null,\n \"homepage\": \"https://wiki.adom.inc/adom/fusion-bridge\",\n \"installPath\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/fusion360\",\n \"installSkill\": \"adom-wiki pkg install adom/fusion-bridge\",\n \"installedVersion\": \"1.12.0-dev.8\",\n \"installedVersionSource\": \"cache\",\n \"instanceCount\": 1,\n \"languages\": [\n \"Python\"\n ],\n \"lastSpawnError\": null,\n \"lastUsedMs\": 1791234190461,\n \"latest\": null,\n \"livePids\": [\n 42780\n ],\n \"logPath\": \"C:/Users/drew/.adom/bridge-logs/fusion360.log\",\n \"manifestSource\": null,\n \"manifestUrl\": \"https://wiki.adom.inc/api/v1/pages/fusion-bridge/files/adom-bridge-fusion-manifest.json\",\n \"manifestUrlFollowed\": null,\n \"name\": \"fusion360\",\n \"paused\": false,\n \"persistent\": true,\n \"platforms\": {\n \"linux\": {\n \"reason\": \"Autodesk doesn't ship Fusion 360 for Linux, so there's no host app for the add-in to attach to.\",\n \"supported\": false\n },\n \"macos\": {\n \"reason\": \"Fusion 360 runs on macOS; bridge + add-in install paths handled by fusion_detect.py.\",\n \"supported\": true\n },\n \"windows\": {\n \"reason\": \"\",\n \"supported\": true\n }\n },\n \"port\": 50618,\n \"prewarm\": {\n \"assets\": [\n \"AdomBridge add-in sync\",\n \"PCB design-rules catalog cache\"\n ],\n \"lastRun\": {\n \"at\": \"2026-10-05T15:41:57Z\",\n \"elapsedMs\": 2344,\n \"error\": null,\n \"ok\": true,\n \"verb\": \"fusion_prewarm\",\n \"version\": \"1.12.0-dev.5\"\n },\n \"requiresHostApp\": true,\n \"timeoutSeconds\": null,\n \"verb\": \"fusion_prewarm\"\n },\n \"releasedAt\": \"2026-06-26T06:00:00Z\",\n \"runningImage\": \"adom-fusion-bridge.exe\",\n \"runningVersion\": \"1.12.0-dev.5\",\n \"skillPkg\": \"adom/fusion-bridge\",\n \"source\": \"cache\",\n \"sourceDir\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/fusion360\",\n \"spawn\": {\n \"entrypoint\": \"adom-fusion-bridge.exe\",\n \"instanceCount\": 1,\n \"kind\": \"exe\",\n \"manifestPort\": 0,\n \"persistent\": true,\n \"portBlocked\": null,\n \"runtimePort\": 50618\n },\n \"spawnKind\": \"exe\",\n \"stableUrl\": \"http://127.0.0.1:24680/open/fusion360\",\n \"status\": \"running\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"tags\": [\n \"fusion360\",\n \"autodesk\",\n \"cad\",\n \"exports\",\n \"aps\",\n \"modeling\"\n ],\n \"timeouts\": {\n \"default\": 60,\n \"prefixes\": [\n {\n \"prefix\": \"open\",\n \"seconds\": 150\n }\n ],\n \"verbs\": {\n \"aps_open\": 150,\n \"aps_recent\": 120,\n \"aps_search\": 120,\n \"build_library_3d\": 1800,\n \"capture_library_views\": 600,\n \"close_all_documents\": 90,\n \"demo\": 300,\n \"export_3mf\": 360,\n \"export_board_image\": 90,\n \"export_bom\": 90,\n \"export_cpl\": 90,\n \"export_dwg\": 150,\n \"export_dxf\": 150,\n \"export_f3d\": 360,\n \"export_fbx\": 360,\n \"export_gerbers\": 210,\n \"export_iges\": 360,\n \"export_obj\": 360,\n \"export_sat\": 360,\n \"export_skp\": 360,\n \"export_step\": 360,\n \"export_stl\": 360,\n \"export_usdz\": 360,\n \"generate_package\": 120,\n \"get_preferences\": 25,\n \"install_fusion\": 90,\n \"make_3d_package\": 200,\n \"prewarm\": 120,\n \"run_modeling_script\": 180,\n \"search_cloud_files\": 200,\n \"set_preference\": 40,\n \"signin\": 150,\n \"start\": 90,\n \"walk_cloud_tree\": 620\n }\n },\n \"updateAvailable\": false,\n \"usageScore\": 21137.37743194529,\n \"verbCount\": 167,\n \"verbPrefixes\": [\n \"fusion_\"\n ],\n \"verbs\": [\n \"fusion_account\",\n \"fusion_action_ledger\",\n \"fusion_activate_document\",\n \"fusion_addin_status\",\n \"fusion_alerts\",\n \"fusion_apply_fusion_update\",\n \"fusion_aps_browse\",\n \"fusion_aps_create_folder\",\n \"fusion_aps_download\",\n \"fusion_aps_file_info\",\n \"fusion_aps_forget_browser\",\n \"fusion_aps_get\",\n \"fusion_aps_get_browser\",\n \"fusion_aps_open\",\n \"fusion_aps_recent\",\n \"fusion_aps_search\",\n \"fusion_aps_set_browser\",\n \"fusion_aps_set_client_id\",\n \"fusion_aps_signin\",\n \"fusion_aps_status\",\n \"fusion_aps_upload\",\n \"fusion_aps_versions\",\n \"fusion_assembly_bom\",\n \"fusion_attach_3d_package\",\n \"fusion_bind_library_3d\",\n \"fusion_board_info\",\n \"fusion_board_stackup\",\n \"fusion_build_library_3d\",\n \"fusion_cancel_run\",\n \"fusion_capture_library_views\",\n \"fusion_check_recovery\",\n \"fusion_claim_seat\",\n \"fusion_cleanup_cloud_files\",\n \"fusion_close_all_documents\",\n \"fusion_close_document\",\n \"fusion_close_window\",\n \"fusion_create_cloud_folder\",\n \"fusion_create_library\",\n \"fusion_delete_cloud_file\",\n \"fusion_demo\",\n \"fusion_demo_progress\",\n \"fusion_describe\",\n \"fusion_detect_layers\",\n \"fusion_dismiss_blocking_dialogs\",\n \"fusion_document_info\",\n \"fusion_eagle_import_status\",\n \"fusion_electron_pan\",\n \"fusion_electron_run\",\n \"fusion_electron_select\",\n \"fusion_electron_zoom\",\n \"fusion_electronics_query\",\n \"fusion_execute_text_command\",\n \"fusion_export_3mf\",\n \"fusion_export_board_image\",\n \"fusion_export_bom\",\n \"fusion_export_cloud_file\",\n \"fusion_export_cpl\",\n \"fusion_export_dwg\",\n \"fusion_export_dxf\",\n \"fusion_export_eagle_source\",\n \"fusion_export_f3d\",\n \"fusion_export_fbx\",\n \"fusion_export_gerbers\",\n \"fusion_export_iges\",\n \"fusion_export_lbr\",\n \"fusion_export_obj\",\n \"fusion_export_optimized_glb\",\n \"fusion_export_sat\",\n \"fusion_export_skp\",\n \"fusion_export_source\",\n \"fusion_export_step\",\n \"fusion_export_stl\",\n \"fusion_export_usdz\",\n \"fusion_fetch_optimized_glb\",\n \"fusion_generate_package\",\n \"fusion_get_app_state\",\n \"fusion_get_design_info\",\n \"fusion_get_parameters\",\n \"fusion_get_preferences\",\n \"fusion_import_electronics\",\n \"fusion_import_step\",\n \"fusion_inspect_bodies\",\n \"fusion_install_fusion\",\n \"fusion_install_library_bundle\",\n \"fusion_interactive\",\n \"fusion_kill\",\n \"fusion_library_manager\",\n \"fusion_library_parts\",\n \"fusion_list_cloud_files\",\n \"fusion_list_cloud_projects\",\n \"fusion_list_text_commands\",\n \"fusion_live_feed\",\n \"fusion_make_3d_package\",\n \"fusion_make_showcase_project\",\n \"fusion_make_test_project\",\n \"fusion_managed_library_create\",\n \"fusion_managed_library_link\",\n \"fusion_managed_library_pull\",\n \"fusion_managed_library_push\",\n \"fusion_managed_library_unlink\",\n \"fusion_mcp_call\",\n \"fusion_mcp_enable\",\n \"fusion_mcp_resources\",\n \"fusion_mcp_status\",\n \"fusion_mcp_tools\",\n \"fusion_mech_capabilities\",\n \"fusion_mech_operation_status\",\n \"fusion_mechanical\",\n \"fusion_narrate\",\n \"fusion_new_electronics_from_eagle\",\n \"fusion_notify_owner\",\n \"fusion_open_board\",\n \"fusion_open_by_urn\",\n \"fusion_open_by_urn_note\",\n \"fusion_open_cloud_file\",\n \"fusion_open_design\",\n \"fusion_open_electronics\",\n \"fusion_open_lbr\",\n \"fusion_open_schematic\",\n \"fusion_physical_properties\",\n \"fusion_plan_library_import\",\n \"fusion_plan_route\",\n \"fusion_preflight_lbr\",\n \"fusion_prefs_close\",\n \"fusion_prefs_open\",\n \"fusion_prewarm\",\n \"fusion_prove_result\",\n \"fusion_readiness\",\n \"fusion_release_seat\",\n \"fusion_reset_workspace\",\n \"fusion_resolve_seat_dialog\",\n \"fusion_restart_for_addin\",\n \"fusion_route_net\",\n \"fusion_routing_drc\",\n \"fusion_routing_state\",\n \"fusion_run_modeling_script\",\n \"fusion_save_to_cloud\",\n \"fusion_schematic\",\n \"fusion_screenshot_fusion\",\n \"fusion_search_cloud_files\",\n \"fusion_set_auto_update\",\n \"fusion_set_design_rules\",\n \"fusion_set_driving_badge\",\n \"fusion_set_parameter\",\n \"fusion_set_preference\",\n \"fusion_set_seat_takeover\",\n \"fusion_set_window_sizing\",\n \"fusion_show_2d_board\",\n \"fusion_show_3d_board\",\n \"fusion_show_3d_package\",\n \"fusion_show_attributes\",\n \"fusion_show_footprint\",\n \"fusion_show_library\",\n \"fusion_show_project\",\n \"fusion_show_schematic\",\n \"fusion_show_symbol\",\n \"fusion_signin\",\n \"fusion_signin_2fa\",\n \"fusion_start\",\n \"fusion_state\",\n \"fusion_stop\",\n \"fusion_take_screenshot\",\n \"fusion_uninstall\",\n \"fusion_verb_times\",\n \"fusion_view\",\n \"fusion_walk_cloud_tree\",\n \"fusion_web_signin\"\n ],\n \"version\": \"1.12.0-dev.8\",\n \"versionDrift\": true,\n \"watcher\": null\n },\n {\n \"author\": \"Adom Inc.\",\n \"category\": \"developer-tools\",\n \"depsInstallingSec\": null,\n \"description\": \"Bridge to Hydrogen Desktop's HTTP control API. Drives setup, the Claude workspace, WSL/container lifecycle, and read-only diagnostics via direct HTTP \u2014 no shell-out, no quote mangling. HD runs as a sibling Tauri app; AD does NOT spawn it.\",\n \"devPinned\": false,\n \"displayName\": \"Hydrogen Desktop\",\n \"docs\": \"https://wiki.adom.inc/adom/adom-desktop\",\n \"entryMismatch\": false,\n \"entrypoint\": \"//?/C:/Users/drew/AppData/Local/Adom Bridge/bridges/hd/\",\n \"expectedImage\": null,\n \"heroAvailable\": false,\n \"heroDocs\": \"https://wiki.adom.inc/adom/hydrogen-desktop\",\n \"homepage\": \"https://wiki.adom.inc/adom/adom-desktop\",\n \"installPath\": \"\\\\\\\\?\\\\C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\Adom Bridge\\\\bridges\\\\hd\",\n \"installSkill\": \"adom-wiki pkg install adom/adom-desktop\",\n \"installedVersion\": \"1.0.0\",\n \"installedVersionSource\": \"cache\",\n \"instanceCount\": null,\n \"languages\": [],\n \"lastSpawnError\": null,\n \"lastUsedMs\": 0,\n \"latest\": null,\n \"livePids\": [],\n \"logPath\": \"C:/Users/drew/.adom/bridge-logs/hd.log\",\n \"manifestSource\": \"updateManifestUrl\",\n \"manifestUrl\": null,\n \"manifestUrlFollowed\": null,\n \"name\": \"hd\",\n \"paused\": false,\n \"persistent\": false,\n \"platforms\": {\n \"linux\": {\n \"reason\": \"HD currently ships Windows-only; Linux variant in scope for HD's future releases.\",\n \"supported\": false\n },\n \"macos\": {\n \"reason\": \"HD currently ships Windows-only.\",\n \"supported\": false\n },\n \"windows\": {\n \"reason\": \"\",\n \"supported\": true\n }\n },\n \"port\": null,\n \"prewarm\": null,\n \"releasedAt\": \"2026-06-30T13:13:22Z\",\n \"runningImage\": null,\n \"runningVersion\": null,\n \"skillPkg\": \"adom/adom-desktop\",\n \"source\": \"bundled\",\n \"sourceDir\": \"//?/C:/Users/drew/AppData/Local/Adom Bridge/bridges/hd\",\n \"spawn\": {\n \"entrypoint\": \"\",\n \"instanceCount\": null,\n \"kind\": \"external-http\",\n \"manifestPort\": 47084,\n \"persistent\": false,\n \"portBlocked\": null,\n \"runtimePort\": null\n },\n \"spawnKind\": \"external-http\",\n \"stableUrl\": \"http://127.0.0.1:24680/open/hd\",\n \"status\": \"stopped\",\n \"statusVerb\": null,\n \"tags\": [\n \"hydrogen-desktop\",\n \"control-api\",\n \"http\",\n \"lifecycle\"\n ],\n \"timeouts\": null,\n \"updateAvailable\": false,\n \"usageScore\": 0.0,\n \"verbCount\": 11,\n \"verbPrefixes\": [],\n \"verbs\": [\n \"hd_api\",\n \"hd_status\",\n \"hd_launch\",\n \"hd_stop\",\n \"hd_restart\",\n \"hd_log\",\n \"hd_screenshot\",\n \"hd_shot\",\n \"hd_open_url\",\n \"hd_browser_profiles\",\n \"hd_ship\"\n ],\n \"version\": \"1.0.0\",\n \"versionDrift\": false,\n \"watcher\": null\n },\n {\n \"author\": \"Adom Inc.\",\n \"category\": \"EDA\",\n \"depsInstallingSec\": null,\n \"description\": \"Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.\",\n \"devPinned\": false,\n \"displayName\": \"KiCad EDA\",\n \"docs\": \"https://wiki.adom.inc/adom/kicad-bridge\",\n \"entryMismatch\": false,\n \"entrypoint\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/kicad/kicad-bridge.exe\",\n \"expectedImage\": \"kicad-bridge.exe\",\n \"heroAvailable\": false,\n \"heroDocs\": null,\n \"homepage\": \"https://wiki.adom.inc/adom/adom-bridge\",\n \"installPath\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/kicad\",\n \"installSkill\": \"adom-wiki pkg install adom/kicad-bridge\",\n \"installedVersion\": \"1.0.55\",\n \"installedVersionSource\": \"cache\",\n \"instanceCount\": 1,\n \"languages\": [\n \"Python\",\n \"PowerShell\"\n ],\n \"lastSpawnError\": null,\n \"lastUsedMs\": 1790956354547,\n \"latest\": \"1.0.55\",\n \"livePids\": [\n 36872\n ],\n \"logPath\": \"C:/Users/drew/.adom/bridge-logs/kicad.log\",\n \"manifestSource\": \"insidersManifestUrl\",\n \"manifestUrl\": \"https://wiki.adom.inc/api/v1/pages/kicad-bridge/files/adom-bridge-kicad-manifest.json\",\n \"manifestUrlFollowed\": null,\n \"name\": \"kicad\",\n \"paused\": false,\n \"persistent\": false,\n \"platforms\": {\n \"linux\": {\n \"reason\": \"\",\n \"supported\": false\n },\n \"macos\": {\n \"reason\": \"\",\n \"supported\": false\n },\n \"windows\": {\n \"reason\": \"\",\n \"supported\": true\n }\n },\n \"port\": 60896,\n \"prewarm\": {\n \"assets\": [\n \"kicad-cli warm (detection)\",\n \"KiCad first-run config + setup wizard marked done\",\n \"KiCad's own taskbar shortcut identity\"\n ],\n \"lastRun\": {\n \"at\": \"2026-10-05T15:41:58Z\",\n \"elapsedMs\": 273,\n \"error\": null,\n \"ok\": false,\n \"verb\": \"kicad_prewarm\",\n \"version\": \"1.0.55\"\n },\n \"requiresHostApp\": true,\n \"timeoutSeconds\": null,\n \"verb\": \"kicad_prewarm\"\n },\n \"releasedAt\": \"2026-06-26T16:00:00Z\",\n \"runningImage\": \"kicad-bridge.exe\",\n \"runningVersion\": \"1.0.55\",\n \"skillPkg\": \"adom/kicad-bridge\",\n \"source\": \"cache\",\n \"sourceDir\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/kicad\",\n \"spawn\": {\n \"entrypoint\": \"kicad-bridge.exe\",\n \"instanceCount\": 1,\n \"kind\": \"exe\",\n \"manifestPort\": 0,\n \"persistent\": false,\n \"portBlocked\": null,\n \"runtimePort\": 60896\n },\n \"spawnKind\": \"exe\",\n \"stableUrl\": \"http://127.0.0.1:24680/open/kicad\",\n \"status\": \"running\",\n \"statusVerb\": \"kicad_status\",\n \"tags\": [\n \"pcb\",\n \"schematic\",\n \"open-source\",\n \"kicad-10\",\n \"kicad-11-ready\"\n ],\n \"timeouts\": {\n \"default\": 130,\n \"prefixes\": [],\n \"verbs\": {\n \"autoroute\": 900,\n \"demo\": 600,\n \"enable_software_opengl\": 240,\n \"export_gerber\": 210,\n \"export_molecule\": 420,\n \"export_pdf\": 180,\n \"export_step\": 300,\n \"export_svg\": 180,\n \"format_upgrade\": 180,\n \"freerouting\": 900,\n \"open_3d_viewer\": 300,\n \"prewarm\": 120,\n \"run_drc\": 300,\n \"run_erc\": 300,\n \"upgrade\": 900\n }\n },\n \"updateAvailable\": false,\n \"usageScore\": 1039.3524135655607,\n \"verbCount\": 119,\n \"verbPrefixes\": [\n \"kicad_\"\n ],\n \"verbs\": [\n \"kicad_describe\",\n \"kicad_status\",\n \"kicad_readiness\",\n \"kicad_list_versions\",\n \"kicad_diagnostics\",\n \"kicad_run_drc\",\n \"kicad_run_erc\",\n \"kicad_export_gerber\",\n \"kicad_export_pdf\",\n \"kicad_export_svg\",\n \"kicad_export_step\",\n \"kicad_export_bom_csv\",\n \"kicad_uninstall\",\n \"kicad_extract_netlist\",\n \"kicad_trace_net\",\n \"kicad_find_connections\",\n \"kicad_analyze_connections\",\n \"kicad_lint_board\",\n \"kicad_lint_schematic\",\n \"kicad_lint_library\",\n \"kicad_format_upgrade\",\n \"kicad_list_symbols\",\n \"kicad_list_footprints\",\n \"kicad_adom_library_status\",\n \"kicad_get_settings\",\n \"kicad_set_settings\",\n \"kicad_list_design_rules\",\n \"kicad_set_design_rules\",\n \"kicad_3d_viewer_settings\",\n \"kicad_taskbar_repair\",\n \"kicad_prewarm\",\n \"kicad_model_check\",\n \"kicad_pcm_list\",\n \"kicad_pcm_install\",\n \"kicad_pcm_uninstall\",\n \"kicad_pcm_add_repository\",\n \"kicad_pcm_remove_repository\",\n \"kicad_check_for_updates\",\n \"kicad_upgrade\",\n \"kicad_sch_place_symbol\",\n \"kicad_sch_wire\",\n \"kicad_sch_label\",\n \"kicad_sch_move\",\n \"kicad_sch_delete\",\n \"kicad_sch_set_property\",\n \"kicad_ipc_api\",\n \"kicad_export_molecule\",\n \"kicad_errors\",\n \"kicad_log_tail\",\n \"kicad_bridge_status\",\n \"kicad_bridge_call\",\n \"kicad_install_plugin\",\n \"kicad_plugin_diagnose\",\n \"kicad_install_library\",\n \"kicad_uninstall_library\",\n \"kicad_install_symbol\",\n \"kicad_install_footprint\",\n \"kicad_install_library_bundle\",\n \"kicad_adom_library_heal\",\n \"kicad_make_part_project\",\n \"kicad_export_part\",\n \"kicad_silk_fields_batch\",\n \"kicad_silk_graphics_batch\",\n \"kicad_text_bounds\",\n \"kicad_silk_text_batch\",\n \"kicad_routing_state\",\n \"kicad_route_net\",\n \"kicad_remove_route\",\n \"kicad_add_zone\",\n \"kicad_apply_zone_plan\",\n \"kicad_zone_state\",\n \"kicad_select_net\",\n \"kicad_select_clear\",\n \"kicad_remove_zone\",\n \"kicad_routing_validate\",\n \"kicad_board_pads\",\n \"kicad_add_track\",\n \"kicad_add_via\",\n \"kicad_route\",\n \"kicad_autoroute\",\n \"kicad_freerouting\",\n \"kicad_placement_state\",\n \"kicad_move_footprint\",\n \"kicad_placement_validate\",\n \"kicad_refresh_board_views\",\n \"kicad_launch\",\n \"kicad_open_board\",\n \"kicad_open_schematic\",\n \"kicad_open_symbol_editor\",\n \"kicad_open_footprint_editor\",\n \"kicad_menu_items\",\n \"kicad_3d_view\",\n \"kicad_open_3d_viewer\",\n \"kicad_open_editors\",\n \"kicad_close\",\n \"kicad_close_symbol_editor\",\n \"kicad_close_footprint_editor\",\n \"kicad_close_3d_viewer\",\n \"kicad_dismiss_dialogs\",\n \"kicad_window_info\",\n \"kicad_state\",\n \"kicad_screenshot_all\",\n \"kicad_send_key\",\n \"kicad_click\",\n \"kicad_fix_keyboard\",\n \"kicad_place_footprint\",\n \"kicad_enable_software_opengl\",\n \"kicad_rescan_libraries\",\n \"kicad_show_project\",\n \"kicad_show_symbol\",\n \"kicad_show_footprint\",\n \"kicad_show_3d_chip\",\n \"kicad_show_schematic\",\n \"kicad_show_2d_board\",\n \"kicad_show_3d_board\",\n \"kicad_show_library\",\n \"kicad_progress\",\n \"kicad_verb_times\",\n \"kicad_demo\"\n ],\n \"version\": \"1.0.55\",\n \"versionDrift\": false,\n \"watcher\": {\n \"configKey\": \"project_watch\",\n \"defaultGlobs\": [\n \"*.kicad_pcb\",\n \"*.kicad_sch\",\n \"*.kicad_pro\"\n ],\n \"description\": \"Monitors a KiCad project folder for file changes and syncs them to Docker. Configured via the set_project_watch / trigger_project_watch verbs (AD core owns the watcher; the KiCad section of AD's Settings panel was removed in AD 1.9.117 \u2014 the config keys are still honored).\",\n \"displayName\": \"Project Watch\",\n \"supports\": true\n }\n },\n {\n \"author\": \"Adom Inc.\",\n \"category\": \"Browser Automation\",\n \"depsInstallingSec\": null,\n \"description\": \"Drives the user's REAL signed-in Chrome/Edge, in two layers. Layer 1 (nb) needs NOTHING installed and works on any machine: nbrowser_open_os_window (open a URL in the user's real profile, background+flashing, the OAuth/consent path), nbrowser_os_windows, nbrowser_profiles, nbrowser_wake_profile, nbrowser_force_close. Layer 2 (nbe, the Adom Native Browser Extension) unlocks the rest: CDP driving (navigate/click/read/screenshot) inside their logged-in profile. The bridge binds an ephemeral loopback port and the native-messaging host pumps stdio <-> bridge.\",\n \"devPinned\": false,\n \"displayName\": \"Adom Native Browser\",\n \"docs\": \"https://wiki.adom.inc/adom/nb-bridge\",\n \"entryMismatch\": false,\n \"entrypoint\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/native-browser/server.js\",\n \"expectedImage\": \"node.exe\",\n \"heroAvailable\": false,\n \"heroDocs\": null,\n \"homepage\": \"https://wiki.adom.inc/adom/nb-bridge\",\n \"installPath\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/native-browser\",\n \"installSkill\": \"adom-wiki pkg install adom/nb-bridge\",\n \"installedVersion\": \"0.16.33\",\n \"installedVersionSource\": \"cache\",\n \"instanceCount\": 1,\n \"languages\": [\n \"Node/JS\"\n ],\n \"lastSpawnError\": null,\n \"lastUsedMs\": 1791220671752,\n \"latest\": \"0.16.33\",\n \"livePids\": [\n 32228\n ],\n \"logPath\": \"C:/Users/drew/.adom/bridge-logs/native-browser.log\",\n \"manifestSource\": \"insidersManifestUrl\",\n \"manifestUrl\": \"https://wiki.adom.inc/api/pages/adom/nb-bridge/files/native-browser-bridge-manifest.json\",\n \"manifestUrlFollowed\": null,\n \"name\": \"native-browser\",\n \"paused\": false,\n \"persistent\": true,\n \"platforms\": {\n \"linux\": {\n \"reason\": \"Pending; bridge + host are OS-agnostic Node, only the install/registration layer is Windows-specific.\",\n \"supported\": false\n },\n \"macos\": {\n \"reason\": \"Windows-first; Kyle ports to macOS as a fast-follow (NativeMessagingHosts live under ~/Library/Application Support//NativeMessagingHosts; bridge/host are OS-agnostic Node).\",\n \"supported\": false\n },\n \"windows\": {\n \"reason\": \"\",\n \"supported\": true\n }\n },\n \"port\": 51703,\n \"prewarm\": {\n \"assets\": [],\n \"lastRun\": {\n \"at\": \"2026-09-22T19:44:55Z\",\n \"elapsedMs\": 41,\n \"error\": null,\n \"ok\": true,\n \"verb\": \"nbrowser_prewarm\",\n \"version\": \"0.16.33\"\n },\n \"requiresHostApp\": false,\n \"timeoutSeconds\": null,\n \"verb\": \"nbrowser_prewarm\"\n },\n \"releasedAt\": \"2026-09-22T15:18:44Z\",\n \"runningImage\": \"node.exe\",\n \"runningVersion\": \"0.16.33\",\n \"skillPkg\": \"adom/nb-bridge\",\n \"source\": \"cache\",\n \"sourceDir\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/native-browser\",\n \"spawn\": {\n \"entrypoint\": \"server.js\",\n \"instanceCount\": 1,\n \"kind\": \"node\",\n \"manifestPort\": 0,\n \"persistent\": true,\n \"portBlocked\": null,\n \"runtimePort\": 51703\n },\n \"spawnKind\": \"node\",\n \"stableUrl\": \"http://127.0.0.1:24680/open/native-browser\",\n \"status\": \"running\",\n \"statusVerb\": \"nbrowser_status\",\n \"tags\": [\n \"nb\",\n \"nbe\",\n \"native-browser\",\n \"chrome\",\n \"edge\",\n \"nbrowser\",\n \"pup-parity\"\n ],\n \"timeouts\": {\n \"default\": 60,\n \"prefixes\": [\n {\n \"prefix\": \"screenshot\",\n \"seconds\": 120\n },\n {\n \"prefix\": \"record\",\n \"seconds\": 120\n }\n ],\n \"verbs\": {\n \"fetch_url\": 120,\n \"input_dispatch\": 120,\n \"select\": 30,\n \"wait\": 125\n }\n },\n \"updateAvailable\": false,\n \"usageScore\": 918.4421358581012,\n \"verbCount\": 88,\n \"verbPrefixes\": [\n \"nbrowser_\"\n ],\n \"verbs\": [\n \"nbrowser_status\",\n \"nbrowser_readiness\",\n \"nbrowser_install_chrome\",\n \"nbrowser_prewarm\",\n \"nbrowser_chrome_status\",\n \"nbrowser_ping\",\n \"nbrowser_progress\",\n \"nbrowser_activity\",\n \"nbrowser_open_window\",\n \"nbrowser_close_window\",\n \"nbrowser_owned\",\n \"nbrowser_cleanup\",\n \"nbrowser_force_close\",\n \"nbrowser_switch_window\",\n \"nbrowser_list_windows\",\n \"nbrowser_window_state\",\n \"nbrowser_fullscreen\",\n \"nbrowser_login_state\",\n \"nbrowser_credentials\",\n \"nbrowser_profiles\",\n \"nbrowser_use_profile\",\n \"nbrowser_pin_session\",\n \"nbrowser_open_os_window\",\n \"nbrowser_os_windows\",\n \"nbrowser_wake_profile\",\n \"nbrowser_resolve_profiles\",\n \"nbrowser_whoami\",\n \"nbrowser_profile_block\",\n \"nbrowser_profile_unblock\",\n \"nbrowser_rescan\",\n \"nbrowser_resync_sessions\",\n \"nbrowser_open_tab\",\n \"nbrowser_close_tab\",\n \"nbrowser_switch_tab\",\n \"nbrowser_list_tabs\",\n \"nbrowser_navigate\",\n \"nbrowser_reload\",\n \"nbrowser_back\",\n \"nbrowser_forward\",\n \"nbrowser_wait\",\n \"nbrowser_wait_for\",\n \"nbrowser_keepalive\",\n \"nbrowser_screenshot\",\n \"nbrowser_screenshot_full_res\",\n \"nbrowser_eval\",\n \"nbrowser_evaluate\",\n \"nbrowser_input_dispatch\",\n \"nbrowser_scroll\",\n \"nbrowser_click\",\n \"nbrowser_select\",\n \"nbrowser_set_file_input\",\n \"nbrowser_set_date\",\n \"nbrowser_totp\",\n \"nbrowser_register_totp\",\n \"nbrowser_add_extension_origin\",\n \"nbrowser_type\",\n \"nbrowser_press_key\",\n \"nbrowser_fetch_url\",\n \"nbrowser_download_wait\",\n \"nbrowser_errors\",\n \"nbrowser_close\",\n \"nbrowser_record_start\",\n \"nbrowser_record_stop\",\n \"nbrowser_record_status\",\n \"nbrowser_record_list\",\n \"nbrowser_flash\",\n \"nbrowser_flash_stop\",\n \"nbrowser_apply_settings\",\n \"nbrowser_settings\",\n \"nbrowser_flash_mode\",\n \"nbrowser_taskbar\",\n \"nbrowser_describe\",\n \"nbrowser_handle_dialog\",\n \"nbrowser_state\",\n \"nbrowser_demo\",\n \"nbrowser_uninstall\",\n \"nbrowser_dev_reload\",\n \"nbrowser_clear_cookies\",\n \"nbrowser_caption\",\n \"nbrowser_focus\",\n \"nbrowser_hover\",\n \"nbrowser_double_click\",\n \"nbrowser_right_click\",\n \"nbrowser_login_form\",\n \"nbrowser_autologin\",\n \"nbrowser_cursor\",\n \"nbrowser_events\",\n \"nbrowser_download\"\n ],\n \"version\": \"0.16.33\",\n \"versionDrift\": false,\n \"watcher\": null\n },\n {\n \"author\": \"Adom Inc.\",\n \"category\": \"Manufacturing\",\n \"depsInstallingSec\": null,\n \"description\": \"The Adom Desktop bridge for the Essemtec Puma / ePlace. Reads + dry-run: machine state, recipe/package/component/feeder reads, the full feeder fleet from Supply/Feeder/*.feeder.xml, and dry-run of any WriteOp (preflight + physics-bounds + unified diff). F4 adds puma_write \u2014 GATED production writes of FileWrite.* library objects to real XML files under --data-folder (atomic write + XML-verify + audit; approver enforced; refused when the machine is Productive), plus puma_revert \u2014 canonical revert of a prior write by correlationId (CAS-pinned to the recorded result hash, its own audit entry, same write gate). Off by default: requires --enable-writes. eData stays vendor-read-only. 0.2.5: puma_feeders binds each loaded lane to its component/part number (carrierType, componentName, partValue, packageName, componentBarcode) via the Supply/Carrier -> Component library chain (#639). 0.2.6: the write audit records ab's X-Adom-Verified-Origin (relay | local | bridge, plus the X-Adom-Caller-Delegate chain for a bridge callback; a missing header records as local-unattributed) beside the approver \u2014 attribution, never a gate. New puma_write_status (declared as statusVerb): what happened to a write by correlationId, so a caller whose transport timed out polls instead of declaring the write unknown. 0.2.7: the host is a GUI-subsystem exe (no console window of its own) and its git subprocess runs with CreateNoWindow, so the bridge can never leave a conhost window on the desktop across ab respawns or reinstalls.\",\n \"devPinned\": false,\n \"displayName\": \"Puma Bridge (Essemtec ePlace)\",\n \"docs\": \"https://wiki.adom.inc/adom/puma-bridge\",\n \"entryMismatch\": false,\n \"entrypoint\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puma-bridge/puma-bridge-host.exe\",\n \"expectedImage\": \"puma-bridge-host.exe\",\n \"heroAvailable\": false,\n \"heroDocs\": null,\n \"homepage\": \"https://wiki.adom.inc/adom/puma-bridge\",\n \"installPath\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puma-bridge\",\n \"installSkill\": \"adom-wiki pkg install adom/puma-bridge\",\n \"installedVersion\": \"0.2.7\",\n \"installedVersionSource\": \"cache\",\n \"instanceCount\": 1,\n \"languages\": [\n \"Binary\"\n ],\n \"lastSpawnError\": null,\n \"lastUsedMs\": 1790623763822,\n \"latest\": \"0.2.6\",\n \"livePids\": [\n 32008\n ],\n \"logPath\": \"C:/Users/drew/.adom/bridge-logs/puma-bridge.log\",\n \"manifestSource\": \"updateManifestUrl\",\n \"manifestUrl\": \"https://wiki.adom.inc/api/v1/pages/adom/puma-bridge/files/adom-bridge-puma-manifest.json\",\n \"manifestUrlFollowed\": null,\n \"name\": \"puma-bridge\",\n \"paused\": false,\n \"persistent\": true,\n \"platforms\": {\n \"linux\": {\n \"reason\": \"\",\n \"supported\": true\n },\n \"macos\": {\n \"reason\": \"\",\n \"supported\": false\n },\n \"windows\": {\n \"reason\": \"\",\n \"supported\": true\n }\n },\n \"port\": 64764,\n \"prewarm\": null,\n \"releasedAt\": \"2026-09-23T15:54:11Z\",\n \"runningImage\": \"puma-bridge-host.exe\",\n \"runningVersion\": \"0.2.7\",\n \"skillPkg\": \"adom/puma-bridge\",\n \"source\": \"cache\",\n \"sourceDir\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puma-bridge\",\n \"spawn\": {\n \"entrypoint\": \"puma-bridge-host.exe\",\n \"instanceCount\": 1,\n \"kind\": \"exe\",\n \"manifestPort\": 0,\n \"persistent\": true,\n \"portBlocked\": null,\n \"runtimePort\": 64764\n },\n \"spawnKind\": \"exe\",\n \"stableUrl\": \"http://127.0.0.1:24680/open/puma-bridge\",\n \"status\": \"running\",\n \"statusVerb\": \"puma_write_status\",\n \"tags\": [\n \"smt\",\n \"essemtec\",\n \"puma\",\n \"eplace\",\n \"pick-and-place\",\n \"manufacturing\",\n \"factoryos\"\n ],\n \"timeouts\": null,\n \"updateAvailable\": false,\n \"usageScore\": 2.695126649463196,\n \"verbCount\": 9,\n \"verbPrefixes\": [\n \"puma_\"\n ],\n \"verbs\": [\n \"puma_ping\",\n \"puma_state\",\n \"puma_get\",\n \"puma_feeders\",\n \"puma_dryrun\",\n \"puma_write\",\n \"puma_revert\",\n \"puma_write_status\",\n \"puma_describe\"\n ],\n \"version\": \"0.2.7\",\n \"versionDrift\": false,\n \"watcher\": null\n },\n {\n \"author\": \"Adom Inc.\",\n \"category\": \"Browser Automation\",\n \"depsInstallingSec\": null,\n \"description\": \"Drives a browser ALREADY on the machine \u2014 installed Chrome, else Microsoft Edge (every Windows PC ships with Edge) \u2014 launched with a FRESH isolated profile, so the common case has NO ~150 MB Chrome-for-Testing download and it never touches the user's real tabs/logins. Binds its local server to LOOPBACK (127.0.0.1) only, so no Windows Firewall 'allow Node through the firewall' prompt ever pops. Chrome for Testing is fetched only as a LAST RESORT if the machine has no Chromium browser at all. SPAWN-VERIFIED fallback: pup tries each detected browser (Chrome \u2192 Edge \u2192 CfT) and actually launches it, falling through to the next if one won't start (and handling browsers like Edge that relaunch onto another PID), so a corrupt/partial install never hard-fails an open. The browser that launches is cached as the default (persisted across restarts) so it isn't re-probed each time. On spawn the bridge SELF-WARMS: detects browsers + disk, and only if the box has no Chrome/Edge and no cached CfT does it background-fetch CfT so the first open is instant. pup_use pins a specific browser (chrome | edge | cft | auto); {browser:'chrome',install:true} downloads & installs REAL Google Chrome (user-scoped, no admin) on an Edge-only box. pup_readiness (READ-ONLY) reports which browser will be used + the full candidate list + the default + free disk. Every failure returns a specific errorCode + _hint (chrome_install_no_disk, chrome_download_network, chrome_install_permission, chrome_stable_not_detected, \u2026). Launches with FULL browser permissions by default for full debug (strictPermissions:true opts out). Headful automation: open/close windows+tabs, navigate, screenshot, eval JS, record. pup is a GENERIC, non-profile browser only \u2014 every session is a fresh isolated Chrome/Edge process, never the user's real signed-in browser; profile defaults to sessionId. To drive the user's REAL Chrome/Edge (their profile, cookies, SSO), use the Adom browser EXTENSION's nbrowser_* verbs \u2014 a separate bridge, not pup's job. macOS (v1.9.74+): full parity with mac-native mechanics \u2014 background-by-default is the app-level hide (windows stay drivable/screenshottable while hidden), raise/lower map to unhide+activate/hide, pup_alert_window posts a native toast whose click focuses the window, pup_use {browser:'chrome',install:true} installs Chrome from the official dmg, and taskbar identity/badging remains Windows-only.\",\n \"devPinned\": false,\n \"displayName\": \"Puppeteer (Chrome for Testing + Native)\",\n \"docs\": \"https://wiki.adom.inc/adom/pup-bridge\",\n \"entryMismatch\": false,\n \"entrypoint\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puppeteer/adom-pup-bridge.exe\",\n \"expectedImage\": \"adom-pup-bridge.exe\",\n \"heroAvailable\": false,\n \"heroDocs\": null,\n \"homepage\": \"https://wiki.adom.inc/adom/adom-bridge\",\n \"installPath\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puppeteer\",\n \"installSkill\": \"adom-wiki pkg install adom/pup-bridge\",\n \"installedVersion\": \"2.0.697\",\n \"installedVersionSource\": \"cache\",\n \"instanceCount\": 1,\n \"languages\": [\n \"Binary\"\n ],\n \"lastSpawnError\": null,\n \"lastUsedMs\": 1791212202067,\n \"latest\": \"2.0.697\",\n \"livePids\": [\n 68812\n ],\n \"logPath\": \"C:/Users/drew/.adom/bridge-logs/puppeteer.log\",\n \"manifestSource\": \"insidersManifestUrl\",\n \"manifestUrl\": \"https://wiki.adom.inc/api/v1/pages/pup-bridge/files/adom-bridge-puppeteer-manifest.json\",\n \"manifestUrlFollowed\": null,\n \"name\": \"puppeteer\",\n \"paused\": false,\n \"persistent\": true,\n \"platforms\": {\n \"linux\": {\n \"reason\": \"not yet\",\n \"supported\": false\n },\n \"macos\": {\n \"reason\": \"The Rust exe is Windows-only for now; host-mac is stubbed for the Mac port. macOS runs the Node build (public tier).\",\n \"supported\": false\n },\n \"windows\": {\n \"reason\": \"\",\n \"supported\": true\n }\n },\n \"port\": 57134,\n \"prewarm\": {\n \"assets\": [\n \"chrome-for-testing\"\n ],\n \"lastRun\": {\n \"at\": \"2026-10-05T14:55:58Z\",\n \"elapsedMs\": 1409,\n \"error\": null,\n \"ok\": true,\n \"verb\": \"pup_prewarm\",\n \"version\": \"2.0.697\"\n },\n \"requiresHostApp\": false,\n \"timeoutSeconds\": 900,\n \"verb\": \"pup_prewarm\"\n },\n \"releasedAt\": \"2026-10-05T14:55:48Z\",\n \"runningImage\": \"adom-pup-bridge.exe\",\n \"runningVersion\": \"2.0.697\",\n \"skillPkg\": \"adom/pup-bridge\",\n \"source\": \"cache\",\n \"sourceDir\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puppeteer\",\n \"spawn\": {\n \"entrypoint\": \"adom-pup-bridge.exe\",\n \"instanceCount\": 1,\n \"kind\": \"exe\",\n \"manifestPort\": 8851,\n \"persistent\": true,\n \"portBlocked\": null,\n \"runtimePort\": 57134\n },\n \"spawnKind\": \"exe\",\n \"stableUrl\": \"http://127.0.0.1:24680/open/puppeteer\",\n \"status\": \"running\",\n \"statusVerb\": \"pup_readiness\",\n \"tags\": [\n \"puppeteer\",\n \"chrome\",\n \"headful\",\n \"recording\"\n ],\n \"timeouts\": {\n \"default\": 60,\n \"prefixes\": [\n {\n \"prefix\": \"record\",\n \"seconds\": 90\n }\n ],\n \"verbs\": {\n \"credential_reveal\": 150,\n \"fill_card\": 150,\n \"open_window\": 150,\n \"prewarm\": 240,\n \"use\": 240\n }\n },\n \"updateAvailable\": false,\n \"usageScore\": 580.902320825431,\n \"verbCount\": 97,\n \"verbPrefixes\": [\n \"pup_\",\n \"browser_\"\n ],\n \"verbs\": [\n \"pup_describe\",\n \"pup_readiness\",\n \"pup_prewarm\",\n \"pup_status\",\n \"pup_list_windows\",\n \"pup_my_windows\",\n \"pup_list_sessions\",\n \"pup_open_window\",\n \"pup_navigate\",\n \"pup_eval\",\n \"pup_evaluate\",\n \"pup_screenshot\",\n \"pup_close_window\",\n \"pup_close\",\n \"pup_close_all_windows\",\n \"pup_window_info\",\n \"pup_open_tab\",\n \"pup_list_tabs\",\n \"pup_switch_tab\",\n \"pup_close_tab\",\n \"pup_switch_window\",\n \"pup_click\",\n \"pup_select\",\n \"pup_hover\",\n \"pup_type\",\n \"pup_press_key\",\n \"pup_scroll\",\n \"pup_fill\",\n \"pup_wait\",\n \"pup_reload\",\n \"pup_back\",\n \"pup_forward\",\n \"pup_set_viewport\",\n \"pup_errors\",\n \"pup_dialog\",\n \"pup_input_dispatch\",\n \"pup_render_html\",\n \"pup_fetch_url\",\n \"pup_maximize\",\n \"pup_raise_os_window\",\n \"pup_focus_window\",\n \"pup_lower_os_window\",\n \"pup_alert_window\",\n \"pup_progress\",\n \"pup_configure\",\n \"pup_use\",\n \"pup_clear_cookies\",\n \"pup_clear_site_data\",\n \"pup_quit_idle_browsers\",\n \"pup_rescan\",\n \"pup_restart_browser\",\n \"pup_set_identity\",\n \"pup_audit_icons\",\n \"pup_dashboard\",\n \"pup_credentials\",\n \"credential_list\",\n \"credential_set\",\n \"credential_delete\",\n \"pup_login\",\n \"pup_google_accounts\",\n \"pup_google_signin\",\n \"pup_credential_reveal\",\n \"pup_card_set\",\n \"pup_cards\",\n \"pup_card_delete\",\n \"pup_fill_card\",\n \"pup_wiki_set_view\",\n \"pup_annotate\",\n \"pup_floaty_click\",\n \"pup_record_start\",\n \"pup_record_stop\",\n \"pup_record_status\",\n \"pup_record_list\",\n \"pup_recorder_open\",\n \"pup_recorder_close\",\n \"pup_screen_record_start\",\n \"pup_screen_record_stop\",\n \"pup_screen_record_status\",\n \"pup_screen_record_list\",\n \"pup_highfps_extend\",\n \"pup_screenshot_element\",\n \"pup_screenshot_full_res\",\n \"pup_download\",\n \"pup_launch\",\n \"pup_deps\",\n \"pup_install_toolbar\",\n \"pup_reap_profiles\",\n \"pup_cache_prune\",\n \"pup_sweep_identities\",\n \"pup_uninstall\",\n \"pup_move_to_workspace\",\n \"pup_assisted_click\",\n \"pup_import_scan\",\n \"pup_import_browser_logins\",\n \"pup_vault_sync\",\n \"pup_vault_export\",\n \"pup_vault_import\"\n ],\n \"version\": \"2.0.697\",\n \"versionDrift\": false,\n \"watcher\": null\n },\n {\n \"author\": \"Adom Inc.\",\n \"category\": \"MCAD\",\n \"depsInstallingSec\": null,\n \"description\": \"Bridge for SOLIDWORKS desktop CAD \u2014 create and open documents, a modeling DSL, file management (find/open/save/export/Pack and Go), custom properties, BOM generation, design analysis (mass properties, bodies, parameters, interference, rebuild health) and background window/dialog etiquette, over the SOLIDWORKS COM API. Single native binary: no interpreter, no PowerShell, ~10ms cold start.\",\n \"devPinned\": false,\n \"displayName\": \"SOLIDWORKS\",\n \"docs\": \"https://wiki.adom.inc/adom/solidworks-bridge\",\n \"entryMismatch\": false,\n \"entrypoint\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/solidworks/swx-bridge.exe\",\n \"expectedImage\": \"swx-bridge.exe\",\n \"heroAvailable\": false,\n \"heroDocs\": null,\n \"homepage\": \"https://wiki.adom.inc/adom/adom-bridge\",\n \"installPath\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/solidworks\",\n \"installSkill\": \"adom-wiki pkg install adom/solidworks-bridge\",\n \"installedVersion\": \"0.9.21\",\n \"installedVersionSource\": \"cache\",\n \"instanceCount\": 0,\n \"languages\": [\n \"Binary\"\n ],\n \"lastSpawnError\": null,\n \"lastUsedMs\": 1791224978746,\n \"latest\": \"0.9.19\",\n \"livePids\": [],\n \"logPath\": \"C:/Users/drew/.adom/bridge-logs/solidworks.log\",\n \"manifestSource\": \"updateManifestUrl\",\n \"manifestUrl\": \"https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/adom-bridge-solidworks-manifest.json\",\n \"manifestUrlFollowed\": null,\n \"name\": \"solidworks\",\n \"paused\": false,\n \"persistent\": false,\n \"platforms\": {\n \"linux\": {\n \"reason\": \"SOLIDWORKS desktop is Windows-only; the bridge drives its COM API.\",\n \"supported\": false\n },\n \"macos\": {\n \"reason\": \"SOLIDWORKS desktop is Windows-only; the bridge drives its COM API.\",\n \"supported\": false\n },\n \"windows\": {\n \"reason\": \"\",\n \"supported\": true\n }\n },\n \"port\": 49861,\n \"prewarm\": null,\n \"releasedAt\": \"2026-10-05T18:49:46Z\",\n \"runningImage\": null,\n \"runningVersion\": \"0.9.19\",\n \"skillPkg\": \"adom/solidworks-bridge\",\n \"source\": \"cache\",\n \"sourceDir\": \"C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/solidworks\",\n \"spawn\": {\n \"entrypoint\": \"swx-bridge.exe\",\n \"instanceCount\": 0,\n \"kind\": \"exe\",\n \"manifestPort\": 0,\n \"persistent\": false,\n \"portBlocked\": null,\n \"runtimePort\": 49861\n },\n \"spawnKind\": \"exe\",\n \"stableUrl\": \"http://127.0.0.1:24680/open/solidworks\",\n \"status\": \"running\",\n \"statusVerb\": \"swx_status\",\n \"tags\": [\n \"solidworks\",\n \"mcad\",\n \"cad\",\n \"bom\",\n \"step\",\n \"mass-properties\",\n \"modeling\",\n \"fusion-parity\"\n ],\n \"timeouts\": {\n \"default\": 120,\n \"prefixes\": [],\n \"verbs\": {\n \"action_ledger\": 20,\n \"activate_document\": 180,\n \"bom\": 300,\n \"check_recovery\": 180,\n \"close_all_documents\": 240,\n \"close_all_safely\": 600,\n \"close_doc\": 180,\n \"close_import_temps\": 600,\n \"close_window\": 120,\n \"cloud_status\": 90,\n \"design_info\": 180,\n \"dismiss_blocking_dialogs\": 180,\n \"document_info\": 120,\n \"export\": 300,\n \"export_3mf\": 300,\n \"export_dwg\": 300,\n \"export_dxf\": 300,\n \"export_glb\": 300,\n \"export_iges\": 300,\n \"export_parasolid\": 300,\n \"export_pdf\": 300,\n \"export_sat\": 300,\n \"export_step\": 300,\n \"export_stl\": 300,\n \"find_files\": 180,\n \"get_app_state\": 90,\n \"get_parameters\": 240,\n \"get_preferences\": 90,\n \"import\": 420,\n \"inspect_bodies\": 180,\n \"interference\": 600,\n \"kill\": 240,\n \"new_document\": 180,\n \"open\": 300,\n \"pack_and_go\": 600,\n \"rebuild_check\": 300,\n \"render_image\": 600,\n \"reset_workspace\": 600,\n \"run_script\": 420,\n \"save_as\": 420,\n \"set_driving_badge\": 120,\n \"set_parameter\": 420,\n \"set_preference\": 90,\n \"show_assembly\": 600,\n \"show_drawing\": 600,\n \"show_part\": 600,\n \"shutdown\": 900,\n \"sign_in\": 240,\n \"start\": 300,\n \"state\": 180,\n \"stop\": 420,\n \"verb_times\": 20,\n \"window_info\": 120\n }\n },\n \"updateAvailable\": false,\n \"usageScore\": 562.1398322742835,\n \"verbCount\": 69,\n \"verbPrefixes\": [\n \"swx_\"\n ],\n \"verbs\": [\n \"swx_action_ledger\",\n \"swx_activate_document\",\n \"swx_add_component\",\n \"swx_bom\",\n \"swx_check_recovery\",\n \"swx_close_all_documents\",\n \"swx_close_all_safely\",\n \"swx_close_doc\",\n \"swx_close_import_temps\",\n \"swx_close_window\",\n \"swx_cloud_status\",\n \"swx_com_eval\",\n \"swx_describe\",\n \"swx_design_info\",\n \"swx_dismiss_blocking_dialogs\",\n \"swx_docs\",\n \"swx_document_info\",\n \"swx_export\",\n \"swx_export_3mf\",\n \"swx_export_dwg\",\n \"swx_export_dxf\",\n \"swx_export_glb\",\n \"swx_export_iges\",\n \"swx_export_parasolid\",\n \"swx_export_pdf\",\n \"swx_export_sat\",\n \"swx_export_step\",\n \"swx_export_stl\",\n \"swx_find_files\",\n \"swx_get_app_state\",\n \"swx_get_parameters\",\n \"swx_get_preferences\",\n \"swx_import\",\n \"swx_inspect_bodies\",\n \"swx_interference\",\n \"swx_kill\",\n \"swx_mass_properties\",\n \"swx_new_document\",\n \"swx_open\",\n \"swx_pack_and_go\",\n \"swx_progress\",\n \"swx_props_get\",\n \"swx_props_set\",\n \"swx_readiness\",\n \"swx_rebuild_check\",\n \"swx_recover_list\",\n \"swx_render_image\",\n \"swx_reset_workspace\",\n \"swx_run_macro\",\n \"swx_run_script\",\n \"swx_save\",\n \"swx_save_as\",\n \"swx_screenshot\",\n \"swx_set_driving_badge\",\n \"swx_set_parameter\",\n \"swx_set_preference\",\n \"swx_show_assembly\",\n \"swx_show_drawing\",\n \"swx_show_part\",\n \"swx_shutdown\",\n \"swx_sign_in\",\n \"swx_start\",\n \"swx_state\",\n \"swx_status\",\n \"swx_stop\",\n \"swx_uninstall\",\n \"swx_user_presence\",\n \"swx_verb_times\",\n \"swx_window_info\"\n ],\n \"version\": \"0.9.21\",\n \"versionDrift\": true,\n \"watcher\": null\n }\n ],\n \"current_os\": \"windows\",\n \"durationMs\": 16,\n \"error\": \"\",\n \"invalidCount\": 0,\n \"ok\": true,\n \"output\": \"\",\n \"schemaVersion\": 1,\n \"staleCheckedAt\": 1791215191,\n \"status\": \"ok\",\n \"success\": true,\n \"summary\": {\n \"bundled\": 1,\n \"cache\": 6,\n \"invalid\": 0,\n \"paused\": 0,\n \"third_party\": 0,\n \"total\": 7\n },\n \"timeoutSeconds\": 10\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234190.5279174, + "raw": { + "_hint": "Per-bridge runtime info. `source` tells you where the bridge code lives: bundled (installer ships it) / cache (wiki-streamed, writable) / third_party (installed via bridge_install). Use bridge_install to add a new bridge from a wiki manifest URL, bridge_pause/resume to control lifecycle without uninstalling, bridge_uninstall to remove. v1.8.0+.", + "_skillsHint": "For each bridge here with skillPkg != null, the container should run its `installSkill` to get that bridge's SKILL.md into ~/.claude/skills/ (then `adom-wiki pkg update` keeps them current). skillPkg:null bridges ship their skill in the adom-bridge core pkg (or have none).", + "bridges": [ + { + "author": "Adom Inc.", + "category": "CAD", + "depsInstallingSec": null, + "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.", + "devPinned": true, + "displayName": "Autodesk Fusion 360", + "docs": "https://wiki.adom.inc/adom/fusion-bridge", + "entryMismatch": false, + "entrypoint": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/fusion360/adom-fusion-bridge.exe", + "expectedImage": "adom-fusion-bridge.exe", + "heroAvailable": false, + "heroDocs": null, + "homepage": "https://wiki.adom.inc/adom/fusion-bridge", + "installPath": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/fusion360", + "installSkill": "adom-wiki pkg install adom/fusion-bridge", + "installedVersion": "1.12.0-dev.8", + "installedVersionSource": "cache", + "instanceCount": 1, + "languages": [ + "Python" + ], + "lastSpawnError": null, + "lastUsedMs": 1791234190461, + "latest": null, + "livePids": [ + 42780 + ], + "logPath": "C:/Users/drew/.adom/bridge-logs/fusion360.log", + "manifestSource": null, + "manifestUrl": "https://wiki.adom.inc/api/v1/pages/fusion-bridge/files/adom-bridge-fusion-manifest.json", + "manifestUrlFollowed": null, + "name": "fusion360", + "paused": false, + "persistent": true, + "platforms": { + "linux": { + "reason": "Autodesk doesn't ship Fusion 360 for Linux, so there's no host app for the add-in to attach to.", + "supported": false + }, + "macos": { + "reason": "Fusion 360 runs on macOS; bridge + add-in install paths handled by fusion_detect.py.", + "supported": true + }, + "windows": { + "reason": "", + "supported": true + } + }, + "port": 50618, + "prewarm": { + "assets": [ + "AdomBridge add-in sync", + "PCB design-rules catalog cache" + ], + "lastRun": { + "at": "2026-10-05T15:41:57Z", + "elapsedMs": 2344, + "error": null, + "ok": true, + "verb": "fusion_prewarm", + "version": "1.12.0-dev.5" + }, + "requiresHostApp": true, + "timeoutSeconds": null, + "verb": "fusion_prewarm" + }, + "releasedAt": "2026-06-26T06:00:00Z", + "runningImage": "adom-fusion-bridge.exe", + "runningVersion": "1.12.0-dev.5", + "skillPkg": "adom/fusion-bridge", + "source": "cache", + "sourceDir": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/fusion360", + "spawn": { + "entrypoint": "adom-fusion-bridge.exe", + "instanceCount": 1, + "kind": "exe", + "manifestPort": 0, + "persistent": true, + "portBlocked": null, + "runtimePort": 50618 + }, + "spawnKind": "exe", + "stableUrl": "http://127.0.0.1:24680/open/fusion360", + "status": "running", + "statusVerb": "fusion_get_app_state", + "tags": [ + "fusion360", + "autodesk", + "cad", + "exports", + "aps", + "modeling" + ], + "timeouts": { + "default": 60, + "prefixes": [ + { + "prefix": "open", + "seconds": 150 + } + ], + "verbs": { + "aps_open": 150, + "aps_recent": 120, + "aps_search": 120, + "build_library_3d": 1800, + "capture_library_views": 600, + "close_all_documents": 90, + "demo": 300, + "export_3mf": 360, + "export_board_image": 90, + "export_bom": 90, + "export_cpl": 90, + "export_dwg": 150, + "export_dxf": 150, + "export_f3d": 360, + "export_fbx": 360, + "export_gerbers": 210, + "export_iges": 360, + "export_obj": 360, + "export_sat": 360, + "export_skp": 360, + "export_step": 360, + "export_stl": 360, + "export_usdz": 360, + "generate_package": 120, + "get_preferences": 25, + "install_fusion": 90, + "make_3d_package": 200, + "prewarm": 120, + "run_modeling_script": 180, + "search_cloud_files": 200, + "set_preference": 40, + "signin": 150, + "start": 90, + "walk_cloud_tree": 620 + } + }, + "updateAvailable": false, + "usageScore": 21137.37743194529, + "verbCount": 167, + "verbPrefixes": [ + "fusion_" + ], + "verbs": [ + "fusion_account", + "fusion_action_ledger", + "fusion_activate_document", + "fusion_addin_status", + "fusion_alerts", + "fusion_apply_fusion_update", + "fusion_aps_browse", + "fusion_aps_create_folder", + "fusion_aps_download", + "fusion_aps_file_info", + "fusion_aps_forget_browser", + "fusion_aps_get", + "fusion_aps_get_browser", + "fusion_aps_open", + "fusion_aps_recent", + "fusion_aps_search", + "fusion_aps_set_browser", + "fusion_aps_set_client_id", + "fusion_aps_signin", + "fusion_aps_status", + "fusion_aps_upload", + "fusion_aps_versions", + "fusion_assembly_bom", + "fusion_attach_3d_package", + "fusion_bind_library_3d", + "fusion_board_info", + "fusion_board_stackup", + "fusion_build_library_3d", + "fusion_cancel_run", + "fusion_capture_library_views", + "fusion_check_recovery", + "fusion_claim_seat", + "fusion_cleanup_cloud_files", + "fusion_close_all_documents", + "fusion_close_document", + "fusion_close_window", + "fusion_create_cloud_folder", + "fusion_create_library", + "fusion_delete_cloud_file", + "fusion_demo", + "fusion_demo_progress", + "fusion_describe", + "fusion_detect_layers", + "fusion_dismiss_blocking_dialogs", + "fusion_document_info", + "fusion_eagle_import_status", + "fusion_electron_pan", + "fusion_electron_run", + "fusion_electron_select", + "fusion_electron_zoom", + "fusion_electronics_query", + "fusion_execute_text_command", + "fusion_export_3mf", + "fusion_export_board_image", + "fusion_export_bom", + "fusion_export_cloud_file", + "fusion_export_cpl", + "fusion_export_dwg", + "fusion_export_dxf", + "fusion_export_eagle_source", + "fusion_export_f3d", + "fusion_export_fbx", + "fusion_export_gerbers", + "fusion_export_iges", + "fusion_export_lbr", + "fusion_export_obj", + "fusion_export_optimized_glb", + "fusion_export_sat", + "fusion_export_skp", + "fusion_export_source", + "fusion_export_step", + "fusion_export_stl", + "fusion_export_usdz", + "fusion_fetch_optimized_glb", + "fusion_generate_package", + "fusion_get_app_state", + "fusion_get_design_info", + "fusion_get_parameters", + "fusion_get_preferences", + "fusion_import_electronics", + "fusion_import_step", + "fusion_inspect_bodies", + "fusion_install_fusion", + "fusion_install_library_bundle", + "fusion_interactive", + "fusion_kill", + "fusion_library_manager", + "fusion_library_parts", + "fusion_list_cloud_files", + "fusion_list_cloud_projects", + "fusion_list_text_commands", + "fusion_live_feed", + "fusion_make_3d_package", + "fusion_make_showcase_project", + "fusion_make_test_project", + "fusion_managed_library_create", + "fusion_managed_library_link", + "fusion_managed_library_pull", + "fusion_managed_library_push", + "fusion_managed_library_unlink", + "fusion_mcp_call", + "fusion_mcp_enable", + "fusion_mcp_resources", + "fusion_mcp_status", + "fusion_mcp_tools", + "fusion_mech_capabilities", + "fusion_mech_operation_status", + "fusion_mechanical", + "fusion_narrate", + "fusion_new_electronics_from_eagle", + "fusion_notify_owner", + "fusion_open_board", + "fusion_open_by_urn", + "fusion_open_by_urn_note", + "fusion_open_cloud_file", + "fusion_open_design", + "fusion_open_electronics", + "fusion_open_lbr", + "fusion_open_schematic", + "fusion_physical_properties", + "fusion_plan_library_import", + "fusion_plan_route", + "fusion_preflight_lbr", + "fusion_prefs_close", + "fusion_prefs_open", + "fusion_prewarm", + "fusion_prove_result", + "fusion_readiness", + "fusion_release_seat", + "fusion_reset_workspace", + "fusion_resolve_seat_dialog", + "fusion_restart_for_addin", + "fusion_route_net", + "fusion_routing_drc", + "fusion_routing_state", + "fusion_run_modeling_script", + "fusion_save_to_cloud", + "fusion_schematic", + "fusion_screenshot_fusion", + "fusion_search_cloud_files", + "fusion_set_auto_update", + "fusion_set_design_rules", + "fusion_set_driving_badge", + "fusion_set_parameter", + "fusion_set_preference", + "fusion_set_seat_takeover", + "fusion_set_window_sizing", + "fusion_show_2d_board", + "fusion_show_3d_board", + "fusion_show_3d_package", + "fusion_show_attributes", + "fusion_show_footprint", + "fusion_show_library", + "fusion_show_project", + "fusion_show_schematic", + "fusion_show_symbol", + "fusion_signin", + "fusion_signin_2fa", + "fusion_start", + "fusion_state", + "fusion_stop", + "fusion_take_screenshot", + "fusion_uninstall", + "fusion_verb_times", + "fusion_view", + "fusion_walk_cloud_tree", + "fusion_web_signin" + ], + "version": "1.12.0-dev.8", + "versionDrift": true, + "watcher": null + }, + { + "author": "Adom Inc.", + "category": "developer-tools", + "depsInstallingSec": null, + "description": "Bridge to Hydrogen Desktop's HTTP control API. Drives setup, the Claude workspace, WSL/container lifecycle, and read-only diagnostics via direct HTTP \u2014 no shell-out, no quote mangling. HD runs as a sibling Tauri app; AD does NOT spawn it.", + "devPinned": false, + "displayName": "Hydrogen Desktop", + "docs": "https://wiki.adom.inc/adom/adom-desktop", + "entryMismatch": false, + "entrypoint": "//?/C:/Users/drew/AppData/Local/Adom Bridge/bridges/hd/", + "expectedImage": null, + "heroAvailable": false, + "heroDocs": "https://wiki.adom.inc/adom/hydrogen-desktop", + "homepage": "https://wiki.adom.inc/adom/adom-desktop", + "installPath": "\\\\?\\C:\\Users\\drew\\AppData\\Local\\Adom Bridge\\bridges\\hd", + "installSkill": "adom-wiki pkg install adom/adom-desktop", + "installedVersion": "1.0.0", + "installedVersionSource": "cache", + "instanceCount": null, + "languages": [], + "lastSpawnError": null, + "lastUsedMs": 0, + "latest": null, + "livePids": [], + "logPath": "C:/Users/drew/.adom/bridge-logs/hd.log", + "manifestSource": "updateManifestUrl", + "manifestUrl": null, + "manifestUrlFollowed": null, + "name": "hd", + "paused": false, + "persistent": false, + "platforms": { + "linux": { + "reason": "HD currently ships Windows-only; Linux variant in scope for HD's future releases.", + "supported": false + }, + "macos": { + "reason": "HD currently ships Windows-only.", + "supported": false + }, + "windows": { + "reason": "", + "supported": true + } + }, + "port": null, + "prewarm": null, + "releasedAt": "2026-06-30T13:13:22Z", + "runningImage": null, + "runningVersion": null, + "skillPkg": "adom/adom-desktop", + "source": "bundled", + "sourceDir": "//?/C:/Users/drew/AppData/Local/Adom Bridge/bridges/hd", + "spawn": { + "entrypoint": "", + "instanceCount": null, + "kind": "external-http", + "manifestPort": 47084, + "persistent": false, + "portBlocked": null, + "runtimePort": null + }, + "spawnKind": "external-http", + "stableUrl": "http://127.0.0.1:24680/open/hd", + "status": "stopped", + "statusVerb": null, + "tags": [ + "hydrogen-desktop", + "control-api", + "http", + "lifecycle" + ], + "timeouts": null, + "updateAvailable": false, + "usageScore": 0.0, + "verbCount": 11, + "verbPrefixes": [], + "verbs": [ + "hd_api", + "hd_status", + "hd_launch", + "hd_stop", + "hd_restart", + "hd_log", + "hd_screenshot", + "hd_shot", + "hd_open_url", + "hd_browser_profiles", + "hd_ship" + ], + "version": "1.0.0", + "versionDrift": false, + "watcher": null + }, + { + "author": "Adom Inc.", + "category": "EDA", + "depsInstallingSec": null, + "description": "Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.", + "devPinned": false, + "displayName": "KiCad EDA", + "docs": "https://wiki.adom.inc/adom/kicad-bridge", + "entryMismatch": false, + "entrypoint": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/kicad/kicad-bridge.exe", + "expectedImage": "kicad-bridge.exe", + "heroAvailable": false, + "heroDocs": null, + "homepage": "https://wiki.adom.inc/adom/adom-bridge", + "installPath": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/kicad", + "installSkill": "adom-wiki pkg install adom/kicad-bridge", + "installedVersion": "1.0.55", + "installedVersionSource": "cache", + "instanceCount": 1, + "languages": [ + "Python", + "PowerShell" + ], + "lastSpawnError": null, + "lastUsedMs": 1790956354547, + "latest": "1.0.55", + "livePids": [ + 36872 + ], + "logPath": "C:/Users/drew/.adom/bridge-logs/kicad.log", + "manifestSource": "insidersManifestUrl", + "manifestUrl": "https://wiki.adom.inc/api/v1/pages/kicad-bridge/files/adom-bridge-kicad-manifest.json", + "manifestUrlFollowed": null, + "name": "kicad", + "paused": false, + "persistent": false, + "platforms": { + "linux": { + "reason": "", + "supported": false + }, + "macos": { + "reason": "", + "supported": false + }, + "windows": { + "reason": "", + "supported": true + } + }, + "port": 60896, + "prewarm": { + "assets": [ + "kicad-cli warm (detection)", + "KiCad first-run config + setup wizard marked done", + "KiCad's own taskbar shortcut identity" + ], + "lastRun": { + "at": "2026-10-05T15:41:58Z", + "elapsedMs": 273, + "error": null, + "ok": false, + "verb": "kicad_prewarm", + "version": "1.0.55" + }, + "requiresHostApp": true, + "timeoutSeconds": null, + "verb": "kicad_prewarm" + }, + "releasedAt": "2026-06-26T16:00:00Z", + "runningImage": "kicad-bridge.exe", + "runningVersion": "1.0.55", + "skillPkg": "adom/kicad-bridge", + "source": "cache", + "sourceDir": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/kicad", + "spawn": { + "entrypoint": "kicad-bridge.exe", + "instanceCount": 1, + "kind": "exe", + "manifestPort": 0, + "persistent": false, + "portBlocked": null, + "runtimePort": 60896 + }, + "spawnKind": "exe", + "stableUrl": "http://127.0.0.1:24680/open/kicad", + "status": "running", + "statusVerb": "kicad_status", + "tags": [ + "pcb", + "schematic", + "open-source", + "kicad-10", + "kicad-11-ready" + ], + "timeouts": { + "default": 130, + "prefixes": [], + "verbs": { + "autoroute": 900, + "demo": 600, + "enable_software_opengl": 240, + "export_gerber": 210, + "export_molecule": 420, + "export_pdf": 180, + "export_step": 300, + "export_svg": 180, + "format_upgrade": 180, + "freerouting": 900, + "open_3d_viewer": 300, + "prewarm": 120, + "run_drc": 300, + "run_erc": 300, + "upgrade": 900 + } + }, + "updateAvailable": false, + "usageScore": 1039.3524135655607, + "verbCount": 119, + "verbPrefixes": [ + "kicad_" + ], + "verbs": [ + "kicad_describe", + "kicad_status", + "kicad_readiness", + "kicad_list_versions", + "kicad_diagnostics", + "kicad_run_drc", + "kicad_run_erc", + "kicad_export_gerber", + "kicad_export_pdf", + "kicad_export_svg", + "kicad_export_step", + "kicad_export_bom_csv", + "kicad_uninstall", + "kicad_extract_netlist", + "kicad_trace_net", + "kicad_find_connections", + "kicad_analyze_connections", + "kicad_lint_board", + "kicad_lint_schematic", + "kicad_lint_library", + "kicad_format_upgrade", + "kicad_list_symbols", + "kicad_list_footprints", + "kicad_adom_library_status", + "kicad_get_settings", + "kicad_set_settings", + "kicad_list_design_rules", + "kicad_set_design_rules", + "kicad_3d_viewer_settings", + "kicad_taskbar_repair", + "kicad_prewarm", + "kicad_model_check", + "kicad_pcm_list", + "kicad_pcm_install", + "kicad_pcm_uninstall", + "kicad_pcm_add_repository", + "kicad_pcm_remove_repository", + "kicad_check_for_updates", + "kicad_upgrade", + "kicad_sch_place_symbol", + "kicad_sch_wire", + "kicad_sch_label", + "kicad_sch_move", + "kicad_sch_delete", + "kicad_sch_set_property", + "kicad_ipc_api", + "kicad_export_molecule", + "kicad_errors", + "kicad_log_tail", + "kicad_bridge_status", + "kicad_bridge_call", + "kicad_install_plugin", + "kicad_plugin_diagnose", + "kicad_install_library", + "kicad_uninstall_library", + "kicad_install_symbol", + "kicad_install_footprint", + "kicad_install_library_bundle", + "kicad_adom_library_heal", + "kicad_make_part_project", + "kicad_export_part", + "kicad_silk_fields_batch", + "kicad_silk_graphics_batch", + "kicad_text_bounds", + "kicad_silk_text_batch", + "kicad_routing_state", + "kicad_route_net", + "kicad_remove_route", + "kicad_add_zone", + "kicad_apply_zone_plan", + "kicad_zone_state", + "kicad_select_net", + "kicad_select_clear", + "kicad_remove_zone", + "kicad_routing_validate", + "kicad_board_pads", + "kicad_add_track", + "kicad_add_via", + "kicad_route", + "kicad_autoroute", + "kicad_freerouting", + "kicad_placement_state", + "kicad_move_footprint", + "kicad_placement_validate", + "kicad_refresh_board_views", + "kicad_launch", + "kicad_open_board", + "kicad_open_schematic", + "kicad_open_symbol_editor", + "kicad_open_footprint_editor", + "kicad_menu_items", + "kicad_3d_view", + "kicad_open_3d_viewer", + "kicad_open_editors", + "kicad_close", + "kicad_close_symbol_editor", + "kicad_close_footprint_editor", + "kicad_close_3d_viewer", + "kicad_dismiss_dialogs", + "kicad_window_info", + "kicad_state", + "kicad_screenshot_all", + "kicad_send_key", + "kicad_click", + "kicad_fix_keyboard", + "kicad_place_footprint", + "kicad_enable_software_opengl", + "kicad_rescan_libraries", + "kicad_show_project", + "kicad_show_symbol", + "kicad_show_footprint", + "kicad_show_3d_chip", + "kicad_show_schematic", + "kicad_show_2d_board", + "kicad_show_3d_board", + "kicad_show_library", + "kicad_progress", + "kicad_verb_times", + "kicad_demo" + ], + "version": "1.0.55", + "versionDrift": false, + "watcher": { + "configKey": "project_watch", + "defaultGlobs": [ + "*.kicad_pcb", + "*.kicad_sch", + "*.kicad_pro" + ], + "description": "Monitors a KiCad project folder for file changes and syncs them to Docker. Configured via the set_project_watch / trigger_project_watch verbs (AD core owns the watcher; the KiCad section of AD's Settings panel was removed in AD 1.9.117 \u2014 the config keys are still honored).", + "displayName": "Project Watch", + "supports": true + } + }, + { + "author": "Adom Inc.", + "category": "Browser Automation", + "depsInstallingSec": null, + "description": "Drives the user's REAL signed-in Chrome/Edge, in two layers. Layer 1 (nb) needs NOTHING installed and works on any machine: nbrowser_open_os_window (open a URL in the user's real profile, background+flashing, the OAuth/consent path), nbrowser_os_windows, nbrowser_profiles, nbrowser_wake_profile, nbrowser_force_close. Layer 2 (nbe, the Adom Native Browser Extension) unlocks the rest: CDP driving (navigate/click/read/screenshot) inside their logged-in profile. The bridge binds an ephemeral loopback port and the native-messaging host pumps stdio <-> bridge.", + "devPinned": false, + "displayName": "Adom Native Browser", + "docs": "https://wiki.adom.inc/adom/nb-bridge", + "entryMismatch": false, + "entrypoint": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/native-browser/server.js", + "expectedImage": "node.exe", + "heroAvailable": false, + "heroDocs": null, + "homepage": "https://wiki.adom.inc/adom/nb-bridge", + "installPath": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/native-browser", + "installSkill": "adom-wiki pkg install adom/nb-bridge", + "installedVersion": "0.16.33", + "installedVersionSource": "cache", + "instanceCount": 1, + "languages": [ + "Node/JS" + ], + "lastSpawnError": null, + "lastUsedMs": 1791220671752, + "latest": "0.16.33", + "livePids": [ + 32228 + ], + "logPath": "C:/Users/drew/.adom/bridge-logs/native-browser.log", + "manifestSource": "insidersManifestUrl", + "manifestUrl": "https://wiki.adom.inc/api/pages/adom/nb-bridge/files/native-browser-bridge-manifest.json", + "manifestUrlFollowed": null, + "name": "native-browser", + "paused": false, + "persistent": true, + "platforms": { + "linux": { + "reason": "Pending; bridge + host are OS-agnostic Node, only the install/registration layer is Windows-specific.", + "supported": false + }, + "macos": { + "reason": "Windows-first; Kyle ports to macOS as a fast-follow (NativeMessagingHosts live under ~/Library/Application Support//NativeMessagingHosts; bridge/host are OS-agnostic Node).", + "supported": false + }, + "windows": { + "reason": "", + "supported": true + } + }, + "port": 51703, + "prewarm": { + "assets": [], + "lastRun": { + "at": "2026-09-22T19:44:55Z", + "elapsedMs": 41, + "error": null, + "ok": true, + "verb": "nbrowser_prewarm", + "version": "0.16.33" + }, + "requiresHostApp": false, + "timeoutSeconds": null, + "verb": "nbrowser_prewarm" + }, + "releasedAt": "2026-09-22T15:18:44Z", + "runningImage": "node.exe", + "runningVersion": "0.16.33", + "skillPkg": "adom/nb-bridge", + "source": "cache", + "sourceDir": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/native-browser", + "spawn": { + "entrypoint": "server.js", + "instanceCount": 1, + "kind": "node", + "manifestPort": 0, + "persistent": true, + "portBlocked": null, + "runtimePort": 51703 + }, + "spawnKind": "node", + "stableUrl": "http://127.0.0.1:24680/open/native-browser", + "status": "running", + "statusVerb": "nbrowser_status", + "tags": [ + "nb", + "nbe", + "native-browser", + "chrome", + "edge", + "nbrowser", + "pup-parity" + ], + "timeouts": { + "default": 60, + "prefixes": [ + { + "prefix": "screenshot", + "seconds": 120 + }, + { + "prefix": "record", + "seconds": 120 + } + ], + "verbs": { + "fetch_url": 120, + "input_dispatch": 120, + "select": 30, + "wait": 125 + } + }, + "updateAvailable": false, + "usageScore": 918.4421358581012, + "verbCount": 88, + "verbPrefixes": [ + "nbrowser_" + ], + "verbs": [ + "nbrowser_status", + "nbrowser_readiness", + "nbrowser_install_chrome", + "nbrowser_prewarm", + "nbrowser_chrome_status", + "nbrowser_ping", + "nbrowser_progress", + "nbrowser_activity", + "nbrowser_open_window", + "nbrowser_close_window", + "nbrowser_owned", + "nbrowser_cleanup", + "nbrowser_force_close", + "nbrowser_switch_window", + "nbrowser_list_windows", + "nbrowser_window_state", + "nbrowser_fullscreen", + "nbrowser_login_state", + "nbrowser_credentials", + "nbrowser_profiles", + "nbrowser_use_profile", + "nbrowser_pin_session", + "nbrowser_open_os_window", + "nbrowser_os_windows", + "nbrowser_wake_profile", + "nbrowser_resolve_profiles", + "nbrowser_whoami", + "nbrowser_profile_block", + "nbrowser_profile_unblock", + "nbrowser_rescan", + "nbrowser_resync_sessions", + "nbrowser_open_tab", + "nbrowser_close_tab", + "nbrowser_switch_tab", + "nbrowser_list_tabs", + "nbrowser_navigate", + "nbrowser_reload", + "nbrowser_back", + "nbrowser_forward", + "nbrowser_wait", + "nbrowser_wait_for", + "nbrowser_keepalive", + "nbrowser_screenshot", + "nbrowser_screenshot_full_res", + "nbrowser_eval", + "nbrowser_evaluate", + "nbrowser_input_dispatch", + "nbrowser_scroll", + "nbrowser_click", + "nbrowser_select", + "nbrowser_set_file_input", + "nbrowser_set_date", + "nbrowser_totp", + "nbrowser_register_totp", + "nbrowser_add_extension_origin", + "nbrowser_type", + "nbrowser_press_key", + "nbrowser_fetch_url", + "nbrowser_download_wait", + "nbrowser_errors", + "nbrowser_close", + "nbrowser_record_start", + "nbrowser_record_stop", + "nbrowser_record_status", + "nbrowser_record_list", + "nbrowser_flash", + "nbrowser_flash_stop", + "nbrowser_apply_settings", + "nbrowser_settings", + "nbrowser_flash_mode", + "nbrowser_taskbar", + "nbrowser_describe", + "nbrowser_handle_dialog", + "nbrowser_state", + "nbrowser_demo", + "nbrowser_uninstall", + "nbrowser_dev_reload", + "nbrowser_clear_cookies", + "nbrowser_caption", + "nbrowser_focus", + "nbrowser_hover", + "nbrowser_double_click", + "nbrowser_right_click", + "nbrowser_login_form", + "nbrowser_autologin", + "nbrowser_cursor", + "nbrowser_events", + "nbrowser_download" + ], + "version": "0.16.33", + "versionDrift": false, + "watcher": null + }, + { + "author": "Adom Inc.", + "category": "Manufacturing", + "depsInstallingSec": null, + "description": "The Adom Desktop bridge for the Essemtec Puma / ePlace. Reads + dry-run: machine state, recipe/package/component/feeder reads, the full feeder fleet from Supply/Feeder/*.feeder.xml, and dry-run of any WriteOp (preflight + physics-bounds + unified diff). F4 adds puma_write \u2014 GATED production writes of FileWrite.* library objects to real XML files under --data-folder (atomic write + XML-verify + audit; approver enforced; refused when the machine is Productive), plus puma_revert \u2014 canonical revert of a prior write by correlationId (CAS-pinned to the recorded result hash, its own audit entry, same write gate). Off by default: requires --enable-writes. eData stays vendor-read-only. 0.2.5: puma_feeders binds each loaded lane to its component/part number (carrierType, componentName, partValue, packageName, componentBarcode) via the Supply/Carrier -> Component library chain (#639). 0.2.6: the write audit records ab's X-Adom-Verified-Origin (relay | local | bridge, plus the X-Adom-Caller-Delegate chain for a bridge callback; a missing header records as local-unattributed) beside the approver \u2014 attribution, never a gate. New puma_write_status (declared as statusVerb): what happened to a write by correlationId, so a caller whose transport timed out polls instead of declaring the write unknown. 0.2.7: the host is a GUI-subsystem exe (no console window of its own) and its git subprocess runs with CreateNoWindow, so the bridge can never leave a conhost window on the desktop across ab respawns or reinstalls.", + "devPinned": false, + "displayName": "Puma Bridge (Essemtec ePlace)", + "docs": "https://wiki.adom.inc/adom/puma-bridge", + "entryMismatch": false, + "entrypoint": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puma-bridge/puma-bridge-host.exe", + "expectedImage": "puma-bridge-host.exe", + "heroAvailable": false, + "heroDocs": null, + "homepage": "https://wiki.adom.inc/adom/puma-bridge", + "installPath": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puma-bridge", + "installSkill": "adom-wiki pkg install adom/puma-bridge", + "installedVersion": "0.2.7", + "installedVersionSource": "cache", + "instanceCount": 1, + "languages": [ + "Binary" + ], + "lastSpawnError": null, + "lastUsedMs": 1790623763822, + "latest": "0.2.6", + "livePids": [ + 32008 + ], + "logPath": "C:/Users/drew/.adom/bridge-logs/puma-bridge.log", + "manifestSource": "updateManifestUrl", + "manifestUrl": "https://wiki.adom.inc/api/v1/pages/adom/puma-bridge/files/adom-bridge-puma-manifest.json", + "manifestUrlFollowed": null, + "name": "puma-bridge", + "paused": false, + "persistent": true, + "platforms": { + "linux": { + "reason": "", + "supported": true + }, + "macos": { + "reason": "", + "supported": false + }, + "windows": { + "reason": "", + "supported": true + } + }, + "port": 64764, + "prewarm": null, + "releasedAt": "2026-09-23T15:54:11Z", + "runningImage": "puma-bridge-host.exe", + "runningVersion": "0.2.7", + "skillPkg": "adom/puma-bridge", + "source": "cache", + "sourceDir": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puma-bridge", + "spawn": { + "entrypoint": "puma-bridge-host.exe", + "instanceCount": 1, + "kind": "exe", + "manifestPort": 0, + "persistent": true, + "portBlocked": null, + "runtimePort": 64764 + }, + "spawnKind": "exe", + "stableUrl": "http://127.0.0.1:24680/open/puma-bridge", + "status": "running", + "statusVerb": "puma_write_status", + "tags": [ + "smt", + "essemtec", + "puma", + "eplace", + "pick-and-place", + "manufacturing", + "factoryos" + ], + "timeouts": null, + "updateAvailable": false, + "usageScore": 2.695126649463196, + "verbCount": 9, + "verbPrefixes": [ + "puma_" + ], + "verbs": [ + "puma_ping", + "puma_state", + "puma_get", + "puma_feeders", + "puma_dryrun", + "puma_write", + "puma_revert", + "puma_write_status", + "puma_describe" + ], + "version": "0.2.7", + "versionDrift": false, + "watcher": null + }, + { + "author": "Adom Inc.", + "category": "Browser Automation", + "depsInstallingSec": null, + "description": "Drives a browser ALREADY on the machine \u2014 installed Chrome, else Microsoft Edge (every Windows PC ships with Edge) \u2014 launched with a FRESH isolated profile, so the common case has NO ~150 MB Chrome-for-Testing download and it never touches the user's real tabs/logins. Binds its local server to LOOPBACK (127.0.0.1) only, so no Windows Firewall 'allow Node through the firewall' prompt ever pops. Chrome for Testing is fetched only as a LAST RESORT if the machine has no Chromium browser at all. SPAWN-VERIFIED fallback: pup tries each detected browser (Chrome \u2192 Edge \u2192 CfT) and actually launches it, falling through to the next if one won't start (and handling browsers like Edge that relaunch onto another PID), so a corrupt/partial install never hard-fails an open. The browser that launches is cached as the default (persisted across restarts) so it isn't re-probed each time. On spawn the bridge SELF-WARMS: detects browsers + disk, and only if the box has no Chrome/Edge and no cached CfT does it background-fetch CfT so the first open is instant. pup_use pins a specific browser (chrome | edge | cft | auto); {browser:'chrome',install:true} downloads & installs REAL Google Chrome (user-scoped, no admin) on an Edge-only box. pup_readiness (READ-ONLY) reports which browser will be used + the full candidate list + the default + free disk. Every failure returns a specific errorCode + _hint (chrome_install_no_disk, chrome_download_network, chrome_install_permission, chrome_stable_not_detected, \u2026). Launches with FULL browser permissions by default for full debug (strictPermissions:true opts out). Headful automation: open/close windows+tabs, navigate, screenshot, eval JS, record. pup is a GENERIC, non-profile browser only \u2014 every session is a fresh isolated Chrome/Edge process, never the user's real signed-in browser; profile defaults to sessionId. To drive the user's REAL Chrome/Edge (their profile, cookies, SSO), use the Adom browser EXTENSION's nbrowser_* verbs \u2014 a separate bridge, not pup's job. macOS (v1.9.74+): full parity with mac-native mechanics \u2014 background-by-default is the app-level hide (windows stay drivable/screenshottable while hidden), raise/lower map to unhide+activate/hide, pup_alert_window posts a native toast whose click focuses the window, pup_use {browser:'chrome',install:true} installs Chrome from the official dmg, and taskbar identity/badging remains Windows-only.", + "devPinned": false, + "displayName": "Puppeteer (Chrome for Testing + Native)", + "docs": "https://wiki.adom.inc/adom/pup-bridge", + "entryMismatch": false, + "entrypoint": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puppeteer/adom-pup-bridge.exe", + "expectedImage": "adom-pup-bridge.exe", + "heroAvailable": false, + "heroDocs": null, + "homepage": "https://wiki.adom.inc/adom/adom-bridge", + "installPath": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puppeteer", + "installSkill": "adom-wiki pkg install adom/pup-bridge", + "installedVersion": "2.0.697", + "installedVersionSource": "cache", + "instanceCount": 1, + "languages": [ + "Binary" + ], + "lastSpawnError": null, + "lastUsedMs": 1791212202067, + "latest": "2.0.697", + "livePids": [ + 68812 + ], + "logPath": "C:/Users/drew/.adom/bridge-logs/puppeteer.log", + "manifestSource": "insidersManifestUrl", + "manifestUrl": "https://wiki.adom.inc/api/v1/pages/pup-bridge/files/adom-bridge-puppeteer-manifest.json", + "manifestUrlFollowed": null, + "name": "puppeteer", + "paused": false, + "persistent": true, + "platforms": { + "linux": { + "reason": "not yet", + "supported": false + }, + "macos": { + "reason": "The Rust exe is Windows-only for now; host-mac is stubbed for the Mac port. macOS runs the Node build (public tier).", + "supported": false + }, + "windows": { + "reason": "", + "supported": true + } + }, + "port": 57134, + "prewarm": { + "assets": [ + "chrome-for-testing" + ], + "lastRun": { + "at": "2026-10-05T14:55:58Z", + "elapsedMs": 1409, + "error": null, + "ok": true, + "verb": "pup_prewarm", + "version": "2.0.697" + }, + "requiresHostApp": false, + "timeoutSeconds": 900, + "verb": "pup_prewarm" + }, + "releasedAt": "2026-10-05T14:55:48Z", + "runningImage": "adom-pup-bridge.exe", + "runningVersion": "2.0.697", + "skillPkg": "adom/pup-bridge", + "source": "cache", + "sourceDir": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/puppeteer", + "spawn": { + "entrypoint": "adom-pup-bridge.exe", + "instanceCount": 1, + "kind": "exe", + "manifestPort": 8851, + "persistent": true, + "portBlocked": null, + "runtimePort": 57134 + }, + "spawnKind": "exe", + "stableUrl": "http://127.0.0.1:24680/open/puppeteer", + "status": "running", + "statusVerb": "pup_readiness", + "tags": [ + "puppeteer", + "chrome", + "headful", + "recording" + ], + "timeouts": { + "default": 60, + "prefixes": [ + { + "prefix": "record", + "seconds": 90 + } + ], + "verbs": { + "credential_reveal": 150, + "fill_card": 150, + "open_window": 150, + "prewarm": 240, + "use": 240 + } + }, + "updateAvailable": false, + "usageScore": 580.902320825431, + "verbCount": 97, + "verbPrefixes": [ + "pup_", + "browser_" + ], + "verbs": [ + "pup_describe", + "pup_readiness", + "pup_prewarm", + "pup_status", + "pup_list_windows", + "pup_my_windows", + "pup_list_sessions", + "pup_open_window", + "pup_navigate", + "pup_eval", + "pup_evaluate", + "pup_screenshot", + "pup_close_window", + "pup_close", + "pup_close_all_windows", + "pup_window_info", + "pup_open_tab", + "pup_list_tabs", + "pup_switch_tab", + "pup_close_tab", + "pup_switch_window", + "pup_click", + "pup_select", + "pup_hover", + "pup_type", + "pup_press_key", + "pup_scroll", + "pup_fill", + "pup_wait", + "pup_reload", + "pup_back", + "pup_forward", + "pup_set_viewport", + "pup_errors", + "pup_dialog", + "pup_input_dispatch", + "pup_render_html", + "pup_fetch_url", + "pup_maximize", + "pup_raise_os_window", + "pup_focus_window", + "pup_lower_os_window", + "pup_alert_window", + "pup_progress", + "pup_configure", + "pup_use", + "pup_clear_cookies", + "pup_clear_site_data", + "pup_quit_idle_browsers", + "pup_rescan", + "pup_restart_browser", + "pup_set_identity", + "pup_audit_icons", + "pup_dashboard", + "pup_credentials", + "credential_list", + "credential_set", + "credential_delete", + "pup_login", + "pup_google_accounts", + "pup_google_signin", + "pup_credential_reveal", + "pup_card_set", + "pup_cards", + "pup_card_delete", + "pup_fill_card", + "pup_wiki_set_view", + "pup_annotate", + "pup_floaty_click", + "pup_record_start", + "pup_record_stop", + "pup_record_status", + "pup_record_list", + "pup_recorder_open", + "pup_recorder_close", + "pup_screen_record_start", + "pup_screen_record_stop", + "pup_screen_record_status", + "pup_screen_record_list", + "pup_highfps_extend", + "pup_screenshot_element", + "pup_screenshot_full_res", + "pup_download", + "pup_launch", + "pup_deps", + "pup_install_toolbar", + "pup_reap_profiles", + "pup_cache_prune", + "pup_sweep_identities", + "pup_uninstall", + "pup_move_to_workspace", + "pup_assisted_click", + "pup_import_scan", + "pup_import_browser_logins", + "pup_vault_sync", + "pup_vault_export", + "pup_vault_import" + ], + "version": "2.0.697", + "versionDrift": false, + "watcher": null + }, + { + "author": "Adom Inc.", + "category": "MCAD", + "depsInstallingSec": null, + "description": "Bridge for SOLIDWORKS desktop CAD \u2014 create and open documents, a modeling DSL, file management (find/open/save/export/Pack and Go), custom properties, BOM generation, design analysis (mass properties, bodies, parameters, interference, rebuild health) and background window/dialog etiquette, over the SOLIDWORKS COM API. Single native binary: no interpreter, no PowerShell, ~10ms cold start.", + "devPinned": false, + "displayName": "SOLIDWORKS", + "docs": "https://wiki.adom.inc/adom/solidworks-bridge", + "entryMismatch": false, + "entrypoint": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/solidworks/swx-bridge.exe", + "expectedImage": "swx-bridge.exe", + "heroAvailable": false, + "heroDocs": null, + "homepage": "https://wiki.adom.inc/adom/adom-bridge", + "installPath": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/solidworks", + "installSkill": "adom-wiki pkg install adom/solidworks-bridge", + "installedVersion": "0.9.21", + "installedVersionSource": "cache", + "instanceCount": 0, + "languages": [ + "Binary" + ], + "lastSpawnError": null, + "lastUsedMs": 1791224978746, + "latest": "0.9.19", + "livePids": [], + "logPath": "C:/Users/drew/.adom/bridge-logs/solidworks.log", + "manifestSource": "updateManifestUrl", + "manifestUrl": "https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/adom-bridge-solidworks-manifest.json", + "manifestUrlFollowed": null, + "name": "solidworks", + "paused": false, + "persistent": false, + "platforms": { + "linux": { + "reason": "SOLIDWORKS desktop is Windows-only; the bridge drives its COM API.", + "supported": false + }, + "macos": { + "reason": "SOLIDWORKS desktop is Windows-only; the bridge drives its COM API.", + "supported": false + }, + "windows": { + "reason": "", + "supported": true + } + }, + "port": 49861, + "prewarm": null, + "releasedAt": "2026-10-05T18:49:46Z", + "runningImage": null, + "runningVersion": "0.9.19", + "skillPkg": "adom/solidworks-bridge", + "source": "cache", + "sourceDir": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/solidworks", + "spawn": { + "entrypoint": "swx-bridge.exe", + "instanceCount": 0, + "kind": "exe", + "manifestPort": 0, + "persistent": false, + "portBlocked": null, + "runtimePort": 49861 + }, + "spawnKind": "exe", + "stableUrl": "http://127.0.0.1:24680/open/solidworks", + "status": "running", + "statusVerb": "swx_status", + "tags": [ + "solidworks", + "mcad", + "cad", + "bom", + "step", + "mass-properties", + "modeling", + "fusion-parity" + ], + "timeouts": { + "default": 120, + "prefixes": [], + "verbs": { + "action_ledger": 20, + "activate_document": 180, + "bom": 300, + "check_recovery": 180, + "close_all_documents": 240, + "close_all_safely": 600, + "close_doc": 180, + "close_import_temps": 600, + "close_window": 120, + "cloud_status": 90, + "design_info": 180, + "dismiss_blocking_dialogs": 180, + "document_info": 120, + "export": 300, + "export_3mf": 300, + "export_dwg": 300, + "export_dxf": 300, + "export_glb": 300, + "export_iges": 300, + "export_parasolid": 300, + "export_pdf": 300, + "export_sat": 300, + "export_step": 300, + "export_stl": 300, + "find_files": 180, + "get_app_state": 90, + "get_parameters": 240, + "get_preferences": 90, + "import": 420, + "inspect_bodies": 180, + "interference": 600, + "kill": 240, + "new_document": 180, + "open": 300, + "pack_and_go": 600, + "rebuild_check": 300, + "render_image": 600, + "reset_workspace": 600, + "run_script": 420, + "save_as": 420, + "set_driving_badge": 120, + "set_parameter": 420, + "set_preference": 90, + "show_assembly": 600, + "show_drawing": 600, + "show_part": 600, + "shutdown": 900, + "sign_in": 240, + "start": 300, + "state": 180, + "stop": 420, + "verb_times": 20, + "window_info": 120 + } + }, + "updateAvailable": false, + "usageScore": 562.1398322742835, + "verbCount": 69, + "verbPrefixes": [ + "swx_" + ], + "verbs": [ + "swx_action_ledger", + "swx_activate_document", + "swx_add_component", + "swx_bom", + "swx_check_recovery", + "swx_close_all_documents", + "swx_close_all_safely", + "swx_close_doc", + "swx_close_import_temps", + "swx_close_window", + "swx_cloud_status", + "swx_com_eval", + "swx_describe", + "swx_design_info", + "swx_dismiss_blocking_dialogs", + "swx_docs", + "swx_document_info", + "swx_export", + "swx_export_3mf", + "swx_export_dwg", + "swx_export_dxf", + "swx_export_glb", + "swx_export_iges", + "swx_export_parasolid", + "swx_export_pdf", + "swx_export_sat", + "swx_export_step", + "swx_export_stl", + "swx_find_files", + "swx_get_app_state", + "swx_get_parameters", + "swx_get_preferences", + "swx_import", + "swx_inspect_bodies", + "swx_interference", + "swx_kill", + "swx_mass_properties", + "swx_new_document", + "swx_open", + "swx_pack_and_go", + "swx_progress", + "swx_props_get", + "swx_props_set", + "swx_readiness", + "swx_rebuild_check", + "swx_recover_list", + "swx_render_image", + "swx_reset_workspace", + "swx_run_macro", + "swx_run_script", + "swx_save", + "swx_save_as", + "swx_screenshot", + "swx_set_driving_badge", + "swx_set_parameter", + "swx_set_preference", + "swx_show_assembly", + "swx_show_drawing", + "swx_show_part", + "swx_shutdown", + "swx_sign_in", + "swx_start", + "swx_state", + "swx_status", + "swx_stop", + "swx_uninstall", + "swx_user_presence", + "swx_verb_times", + "swx_window_info" + ], + "version": "0.9.21", + "versionDrift": true, + "watcher": null + } + ], + "current_os": "windows", + "durationMs": 16, + "error": "", + "invalidCount": 0, + "ok": true, + "output": "", + "schemaVersion": 1, + "staleCheckedAt": 1791215191, + "status": "ok", + "success": true, + "summary": { + "bundled": 1, + "cache": 6, + "invalid": 0, + "paused": 0, + "third_party": 0, + "total": 7 + }, + "timeoutSeconds": 10 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/ordinary/calls/0004-run_script.json b/docs/mechanical-verification/cp8/ordinary/calls/0004-run_script.json new file mode 100644 index 0000000..1d51c09 --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/calls/0004-run_script.json @@ -0,0 +1,31 @@ +{ + "target": "adom_drew2", + "verb": "run_script", + "args": { + "interpreter": "powershell", + "scriptB64": "CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcmFscGhFeHBlY3RlZCA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUpvYjNOMElqb2dJa0ZFVDAxZlJGSkZWeklpTENBaWNHbGtJam9nTkRJM09EQXNJQ0p3YjNKMElqb2dOVEEyTVRnc0lDSmxlR1ZqZFhSaFlteGxVR0YwYUNJNklDSkRPbHhjVlhObGNuTmNYR1J5WlhkY1hFRndjRVJoZEdGY1hFeHZZMkZzWEZ4QlpHOXRJRUp5YVdSblpWeGNZbkpwWkdkbGN5MWpZV05vWlZ4Y1puVnphVzl1TXpZd1hGeGhaRzl0TFdaMWMybHZiaTFpY21sa1oyVXVaWGhsSWl3Z0ltbHRZV2RsSWpvZ0ltRmtiMjB0Wm5WemFXOXVMV0p5YVdSblpTNWxlR1VpZlE9PScpKSB8IENvbnZlcnRGcm9tLUpzb24KICAkcmFscGhQb3J0ID0gW2ludF0kcmFscGhFeHBlY3RlZC5wb3J0CiAgJHJhbHBoT3duZXIgPSBbaW50XSRyYWxwaEV4cGVjdGVkLnBpZAogIGlmIChbRW52aXJvbm1lbnRdOjpNYWNoaW5lTmFtZSAtaW5lIFtzdHJpbmddJHJhbHBoRXhwZWN0ZWQuaG9zdCkgeyB0aHJvdyAnTmF0aXZlIGhvc3QgaWRlbnRpdHkgZGlmZmVycycgfQogICRyYWxwaFByb2Nlc3MgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyAkcmFscGhPd25lcikKICBpZiAoLW5vdCAkcmFscGhQcm9jZXNzIC1vciAkcmFscGhQcm9jZXNzLk5hbWUgLWluZSBbc3RyaW5nXSRyYWxwaEV4cGVjdGVkLmltYWdlKSB7IHRocm93ICdJbnZlbnRvcnkgUElEL2ltYWdlIGlzIG5vdCB0aGUgbmF0aXZlIGJyaWRnZScgfQogIGlmIChbSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRyYWxwaFByb2Nlc3MuRXhlY3V0YWJsZVBhdGgpIC1pbmUgW0lPLlBhdGhdOjpHZXRGdWxsUGF0aChbc3RyaW5nXSRyYWxwaEV4cGVjdGVkLmV4ZWN1dGFibGVQYXRoKSkgeyB0aHJvdyAnTmF0aXZlIGV4ZWN1dGFibGUgcGF0aCBkaWZmZXJzIGZyb20gaW52ZW50b3J5JyB9CiAgJHJhbHBoTGlzdGVuZXJzID0gQChHZXQtTmV0VENQQ29ubmVjdGlvbiAtU3RhdGUgTGlzdGVuIC1Mb2NhbFBvcnQgJHJhbHBoUG9ydCkKICBpZiAoJHJhbHBoTGlzdGVuZXJzLkNvdW50IC1lcSAwKSB7IHRocm93ICdEaXNjb3ZlcmVkIHBvcnQgaGFzIG5vIGxpc3RlbmVyJyB9CiAgZm9yZWFjaCAoJHJhbHBoTGlzdGVuZXIgaW4gJHJhbHBoTGlzdGVuZXJzKSB7CiAgICBpZiAoJHJhbHBoTGlzdGVuZXIuT3duaW5nUHJvY2VzcyAtbmUgJHJhbHBoT3duZXIgLW9yICRyYWxwaExpc3RlbmVyLkxvY2FsQWRkcmVzcyAtbm90aW4gQCgnMTI3LjAuMC4xJywnOjoxJykpIHsgdGhyb3cgJ0xpc3RlbmVyIGlzIG5vdCBvd25lZCBieSB0aGUgZXhwZWN0ZWQgbG9vcGJhY2sgYnJpZGdlJyB9CiAgfQogICRyYWxwaEhlYWx0aCA9IEludm9rZS1SZXN0TWV0aG9kIC1VcmkgKCdodHRwOi8vMTI3LjAuMC4xOicgKyAkcmFscGhQb3J0ICsgJy9oZWFsdGgnKSAtTWV0aG9kIEdldCAtVGltZW91dFNlYyA4CiAgJHJhbHBoQWdhaW4gPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyAkcmFscGhPd25lcikKICBpZiAoLW5vdCAkcmFscGhBZ2FpbiAtb3IgJHJhbHBoQWdhaW4uQ3JlYXRpb25EYXRlIC1uZSAkcmFscGhQcm9jZXNzLkNyZWF0aW9uRGF0ZSAtb3IgJHJhbHBoQWdhaW4uRXhlY3V0YWJsZVBhdGggLWluZSAkcmFscGhQcm9jZXNzLkV4ZWN1dGFibGVQYXRoKSB7IHRocm93ICdOYXRpdmUgcHJvY2VzcyBjaGFuZ2VkIGR1cmluZyBoZWFsdGggb2JzZXJ2YXRpb24nIH0KICAkcmFscGhMaXN0ZW5lcnNBZnRlciA9IEAoR2V0LU5ldFRDUENvbm5lY3Rpb24gLVN0YXRlIExpc3RlbiAtTG9jYWxQb3J0ICRyYWxwaFBvcnQpCiAgaWYgKCRyYWxwaExpc3RlbmVyc0FmdGVyLkNvdW50IC1lcSAwKSB7IHRocm93ICdMaXN0ZW5lciBkaXNhcHBlYXJlZCBkdXJpbmcgaGVhbHRoIG9ic2VydmF0aW9uJyB9CiAgZm9yZWFjaCAoJHJhbHBoTGlzdGVuZXIgaW4gJHJhbHBoTGlzdGVuZXJzQWZ0ZXIpIHsKICAgIGlmICgkcmFscGhMaXN0ZW5lci5Pd25pbmdQcm9jZXNzIC1uZSAkcmFscGhPd25lciAtb3IgJHJhbHBoTGlzdGVuZXIuTG9jYWxBZGRyZXNzIC1ub3RpbiBAKCcxMjcuMC4wLjEnLCc6OjEnKSkgeyB0aHJvdyAnTGlzdGVuZXIgY2hhbmdlZCBkdXJpbmcgaGVhbHRoIG9ic2VydmF0aW9uJyB9CiAgfQogIEB7IGhvc3Q9W0Vudmlyb25tZW50XTo6TWFjaGluZU5hbWU7IHBpZD0kcmFscGhPd25lcjsgcG9ydD0kcmFscGhQb3J0OyBleGVjdXRhYmxlUGF0aD0kcmFscGhQcm9jZXNzLkV4ZWN1dGFibGVQYXRoOwogICAgIGltYWdlPSRyYWxwaFByb2Nlc3MuTmFtZTsgcHJvY2Vzc0NyZWF0ZWRVdGM9JHJhbHBoUHJvY2Vzcy5DcmVhdGlvbkRhdGUuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKTsKICAgICBsaXN0ZW5lckFkZHJlc3Nlcz1AKCRyYWxwaExpc3RlbmVyc0FmdGVyIHwgRm9yRWFjaC1PYmplY3QgeyAkXy5Mb2NhbEFkZHJlc3MgfSk7CiAgICAgc3RhYmxlPSR0cnVlOyBoZWFsdGg9JHJhbHBoSGVhbHRoIH0gfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMTIgLUNvbXByZXNzCiAgZXhpdCAwCn0gY2F0Y2ggewogIFtDb25zb2xlXTo6RXJyb3IuV3JpdGVMaW5lKCRfLkV4Y2VwdGlvbi5NZXNzYWdlKQogIGV4aXQgMQp9Cg==", + "timeoutSeconds": 30, + "reason": "Read the discovered Fusion bridge process and its loopback health version without changing runtime state" + }, + "requestJson": "{\"interpreter\": \"powershell\", \"scriptB64\": \"CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCcKdHJ5IHsKICAkcmFscGhFeHBlY3RlZCA9IFtUZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW0NvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCdleUpvYjNOMElqb2dJa0ZFVDAxZlJGSkZWeklpTENBaWNHbGtJam9nTkRJM09EQXNJQ0p3YjNKMElqb2dOVEEyTVRnc0lDSmxlR1ZqZFhSaFlteGxVR0YwYUNJNklDSkRPbHhjVlhObGNuTmNYR1J5WlhkY1hFRndjRVJoZEdGY1hFeHZZMkZzWEZ4QlpHOXRJRUp5YVdSblpWeGNZbkpwWkdkbGN5MWpZV05vWlZ4Y1puVnphVzl1TXpZd1hGeGhaRzl0TFdaMWMybHZiaTFpY21sa1oyVXVaWGhsSWl3Z0ltbHRZV2RsSWpvZ0ltRmtiMjB0Wm5WemFXOXVMV0p5YVdSblpTNWxlR1VpZlE9PScpKSB8IENvbnZlcnRGcm9tLUpzb24KICAkcmFscGhQb3J0ID0gW2ludF0kcmFscGhFeHBlY3RlZC5wb3J0CiAgJHJhbHBoT3duZXIgPSBbaW50XSRyYWxwaEV4cGVjdGVkLnBpZAogIGlmIChbRW52aXJvbm1lbnRdOjpNYWNoaW5lTmFtZSAtaW5lIFtzdHJpbmddJHJhbHBoRXhwZWN0ZWQuaG9zdCkgeyB0aHJvdyAnTmF0aXZlIGhvc3QgaWRlbnRpdHkgZGlmZmVycycgfQogICRyYWxwaFByb2Nlc3MgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyAkcmFscGhPd25lcikKICBpZiAoLW5vdCAkcmFscGhQcm9jZXNzIC1vciAkcmFscGhQcm9jZXNzLk5hbWUgLWluZSBbc3RyaW5nXSRyYWxwaEV4cGVjdGVkLmltYWdlKSB7IHRocm93ICdJbnZlbnRvcnkgUElEL2ltYWdlIGlzIG5vdCB0aGUgbmF0aXZlIGJyaWRnZScgfQogIGlmIChbSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRyYWxwaFByb2Nlc3MuRXhlY3V0YWJsZVBhdGgpIC1pbmUgW0lPLlBhdGhdOjpHZXRGdWxsUGF0aChbc3RyaW5nXSRyYWxwaEV4cGVjdGVkLmV4ZWN1dGFibGVQYXRoKSkgeyB0aHJvdyAnTmF0aXZlIGV4ZWN1dGFibGUgcGF0aCBkaWZmZXJzIGZyb20gaW52ZW50b3J5JyB9CiAgJHJhbHBoTGlzdGVuZXJzID0gQChHZXQtTmV0VENQQ29ubmVjdGlvbiAtU3RhdGUgTGlzdGVuIC1Mb2NhbFBvcnQgJHJhbHBoUG9ydCkKICBpZiAoJHJhbHBoTGlzdGVuZXJzLkNvdW50IC1lcSAwKSB7IHRocm93ICdEaXNjb3ZlcmVkIHBvcnQgaGFzIG5vIGxpc3RlbmVyJyB9CiAgZm9yZWFjaCAoJHJhbHBoTGlzdGVuZXIgaW4gJHJhbHBoTGlzdGVuZXJzKSB7CiAgICBpZiAoJHJhbHBoTGlzdGVuZXIuT3duaW5nUHJvY2VzcyAtbmUgJHJhbHBoT3duZXIgLW9yICRyYWxwaExpc3RlbmVyLkxvY2FsQWRkcmVzcyAtbm90aW4gQCgnMTI3LjAuMC4xJywnOjoxJykpIHsgdGhyb3cgJ0xpc3RlbmVyIGlzIG5vdCBvd25lZCBieSB0aGUgZXhwZWN0ZWQgbG9vcGJhY2sgYnJpZGdlJyB9CiAgfQogICRyYWxwaEhlYWx0aCA9IEludm9rZS1SZXN0TWV0aG9kIC1VcmkgKCdodHRwOi8vMTI3LjAuMC4xOicgKyAkcmFscGhQb3J0ICsgJy9oZWFsdGgnKSAtTWV0aG9kIEdldCAtVGltZW91dFNlYyA4CiAgJHJhbHBoQWdhaW4gPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2VzcyAtRmlsdGVyICgnUHJvY2Vzc0lkPScgKyAkcmFscGhPd25lcikKICBpZiAoLW5vdCAkcmFscGhBZ2FpbiAtb3IgJHJhbHBoQWdhaW4uQ3JlYXRpb25EYXRlIC1uZSAkcmFscGhQcm9jZXNzLkNyZWF0aW9uRGF0ZSAtb3IgJHJhbHBoQWdhaW4uRXhlY3V0YWJsZVBhdGggLWluZSAkcmFscGhQcm9jZXNzLkV4ZWN1dGFibGVQYXRoKSB7IHRocm93ICdOYXRpdmUgcHJvY2VzcyBjaGFuZ2VkIGR1cmluZyBoZWFsdGggb2JzZXJ2YXRpb24nIH0KICAkcmFscGhMaXN0ZW5lcnNBZnRlciA9IEAoR2V0LU5ldFRDUENvbm5lY3Rpb24gLVN0YXRlIExpc3RlbiAtTG9jYWxQb3J0ICRyYWxwaFBvcnQpCiAgaWYgKCRyYWxwaExpc3RlbmVyc0FmdGVyLkNvdW50IC1lcSAwKSB7IHRocm93ICdMaXN0ZW5lciBkaXNhcHBlYXJlZCBkdXJpbmcgaGVhbHRoIG9ic2VydmF0aW9uJyB9CiAgZm9yZWFjaCAoJHJhbHBoTGlzdGVuZXIgaW4gJHJhbHBoTGlzdGVuZXJzQWZ0ZXIpIHsKICAgIGlmICgkcmFscGhMaXN0ZW5lci5Pd25pbmdQcm9jZXNzIC1uZSAkcmFscGhPd25lciAtb3IgJHJhbHBoTGlzdGVuZXIuTG9jYWxBZGRyZXNzIC1ub3RpbiBAKCcxMjcuMC4wLjEnLCc6OjEnKSkgeyB0aHJvdyAnTGlzdGVuZXIgY2hhbmdlZCBkdXJpbmcgaGVhbHRoIG9ic2VydmF0aW9uJyB9CiAgfQogIEB7IGhvc3Q9W0Vudmlyb25tZW50XTo6TWFjaGluZU5hbWU7IHBpZD0kcmFscGhPd25lcjsgcG9ydD0kcmFscGhQb3J0OyBleGVjdXRhYmxlUGF0aD0kcmFscGhQcm9jZXNzLkV4ZWN1dGFibGVQYXRoOwogICAgIGltYWdlPSRyYWxwaFByb2Nlc3MuTmFtZTsgcHJvY2Vzc0NyZWF0ZWRVdGM9JHJhbHBoUHJvY2Vzcy5DcmVhdGlvbkRhdGUuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKTsKICAgICBsaXN0ZW5lckFkZHJlc3Nlcz1AKCRyYWxwaExpc3RlbmVyc0FmdGVyIHwgRm9yRWFjaC1PYmplY3QgeyAkXy5Mb2NhbEFkZHJlc3MgfSk7CiAgICAgc3RhYmxlPSR0cnVlOyBoZWFsdGg9JHJhbHBoSGVhbHRoIH0gfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMTIgLUNvbXByZXNzCiAgZXhpdCAwCn0gY2F0Y2ggewogIFtDb25zb2xlXTo6RXJyb3IuV3JpdGVMaW5lKCRfLkV4Y2VwdGlvbi5NZXNzYWdlKQogIGV4aXQgMQp9Cg==\", \"timeoutSeconds\": 30, \"reason\": \"Read the discovered Fusion bridge process and its loopback health version without changing runtime state\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion mechanical Ralph", + "startedAt": 1791234190.5297577, + "mutating": false, + "stdout": "{\n \"durationMs\": 4599,\n \"exitCode\": 0,\n \"ok\": true,\n \"schemaVersion\": 1,\n \"status\": \"ok\",\n \"stderr\": \"\",\n \"stdout\": \"{\\\"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}\\r\\n\",\n \"success\": true,\n \"timedOut\": false,\n \"timeoutSeconds\": 45\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234195.147244, + "raw": { + "durationMs": 4599, + "exitCode": 0, + "ok": true, + "schemaVersion": 1, + "status": "ok", + "stderr": "", + "stdout": "{\"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}\r\n", + "success": true, + "timedOut": false, + "timeoutSeconds": 45 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/ordinary/calls/0005-fusion_document_info.json b/docs/mechanical-verification/cp8/ordinary/calls/0005-fusion_document_info.json new file mode 100644 index 0000000..482914e --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/calls/0005-fusion_document_info.json @@ -0,0 +1,62 @@ +{ + "target": "adom_drew2", + "verb": "fusion_document_info", + "args": {}, + "requestJson": "{}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion mechanical Ralph", + "startedAt": 1791234195.148322, + "mutating": false, + "stdout": "{\n \"_hint\": \"Use fusion_get_app_state to check workspace type. For exports: fusion_export_gerbers, fusion_export_bom, fusion_export_cpl, fusion_export_source (.fsch/.fbrd), fusion_export_eagle_source (.sch/.brd). Use fusion_activate_document to switch tabs.\",\n \"_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.\",\n \"data\": {\n \"activeDocument\": \"Untitled\",\n \"activeWorkspace\": \"Design\",\n \"documentName\": \"Untitled\",\n \"isCloudDocument\": false,\n \"isSaved\": false,\n \"openDocumentCount\": 1,\n \"openDocuments\": [\n {\n \"documentType\": \"unknown\",\n \"documentTypeRaw\": \"None\",\n \"isActive\": true,\n \"isCloudDocument\": false,\n \"isSaved\": false,\n \"name\": \"Untitled\"\n }\n ],\n \"productType\": \"DesignProductType\"\n },\n \"documentHygiene\": {\n \"documents\": [\n {\n \"isModified\": false,\n \"isSaved\": false,\n \"name\": \"Untitled\",\n \"needsSave\": false,\n \"saveStateKnown\": true\n }\n ],\n \"inspectionComplete\": true,\n \"needsSaveCount\": 0,\n \"openDocumentCount\": 1,\n \"ownership\": \"notInferred\",\n \"recoveryHealth\": \"notInspected\"\n },\n \"durationMs\": 130,\n \"error\": \"\",\n \"output\": \"1 document(s) open, active: Untitled, workspace: Design\",\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234195.2856507, + "raw": { + "_hint": "Use fusion_get_app_state to check workspace type. For exports: fusion_export_gerbers, fusion_export_bom, fusion_export_cpl, fusion_export_source (.fsch/.fbrd), fusion_export_eagle_source (.sch/.brd). Use fusion_activate_document to switch tabs.", + "_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.", + "data": { + "activeDocument": "Untitled", + "activeWorkspace": "Design", + "documentName": "Untitled", + "isCloudDocument": false, + "isSaved": false, + "openDocumentCount": 1, + "openDocuments": [ + { + "documentType": "unknown", + "documentTypeRaw": "None", + "isActive": true, + "isCloudDocument": false, + "isSaved": false, + "name": "Untitled" + } + ], + "productType": "DesignProductType" + }, + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 0, + "openDocumentCount": 1, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 130, + "error": "", + "output": "1 document(s) open, active: Untitled, workspace: Design", + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/ordinary/calls/0006-fusion_run_modeling_script.json b/docs/mechanical-verification/cp8/ordinary/calls/0006-fusion_run_modeling_script.json new file mode 100644 index 0000000..13c619f --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/calls/0006-fusion_run_modeling_script.json @@ -0,0 +1,67 @@ +{ + "target": "adom_drew2", + "verb": "fusion_run_modeling_script", + "args": { + "script": "\nimport platform, tempfile\nresult = {'host': platform.node(), 'platform': platform.system(), 'fusionVersion': app.version,\n 'temporaryDirectory': tempfile.gettempdir(),\n 'activeCreationId': app.activeDocument.creationId if app.activeDocument else None,\n 'activeProductType': app.activeProduct.productType if app.activeProduct else None,\n 'activeCommand': ui.activeCommand,\n 'documents': [{'creationId': d.creationId, 'name': d.name,\n 'modified': d.isModified, 'saved': d.isSaved} for d in app.documents]}\n" + }, + "requestJson": "{\"script\": \"\\nimport platform, tempfile\\nresult = {'host': platform.node(), 'platform': platform.system(), 'fusionVersion': app.version,\\n 'temporaryDirectory': tempfile.gettempdir(),\\n 'activeCreationId': app.activeDocument.creationId if app.activeDocument else None,\\n 'activeProductType': app.activeProduct.productType if app.activeProduct else None,\\n 'activeCommand': ui.activeCommand,\\n 'documents': [{'creationId': d.creationId, 'name': d.name,\\n 'modified': d.isModified, 'saved': d.isSaved} for d in app.documents]}\\n\"}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion mechanical Ralph", + "startedAt": 1791234195.2860796, + "mutating": false, + "stdout": "{\n \"_hint\": \"Window opened/changed in the BACKGROUND - the user's focus was NOT touched; do NOT foreground anything to compensate. Render results via fusion_state. If the USER asks to watch, re-call with {\\\"foreground\\\": true, \\\"foregroundReason\\\": \\\"\\\"}.\",\n \"_timeoutHint\": \"ab waits up to 180s 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.\",\n \"data\": {\n \"createdDocument\": null,\n \"documentName\": \"Untitled\",\n \"result\": {\n \"activeCommand\": \"SelectCommand\",\n \"activeCreationId\": \"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\n \"activeProductType\": \"DesignProductType\",\n \"documents\": [\n {\n \"creationId\": \"70b2c575-f830-4751-9f88-2f1f3ab91fb1\",\n \"modified\": false,\n \"name\": \"Untitled\",\n \"saved\": false\n }\n ],\n \"fusionVersion\": \"2705.1.30\",\n \"host\": \"adom_drew2\",\n \"platform\": \"Windows\",\n \"temporaryDirectory\": \"C:/Users/drew/AppData/Local/Temp\"\n }\n },\n \"documentHygiene\": {\n \"documents\": [\n {\n \"isModified\": false,\n \"isSaved\": false,\n \"name\": \"Untitled\",\n \"needsSave\": false,\n \"saveStateKnown\": true\n }\n ],\n \"inspectionComplete\": true,\n \"needsSaveCount\": 0,\n \"openDocumentCount\": 1,\n \"ownership\": \"notInferred\",\n \"recoveryHealth\": \"notInspected\"\n },\n \"durationMs\": 1737,\n \"error\": \"\",\n \"output\": \"Modeling script ran successfully.\",\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 180,\n \"windowEtiquette\": \"background\"\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234197.029709, + "raw": { + "_hint": "Window opened/changed in the BACKGROUND - the user's focus was NOT touched; do NOT foreground anything to compensate. Render results via fusion_state. If the USER asks to watch, re-call with {\"foreground\": true, \"foregroundReason\": \"\"}.", + "_timeoutHint": "ab waits up to 180s 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.", + "data": { + "createdDocument": null, + "documentName": "Untitled", + "result": { + "activeCommand": "SelectCommand", + "activeCreationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "activeProductType": "DesignProductType", + "documents": [ + { + "creationId": "70b2c575-f830-4751-9f88-2f1f3ab91fb1", + "modified": false, + "name": "Untitled", + "saved": false + } + ], + "fusionVersion": "2705.1.30", + "host": "adom_drew2", + "platform": "Windows", + "temporaryDirectory": "C:/Users/drew/AppData/Local/Temp" + } + }, + "documentHygiene": { + "documents": [ + { + "isModified": false, + "isSaved": false, + "name": "Untitled", + "needsSave": false, + "saveStateKnown": true + } + ], + "inspectionComplete": true, + "needsSaveCount": 0, + "openDocumentCount": 1, + "ownership": "notInferred", + "recoveryHealth": "notInspected" + }, + "durationMs": 1737, + "error": "", + "output": "Modeling script ran successfully.", + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 180, + "windowEtiquette": "background" + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/ordinary/calls/0007-fusion_get_preferences.json b/docs/mechanical-verification/cp8/ordinary/calls/0007-fusion_get_preferences.json new file mode 100644 index 0000000..9e51ec2 --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/calls/0007-fusion_get_preferences.json @@ -0,0 +1,38 @@ +{ + "target": "adom_drew2", + "verb": "fusion_get_preferences", + "args": {}, + "requestJson": "{}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion mechanical Ralph", + "startedAt": 1791234197.0302992, + "mutating": false, + "stdout": "{\n \"_hint\": \"Current Fusion preferences. Change any with fusion_set_preference, keys: theme (light/darkblue/darkgray/classic/device/dark), invertScrollZoom (bool), orbitScheme (fusion360/alias/inventor/solidworks/tinkercad/powermill), modelingOrientation (yup/zup), gestureNav (bool), cameraPivot (bool), lengthUnit (mm/cm/m/in/ft - applies to the active design).\",\n \"_timeoutHint\": \"ab waits up to 25s 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.\",\n \"applied\": {},\n \"current\": {\n \"activeTheme\": \"darkblue\",\n \"cameraPivot\": true,\n \"gestureNav\": true,\n \"invertScrollZoom\": true,\n \"lengthUnit\": \"mm\",\n \"modelingOrientation\": \"zup\",\n \"orbitScheme\": \"fusion360\",\n \"theme\": \"device\"\n },\n \"durationMs\": 86,\n \"error\": \"\",\n \"output\": \"{\\\"_hint\\\":\\\"Current Fusion preferences. Change any with fusion_set_preference, keys: theme (light/darkblue/darkgray/classic/device/dark), invertScrollZoom (bool), orbitScheme (fusion360/alias/inventor/solidworks/tinkercad/powermill), modelingOrientation (yup/zup), gestureNav (bool), cameraPivot (bool), lengthUnit (mm/cm/m/in/ft - applies to the active design).\\\",\\\"_timeoutHint\\\":\\\"ab waits up to 25s 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.\\\",\\\"applied\\\":{},\\\"current\\\":{\\\"activeTheme\\\":\\\"darkblue\\\",\\\"cameraPivot\\\":true,\\\"gestureNav\\\":true,\\\"invertScrollZoom\\\":true,\\\"lengthUnit\\\":\\\"mm\\\",\\\"modelingOrientation\\\":\\\"zup\\\",\\\"orbitScheme\\\":\\\"fusion360\\\",\\\"theme\\\":\\\"device\\\"},\\\"shell\\\":\\\"rust\\\",\\\"statusVerb\\\":\\\"fusion_get_app_state\\\",\\\"success\\\":true,\\\"timeoutSeconds\\\":25}\",\n \"schemaVersion\": 1,\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 25\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234197.1222215, + "raw": { + "_hint": "Current Fusion preferences. Change any with fusion_set_preference, keys: theme (light/darkblue/darkgray/classic/device/dark), invertScrollZoom (bool), orbitScheme (fusion360/alias/inventor/solidworks/tinkercad/powermill), modelingOrientation (yup/zup), gestureNav (bool), cameraPivot (bool), lengthUnit (mm/cm/m/in/ft - applies to the active design).", + "_timeoutHint": "ab waits up to 25s 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.", + "applied": {}, + "current": { + "activeTheme": "darkblue", + "cameraPivot": true, + "gestureNav": true, + "invertScrollZoom": true, + "lengthUnit": "mm", + "modelingOrientation": "zup", + "orbitScheme": "fusion360", + "theme": "device" + }, + "durationMs": 86, + "error": "", + "output": "{\"_hint\":\"Current Fusion preferences. Change any with fusion_set_preference, keys: theme (light/darkblue/darkgray/classic/device/dark), invertScrollZoom (bool), orbitScheme (fusion360/alias/inventor/solidworks/tinkercad/powermill), modelingOrientation (yup/zup), gestureNav (bool), cameraPivot (bool), lengthUnit (mm/cm/m/in/ft - applies to the active design).\",\"_timeoutHint\":\"ab waits up to 25s 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.\",\"applied\":{},\"current\":{\"activeTheme\":\"darkblue\",\"cameraPivot\":true,\"gestureNav\":true,\"invertScrollZoom\":true,\"lengthUnit\":\"mm\",\"modelingOrientation\":\"zup\",\"orbitScheme\":\"fusion360\",\"theme\":\"device\"},\"shell\":\"rust\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":25}", + "schemaVersion": 1, + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 25 + } +} \ No newline at end of file diff --git a/docs/mechanical-verification/cp8/ordinary/calls/0008-fusion_mech_capabilities.json b/docs/mechanical-verification/cp8/ordinary/calls/0008-fusion_mech_capabilities.json new file mode 100644 index 0000000..88c7a7b --- /dev/null +++ b/docs/mechanical-verification/cp8/ordinary/calls/0008-fusion_mech_capabilities.json @@ -0,0 +1,6432 @@ +{ + "target": "adom_drew2", + "verb": "fusion_mech_capabilities", + "args": {}, + "requestJson": "{}", + "runId": "20261005T210310Z-568fe7869d0b41d5a83014811fe170ac", + "caller": "Fusion mechanical Ralph", + "startedAt": 1791234197.124444, + "mutating": false, + "stdout": "{\n \"_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.\",\n \"durationMs\": 181,\n \"error\": \"\",\n \"idempotency\": {\n \"admission\": \"FULL SQLite commit before native dispatch\",\n \"capacity\": 10000,\n \"databaseByteLimit\": 67108864,\n \"recordByteLimit\": 4194304,\n \"restartBehavior\": \"old-session history is readable; native execution never replays across sessions\",\n \"scope\": \"durable history keyed by add-in session and operation ID\",\n \"storageVersion\": 1\n },\n \"operations\": {\n \"assembly_properties\": {\n \"description\": \"High-accuracy physical properties of whole root assembly (default) or an exact Component/Occurrence/BRepBody. Returns mass kg, volume mm3, area mm2, center of mass mm, mean density kg/mm3 and definition/instance coordinate scope.\",\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"target\"\n ],\n \"type\": \"object\"\n },\n \"bom\": {\n \"description\": \"Structured component-definition and instance BOM; quantities by actual identity, root bodies plus nested children; purchased metadata collapses subtrees unless exploded. Physical mass includes all unsuppressed bodies exactly once per instance. Includes exact current active configuration provenance; incomplete configuration scope refuses. Visibility does not remove quantity.\",\n \"properties\": {\n \"explodePurchased\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [\n \"op\",\n \"target\"\n ],\n \"type\": \"object\"\n },\n \"bom_export\": {\n \"description\": \"Export flat grouped purchasing rows or structured parent/path/depth instance rows and supplier provenance to CSV with exclusive/atomic publication. This external effect is separate from model transactions. Both CSV modes include document/revision and current active configuration table/row provenance.\",\n \"properties\": {\n \"explodePurchased\": {\n \"type\": \"boolean\"\n },\n \"filename\": {\n \"type\": \"string\"\n },\n \"mode\": {\n \"enum\": [\n \"flat\",\n \"structured\"\n ]\n },\n \"overwrite\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"filename\"\n ],\n \"type\": \"object\"\n },\n \"cad_import\": {\n \"description\": \"Import a pre-downloaded local STEP/SAT into a new wrapper component in Hybrid design. Validate optional expected SHA-256, record actual source/hash/supplier metadata, preserve camera, measure model recovery. Does not fetch URLs or create cloud documents. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\",\n \"properties\": {\n \"asPurchased\": {\n \"type\": \"boolean\"\n },\n \"filename\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"parent\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"provenance\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\"\n },\n \"sourceUrl\": {\n \"type\": \"string\"\n },\n \"supplier\": {\n \"type\": \"string\"\n },\n \"supplierPartNumber\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"supplier\",\n \"supplierPartNumber\",\n \"sourceUrl\"\n ],\n \"type\": \"object\"\n },\n \"sha256\": {\n \"type\": \"string\"\n },\n \"transform\": {\n \"additionalProperties\": false,\n \"description\": \"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\",\n \"properties\": {\n \"angle\": {\n \"type\": \"number\"\n },\n \"axis\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n },\n \"position\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"filename\",\n \"provenance\"\n ],\n \"type\": \"object\"\n },\n \"component_create\": {\n \"description\": \"Create a native internal component and its first occurrence in a Hybrid design. parent is a component definition; edits to it affect every instance. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\",\n \"properties\": {\n \"metadata\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"asPurchased\": {\n \"type\": \"boolean\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"excludeFromBom\": {\n \"type\": \"boolean\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"partNumber\": {\n \"type\": \"string\"\n },\n \"sourceUrl\": {\n \"type\": \"string\"\n },\n \"supplier\": {\n \"type\": \"string\"\n },\n \"supplierPartNumber\": {\n \"type\": \"string\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"parent\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"transform\": {\n \"additionalProperties\": false,\n \"description\": \"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\",\n \"properties\": {\n \"angle\": {\n \"type\": \"number\"\n },\n \"axis\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n },\n \"position\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"name\"\n ],\n \"type\": \"object\"\n },\n \"component_metadata\": {\n \"description\": \"Update component-definition name/part number/description and persistent supplier or BOM attributes. Shared occurrences all see this metadata.\",\n \"properties\": {\n \"changes\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"asPurchased\": {\n \"type\": \"boolean\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"excludeFromBom\": {\n \"type\": \"boolean\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"partNumber\": {\n \"type\": \"string\"\n },\n \"sourceUrl\": {\n \"type\": \"string\"\n },\n \"supplier\": {\n \"type\": \"string\"\n },\n \"supplierPartNumber\": {\n \"type\": \"string\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"component\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"changes\"\n ],\n \"type\": \"object\"\n },\n \"configuration_inspect\": {\n \"description\": \"Read the loaded Design configuration graph without activation or recompute: ordinary rows, the separate native reserved test row, all supported typed cells including inactive/test cells, exact controlled-source links and current ordinary row. Unreadable fields and unknown/theme/hierarchical/inserted scopes remain explicit incomplete diagnostics. Configuration lifecycle and configured-design model mutations remain disabled pending native recovery/archive gates.\",\n \"properties\": {},\n \"required\": [\n \"op\",\n \"target\"\n ],\n \"type\": \"object\"\n },\n \"construction_axis\": {\n \"description\": \"Create a parametric axis from native references (edge/circular face/two intersecting planes/two distinct points). Root-space external geometry requires exact occurrence context. For cross-component geometry into a non-root target component, creationOccurrence must identify a root-context instance of that target. Returns component-space native axis geometry/health. No direct-only infinite-line or preview snap APIs.\",\n \"properties\": {\n \"component\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"creationOccurrence\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"entities\": {\n \"items\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 2,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"edge\",\n \"circular_face\",\n \"two_planes\",\n \"two_points\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"sessionId\",\n \"operationId\",\n \"type\",\n \"entities\"\n ],\n \"type\": \"object\"\n },\n \"entity_delete\": {\n \"description\": \"Delete sketch geometry or independently deletable timeline features. Model transaction and semantic recovery cover downstream failures; document and external file deletion are excluded.\",\n \"properties\": {\n \"entity\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"export\": {\n \"description\": \"Export entire design using runtime-checked API. Preflight and unique same-filesystem staging preserve the destination on failure; publish only nonempty verified output. Availability differs by Fusion build. STL numeric coordinates use mm.\",\n \"properties\": {\n \"format\": {\n \"default\": \"step\",\n \"enum\": [\n \"step\",\n \"stl\",\n \"3mf\",\n \"f3d\",\n \"iges\",\n \"sat\",\n \"smt\",\n \"usdz\",\n \"fbx\",\n \"skp\"\n ]\n },\n \"outputPath\": {\n \"type\": \"string\"\n },\n \"overwrite\": {\n \"default\": false,\n \"type\": \"boolean\"\n },\n \"refinement\": {\n \"default\": \"medium\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"outputPath\"\n ],\n \"type\": \"object\"\n },\n \"feature_create\": {\n \"description\": \"Create a typed native solid feature. All length quantities are mm (or expressions), angles deg. Cut/intersect require explicit participant bodies. Join needs a single existing component body; combine selects multiple bodies explicitly. Feature availability is runtime-checked; missing APIs fail before commit.\",\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"direction\": {\n \"enum\": [\n \"positive\",\n \"negative\",\n \"symmetric\"\n ]\n },\n \"distance\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operation\": {\n \"enum\": [\n \"new_body\",\n \"join\",\n \"cut\",\n \"intersect\"\n ]\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"profiles\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"taper\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"extrude\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"profiles\",\n \"distance\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"angle\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"axis\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operation\": {\n \"enum\": [\n \"new_body\",\n \"join\",\n \"cut\",\n \"intersect\"\n ]\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"profiles\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"revolve\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"profiles\",\n \"axis\",\n \"angle\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"edges\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"radius\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"tangentChain\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"fillet\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"edges\",\n \"radius\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"distance\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"edges\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"tangentChain\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"chamfer\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"edges\",\n \"distance\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"faces\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"tangentChain\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"thickness\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"type\": {\n \"enum\": [\n \"shell\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"faces\",\n \"thickness\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"depth\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"diameter\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"points\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"hole\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"points\",\n \"diameter\",\n \"depth\",\n \"bodies\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operation\": {\n \"enum\": [\n \"new_body\",\n \"join\",\n \"cut\",\n \"intersect\"\n ]\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"profiles\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"loft\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"profiles\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operation\": {\n \"enum\": [\n \"new_body\",\n \"join\",\n \"cut\",\n \"intersect\"\n ]\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"path\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"profiles\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"sweep\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"profiles\",\n \"path\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"body\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keepTools\": {\n \"type\": \"boolean\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operation\": {\n \"enum\": [\n \"join\",\n \"cut\",\n \"intersect\"\n ]\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"tools\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"type\": {\n \"enum\": [\n \"combine\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"body\",\n \"tools\",\n \"operation\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"extend\": {\n \"type\": \"boolean\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"plane\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"xy\",\n \"xz\",\n \"yz\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"split\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"bodies\",\n \"plane\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"angle\": {\n \"type\": \"number\"\n },\n \"axis\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n },\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"origin\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"translation\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"type\": {\n \"enum\": [\n \"move\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"bodies\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"plane\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"xy\",\n \"xz\",\n \"yz\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"mirror\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"bodies\",\n \"plane\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"axis\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"axis2\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"count\": {\n \"maximum\": 1000,\n \"minimum\": 2,\n \"type\": \"integer\"\n },\n \"count2\": {\n \"maximum\": 1000,\n \"minimum\": 1,\n \"type\": \"integer\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"spacing\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"spacing2\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"rectangular_pattern\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"bodies\",\n \"axis\",\n \"count\",\n \"spacing\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"angle\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"axis\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"bodies\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"count\": {\n \"maximum\": 1000,\n \"minimum\": 2,\n \"type\": \"integer\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"circular_pattern\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"bodies\",\n \"axis\",\n \"count\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"angle\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"faces\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"plane\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"xy\",\n \"xz\",\n \"yz\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"tangentChain\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"draft\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"faces\",\n \"plane\",\n \"angle\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"designation\": {\n \"type\": \"string\"\n },\n \"faces\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"internal\": {\n \"type\": \"boolean\"\n },\n \"modeled\": {\n \"type\": \"boolean\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"documentId\": {\n \"type\": \"string\"\n },\n \"revision\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"threadClass\": {\n \"type\": \"string\"\n },\n \"threadType\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"thread\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"faces\",\n \"internal\",\n \"threadType\",\n \"designation\",\n \"threadClass\"\n ],\n \"type\": \"object\"\n }\n ],\n \"properties\": {\n \"angle\": {},\n \"axis\": {},\n \"axis2\": {},\n \"bodies\": {},\n \"body\": {},\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"count\": {},\n \"count2\": {},\n \"depth\": {},\n \"designation\": {},\n \"diameter\": {},\n \"direction\": {},\n \"distance\": {},\n \"edges\": {},\n \"extend\": {},\n \"faces\": {},\n \"internal\": {},\n \"keepTools\": {},\n \"modeled\": {},\n \"name\": {\n \"type\": \"string\"\n },\n \"operation\": {},\n \"origin\": {},\n \"path\": {},\n \"plane\": {},\n \"points\": {},\n \"profiles\": {},\n \"radius\": {},\n \"spacing\": {},\n \"spacing2\": {},\n \"tangentChain\": {},\n \"taper\": {},\n \"thickness\": {},\n \"threadClass\": {},\n \"threadType\": {},\n \"tools\": {},\n \"translation\": {},\n \"type\": {\n \"enum\": [\n \"extrude\",\n \"revolve\",\n \"fillet\",\n \"chamfer\",\n \"shell\",\n \"hole\",\n \"loft\",\n \"sweep\",\n \"combine\",\n \"split\",\n \"move\",\n \"mirror\",\n \"rectangular_pattern\",\n \"circular_pattern\",\n \"draft\",\n \"thread\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"type\"\n ],\n \"type\": \"object\"\n },\n \"feature_edit\": {\n \"description\": \"Rename/suppress a feature or change expressions of model parameters whose createdBy is that exact feature; read health and abort on downstream errors.\",\n \"properties\": {\n \"feature\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"parameters\": {\n \"additionalProperties\": {\n \"type\": \"string\"\n },\n \"type\": \"object\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"feature\"\n ],\n \"type\": \"object\"\n },\n \"geometry_query\": {\n \"description\": \"Complete body-scoped topology query, no arbitrary first-match selection. selection one (default) refuses zero/multiple matches; many may return empty. Geometry types are exact native types; size ranges inclusive in mm/mm2, near is minimum distance in the explicit frame; direction is outward planar face normal or linear edge tangent. Returned refs retain instance context even for component-space filters. Exceeding maxResults fails rather than truncating.\",\n \"properties\": {\n \"body\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"filters\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"area\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"max\": {\n \"minimum\": 0,\n \"type\": \"number\"\n },\n \"min\": {\n \"minimum\": 0,\n \"type\": \"number\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"direction\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"orientation\": {\n \"enum\": [\n \"same\",\n \"parallel\"\n ]\n },\n \"tolerance\": {\n \"maximum\": 90,\n \"minimum\": 0,\n \"type\": \"number\"\n },\n \"vector\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"vector\"\n ],\n \"type\": \"object\"\n },\n \"length\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"max\": {\n \"minimum\": 0,\n \"type\": \"number\"\n },\n \"min\": {\n \"minimum\": 0,\n \"type\": \"number\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"near\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"point\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n },\n \"tolerance\": {\n \"minimum\": 0,\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"point\",\n \"tolerance\"\n ],\n \"type\": \"object\"\n },\n \"radius\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"max\": {\n \"minimum\": 0,\n \"type\": \"number\"\n },\n \"min\": {\n \"minimum\": 0,\n \"type\": \"number\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"Plane\",\n \"Cylinder\",\n \"Cone\",\n \"Sphere\",\n \"Torus\",\n \"NurbsSurface\",\n \"Line3D\",\n \"Arc3D\",\n \"Circle3D\",\n \"Ellipse3D\",\n \"EllipticalArc3D\",\n \"NurbsCurve3D\",\n \"Point3D\",\n \"degenerate\"\n ]\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"kind\": {\n \"enum\": [\n \"faces\",\n \"edges\",\n \"vertices\"\n ]\n },\n \"maxResults\": {\n \"maximum\": 1024,\n \"minimum\": 1,\n \"type\": \"integer\"\n },\n \"selection\": {\n \"enum\": [\n \"one\",\n \"many\"\n ]\n },\n \"space\": {\n \"enum\": [\n \"root\",\n \"component\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"body\",\n \"kind\",\n \"space\"\n ],\n \"type\": \"object\"\n },\n \"health\": {\n \"description\": \"Read timeline warnings/errors. recompute:true also requires current target revision, sessionId and operationId.\",\n \"properties\": {\n \"recompute\": {\n \"default\": false,\n \"type\": \"boolean\"\n }\n },\n \"required\": [\n \"op\",\n \"target\"\n ],\n \"type\": \"object\"\n },\n \"inspect\": {\n \"description\": \"Inspect the active Design without mutation. Returns target identity/revision, native component-space bodies and occurrence transforms, parameters and feature health.\",\n \"properties\": {},\n \"required\": [\n \"op\"\n ],\n \"type\": \"object\"\n },\n \"inspect_entity\": {\n \"properties\": {\n \"entity\": {\n \"description\": \"Exact reference returned by inspect; resolves uniquely with document/revision/type/occurrence guards.\",\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"interference\": {\n \"description\": \"Analyze root-context occurrences/body proxies; returns overlap volume mm3 or touching. Does not create interference bodies.\",\n \"properties\": {\n \"entities\": {\n \"items\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"includeTouching\": {\n \"type\": \"boolean\"\n },\n \"volumeTolerance\": {\n \"minimum\": 0,\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"entities\"\n ],\n \"type\": \"object\"\n },\n \"joint_create\": {\n \"description\": \"Create an as-built joint without moving occurrences. Non-rigid motion requires explicit joint geometry; x/y/z are joint-coordinate directions. Limits and drive values use mm/deg. Seven native motion types; ball uses joint Z pitch/X yaw; planar uses native primary slide direction reported on readback. Use regular_joint_create for geometry-solving placement.\",\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrenceOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"occurrenceTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"rigid\"\n ]\n }\n },\n \"required\": [\n \"type\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"axis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrenceOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"occurrenceTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"rotationLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rotationValue\": {\n \"type\": \"number\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"revolute\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"geometry\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"axis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrenceOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"occurrenceTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"slideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"slideValue\": {\n \"type\": \"number\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"slider\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"geometry\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"axis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrenceOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"occurrenceTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"rotationLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rotationValue\": {\n \"type\": \"number\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"slideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"slideValue\": {\n \"type\": \"number\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"cylindrical\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"geometry\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"axis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrenceOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"occurrenceTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"rotationLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rotationValue\": {\n \"type\": \"number\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"slideAxis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"slideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"slideValue\": {\n \"type\": \"number\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"pin_slot\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"geometry\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"axis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrenceOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"occurrenceTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"primarySlideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"primarySlideValue\": {\n \"type\": \"number\"\n },\n \"rotationLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rotationValue\": {\n \"type\": \"number\"\n },\n \"secondarySlideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"secondarySlideValue\": {\n \"type\": \"number\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"planar\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"geometry\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrenceOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"occurrenceTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"pitchLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"pitchValue\": {\n \"type\": \"number\"\n },\n \"rollLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rollValue\": {\n \"type\": \"number\"\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"target\": {\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"ball\"\n ]\n },\n \"yawLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"yawValue\": {\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"type\",\n \"geometry\"\n ],\n \"type\": \"object\"\n }\n ],\n \"properties\": {\n \"axis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrenceOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"occurrenceTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"pitchLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"pitchValue\": {\n \"type\": \"number\"\n },\n \"primarySlideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"primarySlideValue\": {\n \"type\": \"number\"\n },\n \"rollLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rollValue\": {\n \"type\": \"number\"\n },\n \"rotationLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rotationValue\": {\n \"type\": \"number\"\n },\n \"secondarySlideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"secondarySlideValue\": {\n \"type\": \"number\"\n },\n \"slideAxis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"slideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"slideValue\": {\n \"type\": \"number\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"type\": {\n \"enum\": [\n \"rigid\",\n \"revolute\",\n \"slider\",\n \"cylindrical\",\n \"pin_slot\",\n \"planar\",\n \"ball\"\n ]\n },\n \"yawLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"yawValue\": {\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"type\",\n \"occurrenceOne\",\n \"occurrenceTwo\"\n ],\n \"type\": \"object\"\n },\n \"joint_delete\": {\n \"description\": \"Delete one selected Joint or AsBuiltJoint with recovery verification.\",\n \"properties\": {\n \"joint\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"joint\"\n ],\n \"type\": \"object\"\n },\n \"joint_edit\": {\n \"description\": \"Edit joint name/suppression, enabled limits, rest and drive values; wrong motion type or out-of-limit values fail with recovery. For driven root joints, active motion links must preserve their settings and their partner motion must follow the native ratio; a coupling mismatch aborts.\",\n \"properties\": {\n \"joint\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"pitchLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"pitchValue\": {\n \"type\": \"number\"\n },\n \"primarySlideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"primarySlideValue\": {\n \"type\": \"number\"\n },\n \"rollLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rollValue\": {\n \"type\": \"number\"\n },\n \"rotationLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rotationValue\": {\n \"type\": \"number\"\n },\n \"secondarySlideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"secondarySlideValue\": {\n \"type\": \"number\"\n },\n \"slideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"slideValue\": {\n \"type\": \"number\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"yawLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"yawValue\": {\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"joint\"\n ],\n \"type\": \"object\"\n },\n \"joint_origin_create\": {\n \"description\": \"Create a native component-definition joint origin from guarded native geometry, with mm offsets/deg angle and optional straight axis references. Child occurrence origin references are exposed by inspect_entity(occurrence).\",\n \"properties\": {\n \"angle\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"component\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"flipped\": {\n \"type\": \"boolean\"\n },\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"edge\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"maxLength\": 120,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"offsetX\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"offsetY\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"offsetZ\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"xAxisEntity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"zAxisEntity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"geometry\"\n ],\n \"type\": \"object\"\n },\n \"joint_origin_delete\": {\n \"description\": \"Delete a native joint origin; unhealthy downstream joints cause transaction rollback.\",\n \"properties\": {\n \"origin\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"origin\"\n ],\n \"type\": \"object\"\n },\n \"joint_origin_edit\": {\n \"description\": \"Edit a native joint origin definition; rolls before its timeline item and restores the original marker in finally. Recomputes and verifies attachment, axes, offsets, angle, name and flip.\",\n \"properties\": {\n \"angle\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"flipped\": {\n \"type\": \"boolean\"\n },\n \"geometry\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"edge\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"maxLength\": 120,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"offsetX\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"offsetY\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"offsetZ\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"origin\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"xAxisEntity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"zAxisEntity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"origin\"\n ],\n \"type\": \"object\"\n },\n \"material_assign\": {\n \"description\": \"Assign a loaded library or document material to an exact native Component/BRepBody; verify material ID readback with model transaction recovery. Query assembly_properties for resulting mass.\",\n \"properties\": {\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"libraryId\": {\n \"type\": \"string\"\n },\n \"materialId\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"entity\",\n \"materialId\"\n ],\n \"type\": \"object\"\n },\n \"material_list\": {\n \"description\": \"List loaded material libraries and matching materials by stable library/material IDs. Omit libraryId for document materials.\",\n \"properties\": {\n \"libraryId\": {\n \"type\": \"string\"\n },\n \"limit\": {\n \"maximum\": 1000,\n \"minimum\": 1,\n \"type\": \"integer\"\n },\n \"query\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"op\",\n \"target\"\n ],\n \"type\": \"object\"\n },\n \"mcmaster_discover\": {\n \"description\": \"Discover Fusion native Insert McMaster-Carr command and requirements in the active design.\",\n \"properties\": {},\n \"required\": [\n \"op\"\n ],\n \"type\": \"object\"\n },\n \"mcmaster_open\": {\n \"description\": \"Invoke Fusion native McMaster UI in the targeted Hybrid design. Interactive external operation: completion/insert/cancel stays with Fusion; inspect afterward. Idempotency records launch only.\",\n \"properties\": {},\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\"\n ],\n \"type\": \"object\"\n },\n \"measure\": {\n \"description\": \"Native engineering minimum distance or angle in root assembly space. Non-root definition refs require an occurrence context. Distance needs2 entities; angle needs2 lines/planes or3 points (second apex). Returns mm/deg and native witness positions in root mm. witnessValidation identifies native points or native geometry directions used for valid parallel angles with degenerate native points; degenerate point angles and unavailable/inconsistent witnesses fail.\",\n \"properties\": {\n \"entities\": {\n \"items\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"space\": {\n \"enum\": [\n \"root\"\n ]\n },\n \"type\": {\n \"enum\": [\n \"distance\",\n \"angle\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"type\",\n \"space\",\n \"entities\"\n ],\n \"type\": \"object\"\n },\n \"motion_link_create\": {\n \"description\": \"Create a native motion link between two root-owned joints, or two different motions of jointOne when jointTwo is omitted. Positive ratio magnitudes use mm for translation and deg for rotation; reversed selects opposite direction. Requires the November 2025+ API; no script fallback.\",\n \"properties\": {\n \"jointOne\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"jointTwo\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"motionOne\": {\n \"enum\": [\n \"rotation\",\n \"slide\",\n \"primarySlide\",\n \"secondarySlide\",\n \"pitch\",\n \"roll\",\n \"yaw\"\n ]\n },\n \"motionTwo\": {\n \"enum\": [\n \"rotation\",\n \"slide\",\n \"primarySlide\",\n \"secondarySlide\",\n \"pitch\",\n \"roll\",\n \"yaw\"\n ]\n },\n \"name\": {\n \"maxLength\": 120,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"reversed\": {\n \"type\": \"boolean\"\n },\n \"valueOne\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"valueTwo\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"jointOne\",\n \"motionOne\",\n \"motionTwo\",\n \"valueOne\",\n \"valueTwo\"\n ],\n \"type\": \"object\"\n },\n \"motion_link_delete\": {\n \"description\": \"Delete a root-owned motion link under the same transaction/recovery contract.\",\n \"properties\": {\n \"link\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"link\"\n ],\n \"type\": \"object\"\n },\n \"motion_link_edit\": {\n \"description\": \"Edit a root-owned motion link ratio, degree-of-freedom pair, direction, name or suppression. Joint membership is immutable; recreate the link to change members. Verify exact joint identities, ratio, flags and health.\",\n \"properties\": {\n \"link\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"motionOne\": {\n \"enum\": [\n \"rotation\",\n \"slide\",\n \"primarySlide\",\n \"secondarySlide\",\n \"pitch\",\n \"roll\",\n \"yaw\"\n ]\n },\n \"motionTwo\": {\n \"enum\": [\n \"rotation\",\n \"slide\",\n \"primarySlide\",\n \"secondarySlide\",\n \"pitch\",\n \"roll\",\n \"yaw\"\n ]\n },\n \"name\": {\n \"maxLength\": 120,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"reversed\": {\n \"type\": \"boolean\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n },\n \"valueOne\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"valueTwo\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"link\"\n ],\n \"type\": \"object\"\n },\n \"new_design\": {\n \"description\": \"Create an unnamed unsaved parametric hybrid Design; name is retained as requestedName metadata to keep failure recovery free of save dialogs. Optional box dimensions in mm create a driving-parameter fixture. Never edits an existing document.\",\n \"properties\": {\n \"box\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"depth\": {\n \"exclusiveMinimum\": 0,\n \"type\": \"number\"\n },\n \"height\": {\n \"exclusiveMinimum\": 0,\n \"type\": \"number\"\n },\n \"width\": {\n \"exclusiveMinimum\": 0,\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"width\",\n \"height\",\n \"depth\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\"\n ],\n \"type\": \"object\"\n },\n \"occurrence_delete\": {\n \"description\": \"Delete one selected occurrence through the shared transaction executor.\",\n \"properties\": {\n \"occurrence\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"occurrence\"\n ],\n \"type\": \"object\"\n },\n \"occurrence_insert\": {\n \"description\": \"Insert another occurrence of an existing definition; independentCopy:true uses Paste New to create a separate definition. Nested placement is in parent component coordinates. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\",\n \"properties\": {\n \"component\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"independentCopy\": {\n \"type\": \"boolean\"\n },\n \"parent\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"transform\": {\n \"additionalProperties\": false,\n \"description\": \"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\",\n \"properties\": {\n \"angle\": {\n \"type\": \"number\"\n },\n \"axis\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n },\n \"position\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"component\"\n ],\n \"type\": \"object\"\n },\n \"occurrence_update\": {\n \"description\": \"Set occurrence pose in its assembly context and capture position; explicit grounding/ungrounding. Grounded or constrained transforms fail with recovery.\",\n \"properties\": {\n \"grounded\": {\n \"type\": \"boolean\"\n },\n \"groundedToParent\": {\n \"type\": \"boolean\"\n },\n \"occurrence\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"transform\": {\n \"additionalProperties\": false,\n \"description\": \"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\",\n \"properties\": {\n \"angle\": {\n \"type\": \"number\"\n },\n \"axis\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n },\n \"position\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 3,\n \"type\": \"array\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"occurrence\"\n ],\n \"type\": \"object\"\n },\n \"parameter_batch\": {\n \"description\": \"Atomic sequential create/set/delete parameter edits with one recompute+health gate; delete supports user parameters only. Any failure aborts all edits and reports semantic recovery.\",\n \"properties\": {\n \"changes\": {\n \"items\": {\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"action\": {\n \"enum\": [\n \"create\"\n ]\n },\n \"comment\": {\n \"type\": \"string\"\n },\n \"expression\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"unit\": {\n \"enum\": [\n \"mm\",\n \"deg\",\n \"kg\",\n \"\"\n ]\n }\n },\n \"required\": [\n \"action\",\n \"name\",\n \"expression\",\n \"unit\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"action\": {\n \"enum\": [\n \"set\"\n ]\n },\n \"expression\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"action\",\n \"name\",\n \"expression\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"action\": {\n \"enum\": [\n \"delete\"\n ]\n },\n \"name\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"action\",\n \"name\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"maxItems\": 128,\n \"minItems\": 1,\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"changes\"\n ],\n \"type\": \"object\"\n },\n \"parameter_create\": {\n \"properties\": {\n \"comment\": {\n \"type\": \"string\"\n },\n \"expression\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"unit\": {\n \"enum\": [\n \"mm\",\n \"deg\",\n \"kg\",\n \"\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"name\",\n \"expression\",\n \"unit\"\n ],\n \"type\": \"object\"\n },\n \"parameter_set\": {\n \"description\": \"Set an expression, recompute and inspect health. Failure restores old expression and reports a semantic recovery witness; not an atomic transaction.\",\n \"properties\": {\n \"expression\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"name\",\n \"expression\"\n ],\n \"type\": \"object\"\n },\n \"plane_create\": {\n \"description\": \"Create offset plane (offset in mm) or angled plane around axis (angle in deg).\",\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"offset\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"plane\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"xy\",\n \"xz\",\n \"yz\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"offset\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"offset\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"angle\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"axis\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"op\": {\n \"type\": \"string\"\n },\n \"operationId\": {\n \"type\": \"string\"\n },\n \"plane\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"xy\",\n \"xz\",\n \"yz\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"sessionId\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"required\": [\n \"documentId\",\n \"revision\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"angle\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"axis\",\n \"angle\"\n ],\n \"type\": \"object\"\n }\n ],\n \"properties\": {\n \"angle\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"axis\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"offset\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"plane\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"xy\",\n \"xz\",\n \"yz\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"type\": {\n \"enum\": [\n \"offset\",\n \"angle\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"type\"\n ],\n \"type\": \"object\"\n },\n \"regular_joint_create\": {\n \"description\": \"Create a geometry-solving regular joint in the root component using two distinct instance-context attachments or joint origins. All seven native motion families; offsets mm, angle and angular limits deg. Read back freshly resolved attachment graph, native parameters and root-space occurrence placement. Root/non-root sides must be unambiguous; both grounded and ancestor/descendant pairs are refused. Inferred joints are unsupported. Existing pending positions must be captured or reverted first. Before applying drive values, checks native joint-transform anchor offset magnitude/axiality and zero-angle axis collinearity. Native joint matrices have explicit provenance; physical angle/flip sense requires independent occurrence-geometry acceptance.\",\n \"properties\": {\n \"angle\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"axis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"flipped\": {\n \"type\": \"boolean\"\n },\n \"geometryOne\": {\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"edge\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"origin\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"origin\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"geometryTwo\": {\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"edge\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"origin\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"origin\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"locked\": {\n \"type\": \"boolean\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"offset\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"pitchLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"pitchValue\": {\n \"type\": \"number\"\n },\n \"primarySlideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"primarySlideValue\": {\n \"type\": \"number\"\n },\n \"rollLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rollValue\": {\n \"type\": \"number\"\n },\n \"rotationLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"rotationValue\": {\n \"type\": \"number\"\n },\n \"secondarySlideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"secondarySlideValue\": {\n \"type\": \"number\"\n },\n \"slideAxis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"slideLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"slideValue\": {\n \"type\": \"number\"\n },\n \"type\": {\n \"enum\": [\n \"rigid\",\n \"revolute\",\n \"slider\",\n \"cylindrical\",\n \"pin_slot\",\n \"planar\",\n \"ball\"\n ]\n },\n \"yawLimits\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"maximum\": {\n \"type\": \"number\"\n },\n \"maximumEnabled\": {\n \"type\": \"boolean\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"minimumEnabled\": {\n \"type\": \"boolean\"\n },\n \"rest\": {\n \"type\": \"number\"\n },\n \"restEnabled\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"yawValue\": {\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"type\",\n \"geometryOne\",\n \"geometryTwo\"\n ],\n \"type\": \"object\"\n },\n \"regular_joint_edit\": {\n \"description\": \"Redefine root-owned regular joint geometry, motion family, offsets, angle, flip or lock. Restore timeline in finally and verify after recompute. Use joint_edit for name, suppression, limits and drive values; joint_delete for deletion.\",\n \"properties\": {\n \"angle\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"axis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"flipped\": {\n \"type\": \"boolean\"\n },\n \"geometryOne\": {\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"edge\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"origin\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"origin\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"geometryTwo\": {\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"edge\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"entity\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"keyPoint\": {\n \"enum\": [\n \"center\",\n \"start\",\n \"middle\",\n \"end\"\n ]\n }\n },\n \"required\": [\n \"entity\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"origin\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"origin\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"joint\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"locked\": {\n \"type\": \"boolean\"\n },\n \"offset\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"offsetX\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"offsetY\": {\n \"description\": \"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"maxLength\": 512,\n \"minLength\": 1,\n \"type\": \"string\"\n }\n ]\n },\n \"slideAxis\": {\n \"enum\": [\n \"x\",\n \"y\",\n \"z\"\n ]\n },\n \"type\": {\n \"enum\": [\n \"rigid\",\n \"revolute\",\n \"slider\",\n \"cylindrical\",\n \"pin_slot\",\n \"planar\",\n \"ball\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"joint\"\n ],\n \"type\": \"object\"\n },\n \"rigid_group_create\": {\n \"description\": \"Create a native rigid group from exact occurrence instances; includeChildren defaults true.\",\n \"properties\": {\n \"includeChildren\": {\n \"type\": \"boolean\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"occurrences\": {\n \"items\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 2,\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"sessionId\",\n \"operationId\",\n \"occurrences\"\n ],\n \"type\": \"object\"\n },\n \"rigid_group_delete\": {\n \"description\": \"Delete an exact rigid group with transaction recovery.\",\n \"properties\": {\n \"group\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"sessionId\",\n \"operationId\",\n \"group\"\n ],\n \"type\": \"object\"\n },\n \"rigid_group_edit\": {\n \"description\": \"Rename or suppress an exact rigid group with transaction recovery.\",\n \"properties\": {\n \"group\": {\n \"description\": \"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"suppressed\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"sessionId\",\n \"operationId\",\n \"group\"\n ],\n \"type\": \"object\"\n },\n \"sketch_constraint\": {\n \"description\": \"Constrain entities in one sketch. midpoint order is point,line; symmetry order entity1,entity2,symmetryLine. fix sets one entity fixed.\",\n \"properties\": {\n \"entities\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"sketch\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"horizontal\",\n \"vertical\",\n \"coincident\",\n \"parallel\",\n \"perpendicular\",\n \"tangent\",\n \"equal\",\n \"concentric\",\n \"collinear\",\n \"midpoint\",\n \"symmetry\",\n \"fix\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"sketch\",\n \"type\",\n \"entities\"\n ],\n \"type\": \"object\"\n },\n \"sketch_create\": {\n \"description\": \"Create a native component-definition sketch on an origin/construction plane or planar face. Coordinates in subsequent geometry are sketch-space mm.\",\n \"properties\": {\n \"component\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"plane\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"xy\",\n \"xz\",\n \"yz\"\n ]\n },\n {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\"\n ],\n \"type\": \"object\"\n },\n \"sketch_curve_edit\": {\n \"description\": \"Edit one native sketch curve with sketch-space mm pick. trim removes the nearest segment; extend chooses nearest endpoint; split requires an interior on-curve point; break uses neighboring intersections. Fresh replacement refs are returned; original may be deleted. In-place extend returns the original with a fresh ref only after its geometry change survives recompute. No change or empty break/split fails. Full trim deletion requires allowDelete true. Linked/derived/deferred-compute geometry refused.\",\n \"properties\": {\n \"action\": {\n \"enum\": [\n \"trim\",\n \"extend\",\n \"split\",\n \"break\"\n ]\n },\n \"allowDelete\": {\n \"type\": \"boolean\"\n },\n \"createConstraints\": {\n \"type\": \"boolean\"\n },\n \"curve\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"pick\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"sketch\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"sessionId\",\n \"operationId\",\n \"sketch\",\n \"curve\",\n \"action\",\n \"pick\"\n ],\n \"type\": \"object\"\n },\n \"sketch_diagnostics\": {\n \"description\": \"Read native sketch health/message, fully-constrained/fixed/linked/reference flags, geometric constraints and driving dimensions. Reports no solver DOF count or conflict-set explanation; no recompute/mutation.\",\n \"properties\": {\n \"sketch\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"sketch\"\n ],\n \"type\": \"object\"\n },\n \"sketch_dimension\": {\n \"description\": \"Add driving dimensions. Distance uses two point references; radius/diameter one curve; angle two lines. Numeric expressions use mm or deg.\",\n \"properties\": {\n \"entities\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"expression\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"parameterName\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"sketch\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"type\": {\n \"enum\": [\n \"distance\",\n \"horizontal\",\n \"vertical\",\n \"radius\",\n \"diameter\",\n \"angle\"\n ]\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"sketch\",\n \"type\",\n \"entities\",\n \"expression\",\n \"position\"\n ],\n \"type\": \"object\"\n },\n \"sketch_edit\": {\n \"description\": \"Move sketch points/endpoints/centers in sketch-space mm, change radius or construction/fixed flags; solver failure aborts the operation.\",\n \"properties\": {\n \"changes\": {\n \"additionalProperties\": false,\n \"minProperties\": 1,\n \"properties\": {\n \"center\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"construction\": {\n \"type\": \"boolean\"\n },\n \"end\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"fixed\": {\n \"type\": \"boolean\"\n },\n \"position\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"radius\": {\n \"type\": \"number\"\n },\n \"start\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"entity\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"sketch\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"sketch\",\n \"entity\",\n \"changes\"\n ],\n \"type\": \"object\"\n },\n \"sketch_geometry\": {\n \"description\": \"Create a transactionally grouped set of sketch primitives. Numeric geometry uses mm and arc sweeps/polygon angles use deg.\",\n \"properties\": {\n \"items\": {\n \"items\": {\n \"oneOf\": [\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"position\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"type\": {\n \"enum\": [\n \"point\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"position\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"construction\": {\n \"type\": \"boolean\"\n },\n \"end\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"start\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"type\": {\n \"enum\": [\n \"line\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"start\",\n \"end\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"construction\": {\n \"type\": \"boolean\"\n },\n \"end\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"start\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"type\": {\n \"enum\": [\n \"rectangle\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"start\",\n \"end\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"center\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"construction\": {\n \"type\": \"boolean\"\n },\n \"radius\": {\n \"exclusiveMinimum\": 0,\n \"type\": \"number\"\n },\n \"type\": {\n \"enum\": [\n \"circle\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"center\",\n \"radius\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"center\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"construction\": {\n \"type\": \"boolean\"\n },\n \"start\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"sweep\": {\n \"type\": \"number\"\n },\n \"type\": {\n \"enum\": [\n \"arc\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"center\",\n \"start\",\n \"sweep\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"angle\": {\n \"type\": \"number\"\n },\n \"center\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"construction\": {\n \"type\": \"boolean\"\n },\n \"radius\": {\n \"exclusiveMinimum\": 0,\n \"type\": \"number\"\n },\n \"sides\": {\n \"maximum\": 128,\n \"minimum\": 3,\n \"type\": \"integer\"\n },\n \"type\": {\n \"enum\": [\n \"polygon\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"center\",\n \"radius\",\n \"sides\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"construction\": {\n \"type\": \"boolean\"\n },\n \"end\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"start\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"type\": {\n \"enum\": [\n \"slot\"\n ]\n },\n \"width\": {\n \"exclusiveMinimum\": 0,\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"type\",\n \"start\",\n \"end\",\n \"width\"\n ],\n \"type\": \"object\"\n },\n {\n \"additionalProperties\": false,\n \"properties\": {\n \"closed\": {\n \"type\": \"boolean\"\n },\n \"construction\": {\n \"type\": \"boolean\"\n },\n \"points\": {\n \"items\": {\n \"items\": {\n \"type\": \"number\"\n },\n \"maxItems\": 3,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"maxItems\": 128,\n \"minItems\": 2,\n \"type\": \"array\"\n },\n \"type\": {\n \"enum\": [\n \"spline\"\n ]\n }\n },\n \"required\": [\n \"type\",\n \"points\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"maxItems\": 128,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"sketch\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"sketch\",\n \"items\"\n ],\n \"type\": \"object\"\n },\n \"sketch_offset\": {\n \"description\": \"Modern createOffsetInput/addOffset2. Curves must be native 2D, unique, in connected flow order (never reordered). Nonzero signed mm number/expression: positive right, negative left; a single circle/ellipse positive outside. Topology matched defaults true. Read back native signed distance, parent/child refs and controlling parameter after recompute. No retired Sketch.offset fallback.\",\n \"properties\": {\n \"curves\": {\n \"items\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"distance\": {\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n }\n ]\n },\n \"sketch\": {\n \"description\": \"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"topologyMatched\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [\n \"op\",\n \"target\",\n \"sessionId\",\n \"operationId\",\n \"sketch\",\n \"curves\",\n \"distance\"\n ],\n \"type\": \"object\"\n },\n \"sketch_project\": {\n \"description\": \"Project selected topology into a sketch with Fusion associative projection.\",\n \"properties\": {\n \"entities\": {\n \"items\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n },\n \"maxItems\": 256,\n \"minItems\": 1,\n \"type\": \"array\"\n },\n \"sketch\": {\n \"description\": \"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\n \"required\": [\n \"documentId\",\n \"revision\",\n \"objectType\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\",\n \"sketch\",\n \"entities\"\n ],\n \"type\": \"object\"\n },\n \"transaction_probe\": {\n \"description\": \"Verify runtime PTransaction abort+commit using temporary user parameters, remove probe data and compare semantic restoration. Required once per running add-in session before feature/sketch/atomic-batch writes. Returns fresh target; inspect again for current references.\",\n \"properties\": {},\n \"required\": [\n \"op\",\n \"sessionId\",\n \"operationId\",\n \"target\"\n ],\n \"type\": \"object\"\n }\n },\n \"output\": \"{\\\"_timeoutHint\\\":\\\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\\\",\\\"idempotency\\\":{\\\"admission\\\":\\\"FULL SQLite commit before native dispatch\\\",\\\"capacity\\\":10000,\\\"databaseByteLimit\\\":67108864,\\\"recordByteLimit\\\":4194304,\\\"restartBehavior\\\":\\\"old-session history is readable; native execution never replays across sessions\\\",\\\"scope\\\":\\\"durable history keyed by add-in session and operation ID\\\",\\\"storageVersion\\\":1},\\\"operations\\\":{\\\"assembly_properties\\\":{\\\"description\\\":\\\"High-accuracy physical properties of whole root assembly (default) or an exact Component/Occurrence/BRepBody. Returns mass kg, volume mm3, area mm2, center of mass mm, mean density kg/mm3 and definition/instance coordinate scope.\\\",\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\"],\\\"type\\\":\\\"object\\\"},\\\"bom\\\":{\\\"description\\\":\\\"Structured component-definition and instance BOM; quantities by actual identity, root bodies plus nested children; purchased metadata collapses subtrees unless exploded. Physical mass includes all unsuppressed bodies exactly once per instance. Includes exact current active configuration provenance; incomplete configuration scope refuses. Visibility does not remove quantity.\\\",\\\"properties\\\":{\\\"explodePurchased\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\"],\\\"type\\\":\\\"object\\\"},\\\"bom_export\\\":{\\\"description\\\":\\\"Export flat grouped purchasing rows or structured parent/path/depth instance rows and supplier provenance to CSV with exclusive/atomic publication. This external effect is separate from model transactions. Both CSV modes include document/revision and current active configuration table/row provenance.\\\",\\\"properties\\\":{\\\"explodePurchased\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"filename\\\":{\\\"type\\\":\\\"string\\\"},\\\"mode\\\":{\\\"enum\\\":[\\\"flat\\\",\\\"structured\\\"]},\\\"overwrite\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"filename\\\"],\\\"type\\\":\\\"object\\\"},\\\"cad_import\\\":{\\\"description\\\":\\\"Import a pre-downloaded local STEP/SAT into a new wrapper component in Hybrid design. Validate optional expected SHA-256, record actual source/hash/supplier metadata, preserve camera, measure model recovery. Does not fetch URLs or create cloud documents. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\\\",\\\"properties\\\":{\\\"asPurchased\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"filename\\\":{\\\"type\\\":\\\"string\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"parent\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"provenance\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"description\\\":{\\\"type\\\":\\\"string\\\"},\\\"sourceUrl\\\":{\\\"type\\\":\\\"string\\\"},\\\"supplier\\\":{\\\"type\\\":\\\"string\\\"},\\\"supplierPartNumber\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"supplier\\\",\\\"supplierPartNumber\\\",\\\"sourceUrl\\\"],\\\"type\\\":\\\"object\\\"},\\\"sha256\\\":{\\\"type\\\":\\\"string\\\"},\\\"transform\\\":{\\\"additionalProperties\\\":false,\\\"description\\\":\\\"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\\\",\\\"properties\\\":{\\\"angle\\\":{\\\"type\\\":\\\"number\\\"},\\\"axis\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"},\\\"position\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"filename\\\",\\\"provenance\\\"],\\\"type\\\":\\\"object\\\"},\\\"component_create\\\":{\\\"description\\\":\\\"Create a native internal component and its first occurrence in a Hybrid design. parent is a component definition; edits to it affect every instance. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\\\",\\\"properties\\\":{\\\"metadata\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"asPurchased\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"description\\\":{\\\"type\\\":\\\"string\\\"},\\\"excludeFromBom\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"partNumber\\\":{\\\"type\\\":\\\"string\\\"},\\\"sourceUrl\\\":{\\\"type\\\":\\\"string\\\"},\\\"supplier\\\":{\\\"type\\\":\\\"string\\\"},\\\"supplierPartNumber\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"parent\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"transform\\\":{\\\"additionalProperties\\\":false,\\\"description\\\":\\\"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\\\",\\\"properties\\\":{\\\"angle\\\":{\\\"type\\\":\\\"number\\\"},\\\"axis\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"},\\\"position\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"name\\\"],\\\"type\\\":\\\"object\\\"},\\\"component_metadata\\\":{\\\"description\\\":\\\"Update component-definition name/part number/description and persistent supplier or BOM attributes. Shared occurrences all see this metadata.\\\",\\\"properties\\\":{\\\"changes\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"asPurchased\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"description\\\":{\\\"type\\\":\\\"string\\\"},\\\"excludeFromBom\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"partNumber\\\":{\\\"type\\\":\\\"string\\\"},\\\"sourceUrl\\\":{\\\"type\\\":\\\"string\\\"},\\\"supplier\\\":{\\\"type\\\":\\\"string\\\"},\\\"supplierPartNumber\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"component\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"changes\\\"],\\\"type\\\":\\\"object\\\"},\\\"configuration_inspect\\\":{\\\"description\\\":\\\"Read the loaded Design configuration graph without activation or recompute: ordinary rows, the separate native reserved test row, all supported typed cells including inactive/test cells, exact controlled-source links and current ordinary row. Unreadable fields and unknown/theme/hierarchical/inserted scopes remain explicit incomplete diagnostics. Configuration lifecycle and configured-design model mutations remain disabled pending native recovery/archive gates.\\\",\\\"properties\\\":{},\\\"required\\\":[\\\"op\\\",\\\"target\\\"],\\\"type\\\":\\\"object\\\"},\\\"construction_axis\\\":{\\\"description\\\":\\\"Create a parametric axis from native references (edge/circular face/two intersecting planes/two distinct points). Root-space external geometry requires exact occurrence context. For cross-component geometry into a non-root target component, creationOccurrence must identify a root-context instance of that target. Returns component-space native axis geometry/health. No direct-only infinite-line or preview snap APIs.\\\",\\\"properties\\\":{\\\"component\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"creationOccurrence\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"entities\\\":{\\\"items\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":2,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"edge\\\",\\\"circular_face\\\",\\\"two_planes\\\",\\\"two_points\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"type\\\",\\\"entities\\\"],\\\"type\\\":\\\"object\\\"},\\\"entity_delete\\\":{\\\"description\\\":\\\"Delete sketch geometry or independently deletable timeline features. Model transaction and semantic recovery cover downstream failures; document and external file deletion are excluded.\\\",\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"export\\\":{\\\"description\\\":\\\"Export entire design using runtime-checked API. Preflight and unique same-filesystem staging preserve the destination on failure; publish only nonempty verified output. Availability differs by Fusion build. STL numeric coordinates use mm.\\\",\\\"properties\\\":{\\\"format\\\":{\\\"default\\\":\\\"step\\\",\\\"enum\\\":[\\\"step\\\",\\\"stl\\\",\\\"3mf\\\",\\\"f3d\\\",\\\"iges\\\",\\\"sat\\\",\\\"smt\\\",\\\"usdz\\\",\\\"fbx\\\",\\\"skp\\\"]},\\\"outputPath\\\":{\\\"type\\\":\\\"string\\\"},\\\"overwrite\\\":{\\\"default\\\":false,\\\"type\\\":\\\"boolean\\\"},\\\"refinement\\\":{\\\"default\\\":\\\"medium\\\",\\\"enum\\\":[\\\"low\\\",\\\"medium\\\",\\\"high\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"outputPath\\\"],\\\"type\\\":\\\"object\\\"},\\\"feature_create\\\":{\\\"description\\\":\\\"Create a typed native solid feature. All length quantities are mm (or expressions), angles deg. Cut/intersect require explicit participant bodies. Join needs a single existing component body; combine selects multiple bodies explicitly. Feature availability is runtime-checked; missing APIs fail before commit.\\\",\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"direction\\\":{\\\"enum\\\":[\\\"positive\\\",\\\"negative\\\",\\\"symmetric\\\"]},\\\"distance\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operation\\\":{\\\"enum\\\":[\\\"new_body\\\",\\\"join\\\",\\\"cut\\\",\\\"intersect\\\"]},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"profiles\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"taper\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"extrude\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"profiles\\\",\\\"distance\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"angle\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"axis\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operation\\\":{\\\"enum\\\":[\\\"new_body\\\",\\\"join\\\",\\\"cut\\\",\\\"intersect\\\"]},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"profiles\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"revolve\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"profiles\\\",\\\"axis\\\",\\\"angle\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"edges\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"radius\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"tangentChain\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"fillet\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"edges\\\",\\\"radius\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"distance\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"edges\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"tangentChain\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"chamfer\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"edges\\\",\\\"distance\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"faces\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"tangentChain\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"thickness\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"type\\\":{\\\"enum\\\":[\\\"shell\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"faces\\\",\\\"thickness\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"depth\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"diameter\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"points\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"hole\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"points\\\",\\\"diameter\\\",\\\"depth\\\",\\\"bodies\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operation\\\":{\\\"enum\\\":[\\\"new_body\\\",\\\"join\\\",\\\"cut\\\",\\\"intersect\\\"]},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"profiles\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"loft\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"profiles\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operation\\\":{\\\"enum\\\":[\\\"new_body\\\",\\\"join\\\",\\\"cut\\\",\\\"intersect\\\"]},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"path\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"profiles\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"sweep\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"profiles\\\",\\\"path\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"body\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keepTools\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operation\\\":{\\\"enum\\\":[\\\"join\\\",\\\"cut\\\",\\\"intersect\\\"]},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"tools\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"combine\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"body\\\",\\\"tools\\\",\\\"operation\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"extend\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"plane\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"xy\\\",\\\"xz\\\",\\\"yz\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"split\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"bodies\\\",\\\"plane\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"angle\\\":{\\\"type\\\":\\\"number\\\"},\\\"axis\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"},\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"origin\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"translation\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"move\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"bodies\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"plane\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"xy\\\",\\\"xz\\\",\\\"yz\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"mirror\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"bodies\\\",\\\"plane\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"axis\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"axis2\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"count\\\":{\\\"maximum\\\":1000,\\\"minimum\\\":2,\\\"type\\\":\\\"integer\\\"},\\\"count2\\\":{\\\"maximum\\\":1000,\\\"minimum\\\":1,\\\"type\\\":\\\"integer\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"spacing\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"spacing2\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"rectangular_pattern\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"bodies\\\",\\\"axis\\\",\\\"count\\\",\\\"spacing\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"angle\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"axis\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"bodies\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"count\\\":{\\\"maximum\\\":1000,\\\"minimum\\\":2,\\\"type\\\":\\\"integer\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"circular_pattern\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"bodies\\\",\\\"axis\\\",\\\"count\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"angle\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"faces\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"plane\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"xy\\\",\\\"xz\\\",\\\"yz\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"tangentChain\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"draft\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"faces\\\",\\\"plane\\\",\\\"angle\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"designation\\\":{\\\"type\\\":\\\"string\\\"},\\\"faces\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"internal\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"modeled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"documentId\\\":{\\\"type\\\":\\\"string\\\"},\\\"revision\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"threadClass\\\":{\\\"type\\\":\\\"string\\\"},\\\"threadType\\\":{\\\"type\\\":\\\"string\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"thread\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"faces\\\",\\\"internal\\\",\\\"threadType\\\",\\\"designation\\\",\\\"threadClass\\\"],\\\"type\\\":\\\"object\\\"}],\\\"properties\\\":{\\\"angle\\\":{},\\\"axis\\\":{},\\\"axis2\\\":{},\\\"bodies\\\":{},\\\"body\\\":{},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"count\\\":{},\\\"count2\\\":{},\\\"depth\\\":{},\\\"designation\\\":{},\\\"diameter\\\":{},\\\"direction\\\":{},\\\"distance\\\":{},\\\"edges\\\":{},\\\"extend\\\":{},\\\"faces\\\":{},\\\"internal\\\":{},\\\"keepTools\\\":{},\\\"modeled\\\":{},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"operation\\\":{},\\\"origin\\\":{},\\\"path\\\":{},\\\"plane\\\":{},\\\"points\\\":{},\\\"profiles\\\":{},\\\"radius\\\":{},\\\"spacing\\\":{},\\\"spacing2\\\":{},\\\"tangentChain\\\":{},\\\"taper\\\":{},\\\"thickness\\\":{},\\\"threadClass\\\":{},\\\"threadType\\\":{},\\\"tools\\\":{},\\\"translation\\\":{},\\\"type\\\":{\\\"enum\\\":[\\\"extrude\\\",\\\"revolve\\\",\\\"fillet\\\",\\\"chamfer\\\",\\\"shell\\\",\\\"hole\\\",\\\"loft\\\",\\\"sweep\\\",\\\"combine\\\",\\\"split\\\",\\\"move\\\",\\\"mirror\\\",\\\"rectangular_pattern\\\",\\\"circular_pattern\\\",\\\"draft\\\",\\\"thread\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"type\\\"],\\\"type\\\":\\\"object\\\"},\\\"feature_edit\\\":{\\\"description\\\":\\\"Rename/suppress a feature or change expressions of model parameters whose createdBy is that exact feature; read health and abort on downstream errors.\\\",\\\"properties\\\":{\\\"feature\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"parameters\\\":{\\\"additionalProperties\\\":{\\\"type\\\":\\\"string\\\"},\\\"type\\\":\\\"object\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"feature\\\"],\\\"type\\\":\\\"object\\\"},\\\"geometry_query\\\":{\\\"description\\\":\\\"Complete body-scoped topology query, no arbitrary first-match selection. selection one (default) refuses zero/multiple matches; many may return empty. Geometry types are exact native types; size ranges inclusive in mm/mm2, near is minimum distance in the explicit frame; direction is outward planar face normal or linear edge tangent. Returned refs retain instance context even for component-space filters. Exceeding maxResults fails rather than truncating.\\\",\\\"properties\\\":{\\\"body\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"filters\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"area\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"max\\\":{\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"},\\\"min\\\":{\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"direction\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"orientation\\\":{\\\"enum\\\":[\\\"same\\\",\\\"parallel\\\"]},\\\"tolerance\\\":{\\\"maximum\\\":90,\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"},\\\"vector\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"}},\\\"required\\\":[\\\"vector\\\"],\\\"type\\\":\\\"object\\\"},\\\"length\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"max\\\":{\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"},\\\"min\\\":{\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"near\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"point\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"},\\\"tolerance\\\":{\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[\\\"point\\\",\\\"tolerance\\\"],\\\"type\\\":\\\"object\\\"},\\\"radius\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"max\\\":{\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"},\\\"min\\\":{\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"Plane\\\",\\\"Cylinder\\\",\\\"Cone\\\",\\\"Sphere\\\",\\\"Torus\\\",\\\"NurbsSurface\\\",\\\"Line3D\\\",\\\"Arc3D\\\",\\\"Circle3D\\\",\\\"Ellipse3D\\\",\\\"EllipticalArc3D\\\",\\\"NurbsCurve3D\\\",\\\"Point3D\\\",\\\"degenerate\\\"]}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"kind\\\":{\\\"enum\\\":[\\\"faces\\\",\\\"edges\\\",\\\"vertices\\\"]},\\\"maxResults\\\":{\\\"maximum\\\":1024,\\\"minimum\\\":1,\\\"type\\\":\\\"integer\\\"},\\\"selection\\\":{\\\"enum\\\":[\\\"one\\\",\\\"many\\\"]},\\\"space\\\":{\\\"enum\\\":[\\\"root\\\",\\\"component\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"body\\\",\\\"kind\\\",\\\"space\\\"],\\\"type\\\":\\\"object\\\"},\\\"health\\\":{\\\"description\\\":\\\"Read timeline warnings/errors. recompute:true also requires current target revision, sessionId and operationId.\\\",\\\"properties\\\":{\\\"recompute\\\":{\\\"default\\\":false,\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\"],\\\"type\\\":\\\"object\\\"},\\\"inspect\\\":{\\\"description\\\":\\\"Inspect the active Design without mutation. Returns target identity/revision, native component-space bodies and occurrence transforms, parameters and feature health.\\\",\\\"properties\\\":{},\\\"required\\\":[\\\"op\\\"],\\\"type\\\":\\\"object\\\"},\\\"inspect_entity\\\":{\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Exact reference returned by inspect; resolves uniquely with document/revision/type/occurrence guards.\\\",\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"interference\\\":{\\\"description\\\":\\\"Analyze root-context occurrences/body proxies; returns overlap volume mm3 or touching. Does not create interference bodies.\\\",\\\"properties\\\":{\\\"entities\\\":{\\\"items\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"includeTouching\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"volumeTolerance\\\":{\\\"minimum\\\":0,\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"entities\\\"],\\\"type\\\":\\\"object\\\"},\\\"joint_create\\\":{\\\"description\\\":\\\"Create an as-built joint without moving occurrences. Non-rigid motion requires explicit joint geometry; x/y/z are joint-coordinate directions. Limits and drive values use mm/deg. Seven native motion types; ball uses joint Z pitch/X yaw; planar uses native primary slide direction reported on readback. Use regular_joint_create for geometry-solving placement.\\\",\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrenceOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrenceTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"rigid\\\"]}},\\\"required\\\":[\\\"type\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"axis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrenceOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrenceTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"rotationLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rotationValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"revolute\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"geometry\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"axis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrenceOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrenceTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"slideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"slideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"slider\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"geometry\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"axis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrenceOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrenceTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"rotationLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rotationValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"slideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"slideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"cylindrical\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"geometry\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"axis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrenceOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrenceTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"rotationLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rotationValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"slideAxis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"slideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"slideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"pin_slot\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"geometry\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"axis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrenceOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrenceTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"primarySlideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"primarySlideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"rotationLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rotationValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"secondarySlideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"secondarySlideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"planar\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"geometry\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrenceOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrenceTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"pitchLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"pitchValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"rollLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rollValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"target\\\":{\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"ball\\\"]},\\\"yawLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"yawValue\\\":{\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[\\\"type\\\",\\\"geometry\\\"],\\\"type\\\":\\\"object\\\"}],\\\"properties\\\":{\\\"axis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrenceOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrenceTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"pitchLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"pitchValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"primarySlideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"primarySlideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"rollLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rollValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"rotationLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rotationValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"secondarySlideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"secondarySlideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"slideAxis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"slideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"slideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"rigid\\\",\\\"revolute\\\",\\\"slider\\\",\\\"cylindrical\\\",\\\"pin_slot\\\",\\\"planar\\\",\\\"ball\\\"]},\\\"yawLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"yawValue\\\":{\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"type\\\",\\\"occurrenceOne\\\",\\\"occurrenceTwo\\\"],\\\"type\\\":\\\"object\\\"},\\\"joint_delete\\\":{\\\"description\\\":\\\"Delete one selected Joint or AsBuiltJoint with recovery verification.\\\",\\\"properties\\\":{\\\"joint\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"joint\\\"],\\\"type\\\":\\\"object\\\"},\\\"joint_edit\\\":{\\\"description\\\":\\\"Edit joint name/suppression, enabled limits, rest and drive values; wrong motion type or out-of-limit values fail with recovery. For driven root joints, active motion links must preserve their settings and their partner motion must follow the native ratio; a coupling mismatch aborts.\\\",\\\"properties\\\":{\\\"joint\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"pitchLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"pitchValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"primarySlideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"primarySlideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"rollLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rollValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"rotationLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rotationValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"secondarySlideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"secondarySlideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"slideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"slideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"yawLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"yawValue\\\":{\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"joint\\\"],\\\"type\\\":\\\"object\\\"},\\\"joint_origin_create\\\":{\\\"description\\\":\\\"Create a native component-definition joint origin from guarded native geometry, with mm offsets/deg angle and optional straight axis references. Child occurrence origin references are exposed by inspect_entity(occurrence).\\\",\\\"properties\\\":{\\\"angle\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"component\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"flipped\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"edge\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"maxLength\\\":120,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"},\\\"offsetX\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"offsetY\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"offsetZ\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"xAxisEntity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"zAxisEntity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"geometry\\\"],\\\"type\\\":\\\"object\\\"},\\\"joint_origin_delete\\\":{\\\"description\\\":\\\"Delete a native joint origin; unhealthy downstream joints cause transaction rollback.\\\",\\\"properties\\\":{\\\"origin\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"origin\\\"],\\\"type\\\":\\\"object\\\"},\\\"joint_origin_edit\\\":{\\\"description\\\":\\\"Edit a native joint origin definition; rolls before its timeline item and restores the original marker in finally. Recomputes and verifies attachment, axes, offsets, angle, name and flip.\\\",\\\"properties\\\":{\\\"angle\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"flipped\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"geometry\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"edge\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"maxLength\\\":120,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"},\\\"offsetX\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"offsetY\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"offsetZ\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"origin\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"xAxisEntity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"zAxisEntity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"origin\\\"],\\\"type\\\":\\\"object\\\"},\\\"material_assign\\\":{\\\"description\\\":\\\"Assign a loaded library or document material to an exact native Component/BRepBody; verify material ID readback with model transaction recovery. Query assembly_properties for resulting mass.\\\",\\\"properties\\\":{\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"libraryId\\\":{\\\"type\\\":\\\"string\\\"},\\\"materialId\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"entity\\\",\\\"materialId\\\"],\\\"type\\\":\\\"object\\\"},\\\"material_list\\\":{\\\"description\\\":\\\"List loaded material libraries and matching materials by stable library/material IDs. Omit libraryId for document materials.\\\",\\\"properties\\\":{\\\"libraryId\\\":{\\\"type\\\":\\\"string\\\"},\\\"limit\\\":{\\\"maximum\\\":1000,\\\"minimum\\\":1,\\\"type\\\":\\\"integer\\\"},\\\"query\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\"],\\\"type\\\":\\\"object\\\"},\\\"mcmaster_discover\\\":{\\\"description\\\":\\\"Discover Fusion native Insert McMaster-Carr command and requirements in the active design.\\\",\\\"properties\\\":{},\\\"required\\\":[\\\"op\\\"],\\\"type\\\":\\\"object\\\"},\\\"mcmaster_open\\\":{\\\"description\\\":\\\"Invoke Fusion native McMaster UI in the targeted Hybrid design. Interactive external operation: completion/insert/cancel stays with Fusion; inspect afterward. Idempotency records launch only.\\\",\\\"properties\\\":{},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\"],\\\"type\\\":\\\"object\\\"},\\\"measure\\\":{\\\"description\\\":\\\"Native engineering minimum distance or angle in root assembly space. Non-root definition refs require an occurrence context. Distance needs2 entities; angle needs2 lines/planes or3 points (second apex). Returns mm/deg and native witness positions in root mm. witnessValidation identifies native points or native geometry directions used for valid parallel angles with degenerate native points; degenerate point angles and unavailable/inconsistent witnesses fail.\\\",\\\"properties\\\":{\\\"entities\\\":{\\\"items\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"space\\\":{\\\"enum\\\":[\\\"root\\\"]},\\\"type\\\":{\\\"enum\\\":[\\\"distance\\\",\\\"angle\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"type\\\",\\\"space\\\",\\\"entities\\\"],\\\"type\\\":\\\"object\\\"},\\\"motion_link_create\\\":{\\\"description\\\":\\\"Create a native motion link between two root-owned joints, or two different motions of jointOne when jointTwo is omitted. Positive ratio magnitudes use mm for translation and deg for rotation; reversed selects opposite direction. Requires the November 2025+ API; no script fallback.\\\",\\\"properties\\\":{\\\"jointOne\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"jointTwo\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"motionOne\\\":{\\\"enum\\\":[\\\"rotation\\\",\\\"slide\\\",\\\"primarySlide\\\",\\\"secondarySlide\\\",\\\"pitch\\\",\\\"roll\\\",\\\"yaw\\\"]},\\\"motionTwo\\\":{\\\"enum\\\":[\\\"rotation\\\",\\\"slide\\\",\\\"primarySlide\\\",\\\"secondarySlide\\\",\\\"pitch\\\",\\\"roll\\\",\\\"yaw\\\"]},\\\"name\\\":{\\\"maxLength\\\":120,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"},\\\"reversed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"valueOne\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"valueTwo\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"jointOne\\\",\\\"motionOne\\\",\\\"motionTwo\\\",\\\"valueOne\\\",\\\"valueTwo\\\"],\\\"type\\\":\\\"object\\\"},\\\"motion_link_delete\\\":{\\\"description\\\":\\\"Delete a root-owned motion link under the same transaction/recovery contract.\\\",\\\"properties\\\":{\\\"link\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"link\\\"],\\\"type\\\":\\\"object\\\"},\\\"motion_link_edit\\\":{\\\"description\\\":\\\"Edit a root-owned motion link ratio, degree-of-freedom pair, direction, name or suppression. Joint membership is immutable; recreate the link to change members. Verify exact joint identities, ratio, flags and health.\\\",\\\"properties\\\":{\\\"link\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"motionOne\\\":{\\\"enum\\\":[\\\"rotation\\\",\\\"slide\\\",\\\"primarySlide\\\",\\\"secondarySlide\\\",\\\"pitch\\\",\\\"roll\\\",\\\"yaw\\\"]},\\\"motionTwo\\\":{\\\"enum\\\":[\\\"rotation\\\",\\\"slide\\\",\\\"primarySlide\\\",\\\"secondarySlide\\\",\\\"pitch\\\",\\\"roll\\\",\\\"yaw\\\"]},\\\"name\\\":{\\\"maxLength\\\":120,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"},\\\"reversed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"valueOne\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"valueTwo\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"link\\\"],\\\"type\\\":\\\"object\\\"},\\\"new_design\\\":{\\\"description\\\":\\\"Create an unnamed unsaved parametric hybrid Design; name is retained as requestedName metadata to keep failure recovery free of save dialogs. Optional box dimensions in mm create a driving-parameter fixture. Never edits an existing document.\\\",\\\"properties\\\":{\\\"box\\\":{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"depth\\\":{\\\"exclusiveMinimum\\\":0,\\\"type\\\":\\\"number\\\"},\\\"height\\\":{\\\"exclusiveMinimum\\\":0,\\\"type\\\":\\\"number\\\"},\\\"width\\\":{\\\"exclusiveMinimum\\\":0,\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[\\\"width\\\",\\\"height\\\",\\\"depth\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrence_delete\\\":{\\\"description\\\":\\\"Delete one selected occurrence through the shared transaction executor.\\\",\\\"properties\\\":{\\\"occurrence\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"occurrence\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrence_insert\\\":{\\\"description\\\":\\\"Insert another occurrence of an existing definition; independentCopy:true uses Paste New to create a separate definition. Nested placement is in parent component coordinates. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\\\",\\\"properties\\\":{\\\"component\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"independentCopy\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"parent\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"transform\\\":{\\\"additionalProperties\\\":false,\\\"description\\\":\\\"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\\\",\\\"properties\\\":{\\\"angle\\\":{\\\"type\\\":\\\"number\\\"},\\\"axis\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"},\\\"position\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"component\\\"],\\\"type\\\":\\\"object\\\"},\\\"occurrence_update\\\":{\\\"description\\\":\\\"Set occurrence pose in its assembly context and capture position; explicit grounding/ungrounding. Grounded or constrained transforms fail with recovery.\\\",\\\"properties\\\":{\\\"grounded\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"groundedToParent\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"occurrence\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"transform\\\":{\\\"additionalProperties\\\":false,\\\"description\\\":\\\"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\\\",\\\"properties\\\":{\\\"angle\\\":{\\\"type\\\":\\\"number\\\"},\\\"axis\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"},\\\"position\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":3,\\\"type\\\":\\\"array\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"occurrence\\\"],\\\"type\\\":\\\"object\\\"},\\\"parameter_batch\\\":{\\\"description\\\":\\\"Atomic sequential create/set/delete parameter edits with one recompute+health gate; delete supports user parameters only. Any failure aborts all edits and reports semantic recovery.\\\",\\\"properties\\\":{\\\"changes\\\":{\\\"items\\\":{\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"action\\\":{\\\"enum\\\":[\\\"create\\\"]},\\\"comment\\\":{\\\"type\\\":\\\"string\\\"},\\\"expression\\\":{\\\"type\\\":\\\"string\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"unit\\\":{\\\"enum\\\":[\\\"mm\\\",\\\"deg\\\",\\\"kg\\\",\\\"\\\"]}},\\\"required\\\":[\\\"action\\\",\\\"name\\\",\\\"expression\\\",\\\"unit\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"action\\\":{\\\"enum\\\":[\\\"set\\\"]},\\\"expression\\\":{\\\"type\\\":\\\"string\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"action\\\",\\\"name\\\",\\\"expression\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"action\\\":{\\\"enum\\\":[\\\"delete\\\"]},\\\"name\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"action\\\",\\\"name\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"maxItems\\\":128,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"changes\\\"],\\\"type\\\":\\\"object\\\"},\\\"parameter_create\\\":{\\\"properties\\\":{\\\"comment\\\":{\\\"type\\\":\\\"string\\\"},\\\"expression\\\":{\\\"type\\\":\\\"string\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"unit\\\":{\\\"enum\\\":[\\\"mm\\\",\\\"deg\\\",\\\"kg\\\",\\\"\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"name\\\",\\\"expression\\\",\\\"unit\\\"],\\\"type\\\":\\\"object\\\"},\\\"parameter_set\\\":{\\\"description\\\":\\\"Set an expression, recompute and inspect health. Failure restores old expression and reports a semantic recovery witness; not an atomic transaction.\\\",\\\"properties\\\":{\\\"expression\\\":{\\\"type\\\":\\\"string\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"name\\\",\\\"expression\\\"],\\\"type\\\":\\\"object\\\"},\\\"plane_create\\\":{\\\"description\\\":\\\"Create offset plane (offset in mm) or angled plane around axis (angle in deg).\\\",\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"offset\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"plane\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"xy\\\",\\\"xz\\\",\\\"yz\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"offset\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"offset\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"angle\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"axis\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"op\\\":{\\\"type\\\":\\\"string\\\"},\\\"operationId\\\":{\\\"type\\\":\\\"string\\\"},\\\"plane\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"xy\\\",\\\"xz\\\",\\\"yz\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"sessionId\\\":{\\\"type\\\":\\\"string\\\"},\\\"target\\\":{\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"angle\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"axis\\\",\\\"angle\\\"],\\\"type\\\":\\\"object\\\"}],\\\"properties\\\":{\\\"angle\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"axis\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"offset\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"plane\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"xy\\\",\\\"xz\\\",\\\"yz\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"type\\\":{\\\"enum\\\":[\\\"offset\\\",\\\"angle\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"type\\\"],\\\"type\\\":\\\"object\\\"},\\\"regular_joint_create\\\":{\\\"description\\\":\\\"Create a geometry-solving regular joint in the root component using two distinct instance-context attachments or joint origins. All seven native motion families; offsets mm, angle and angular limits deg. Read back freshly resolved attachment graph, native parameters and root-space occurrence placement. Root/non-root sides must be unambiguous; both grounded and ancestor/descendant pairs are refused. Inferred joints are unsupported. Existing pending positions must be captured or reverted first. Before applying drive values, checks native joint-transform anchor offset magnitude/axiality and zero-angle axis collinearity. Native joint matrices have explicit provenance; physical angle/flip sense requires independent occurrence-geometry acceptance.\\\",\\\"properties\\\":{\\\"angle\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"axis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"flipped\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"geometryOne\\\":{\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"edge\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"origin\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"origin\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"geometryTwo\\\":{\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"edge\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"origin\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"origin\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"locked\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"offset\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"pitchLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"pitchValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"primarySlideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"primarySlideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"rollLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rollValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"rotationLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"rotationValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"secondarySlideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"secondarySlideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"slideAxis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"slideLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"slideValue\\\":{\\\"type\\\":\\\"number\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"rigid\\\",\\\"revolute\\\",\\\"slider\\\",\\\"cylindrical\\\",\\\"pin_slot\\\",\\\"planar\\\",\\\"ball\\\"]},\\\"yawLimits\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"maximum\\\":{\\\"type\\\":\\\"number\\\"},\\\"maximumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"minimum\\\":{\\\"type\\\":\\\"number\\\"},\\\"minimumEnabled\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"rest\\\":{\\\"type\\\":\\\"number\\\"},\\\"restEnabled\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"yawValue\\\":{\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"type\\\",\\\"geometryOne\\\",\\\"geometryTwo\\\"],\\\"type\\\":\\\"object\\\"},\\\"regular_joint_edit\\\":{\\\"description\\\":\\\"Redefine root-owned regular joint geometry, motion family, offsets, angle, flip or lock. Restore timeline in finally and verify after recompute. Use joint_edit for name, suppression, limits and drive values; joint_delete for deletion.\\\",\\\"properties\\\":{\\\"angle\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"axis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"flipped\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"geometryOne\\\":{\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"edge\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"origin\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"origin\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"geometryTwo\\\":{\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"edge\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"entity\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"keyPoint\\\":{\\\"enum\\\":[\\\"center\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"]}},\\\"required\\\":[\\\"entity\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"origin\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"origin\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"joint\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"locked\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"offset\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"offsetX\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"offsetY\\\":{\\\"description\\\":\\\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\\\",\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"maxLength\\\":512,\\\"minLength\\\":1,\\\"type\\\":\\\"string\\\"}]},\\\"slideAxis\\\":{\\\"enum\\\":[\\\"x\\\",\\\"y\\\",\\\"z\\\"]},\\\"type\\\":{\\\"enum\\\":[\\\"rigid\\\",\\\"revolute\\\",\\\"slider\\\",\\\"cylindrical\\\",\\\"pin_slot\\\",\\\"planar\\\",\\\"ball\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"joint\\\"],\\\"type\\\":\\\"object\\\"},\\\"rigid_group_create\\\":{\\\"description\\\":\\\"Create a native rigid group from exact occurrence instances; includeChildren defaults true.\\\",\\\"properties\\\":{\\\"includeChildren\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"occurrences\\\":{\\\"items\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"occurrences\\\"],\\\"type\\\":\\\"object\\\"},\\\"rigid_group_delete\\\":{\\\"description\\\":\\\"Delete an exact rigid group with transaction recovery.\\\",\\\"properties\\\":{\\\"group\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"group\\\"],\\\"type\\\":\\\"object\\\"},\\\"rigid_group_edit\\\":{\\\"description\\\":\\\"Rename or suppress an exact rigid group with transaction recovery.\\\",\\\"properties\\\":{\\\"group\\\":{\\\"description\\\":\\\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"suppressed\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"group\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_constraint\\\":{\\\"description\\\":\\\"Constrain entities in one sketch. midpoint order is point,line; symmetry order entity1,entity2,symmetryLine. fix sets one entity fixed.\\\",\\\"properties\\\":{\\\"entities\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"sketch\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"horizontal\\\",\\\"vertical\\\",\\\"coincident\\\",\\\"parallel\\\",\\\"perpendicular\\\",\\\"tangent\\\",\\\"equal\\\",\\\"concentric\\\",\\\"collinear\\\",\\\"midpoint\\\",\\\"symmetry\\\",\\\"fix\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"sketch\\\",\\\"type\\\",\\\"entities\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_create\\\":{\\\"description\\\":\\\"Create a native component-definition sketch on an origin/construction plane or planar face. Coordinates in subsequent geometry are sketch-space mm.\\\",\\\"properties\\\":{\\\"component\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"name\\\":{\\\"type\\\":\\\"string\\\"},\\\"plane\\\":{\\\"oneOf\\\":[{\\\"enum\\\":[\\\"xy\\\",\\\"xz\\\",\\\"yz\\\"]},{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_curve_edit\\\":{\\\"description\\\":\\\"Edit one native sketch curve with sketch-space mm pick. trim removes the nearest segment; extend chooses nearest endpoint; split requires an interior on-curve point; break uses neighboring intersections. Fresh replacement refs are returned; original may be deleted. In-place extend returns the original with a fresh ref only after its geometry change survives recompute. No change or empty break/split fails. Full trim deletion requires allowDelete true. Linked/derived/deferred-compute geometry refused.\\\",\\\"properties\\\":{\\\"action\\\":{\\\"enum\\\":[\\\"trim\\\",\\\"extend\\\",\\\"split\\\",\\\"break\\\"]},\\\"allowDelete\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"createConstraints\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"curve\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"pick\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"sketch\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"sketch\\\",\\\"curve\\\",\\\"action\\\",\\\"pick\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_diagnostics\\\":{\\\"description\\\":\\\"Read native sketch health/message, fully-constrained/fixed/linked/reference flags, geometric constraints and driving dimensions. Reports no solver DOF count or conflict-set explanation; no recompute/mutation.\\\",\\\"properties\\\":{\\\"sketch\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"sketch\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_dimension\\\":{\\\"description\\\":\\\"Add driving dimensions. Distance uses two point references; radius/diameter one curve; angle two lines. Numeric expressions use mm or deg.\\\",\\\"properties\\\":{\\\"entities\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"expression\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"parameterName\\\":{\\\"type\\\":\\\"string\\\"},\\\"position\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"sketch\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"distance\\\",\\\"horizontal\\\",\\\"vertical\\\",\\\"radius\\\",\\\"diameter\\\",\\\"angle\\\"]}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"sketch\\\",\\\"type\\\",\\\"entities\\\",\\\"expression\\\",\\\"position\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_edit\\\":{\\\"description\\\":\\\"Move sketch points/endpoints/centers in sketch-space mm, change radius or construction/fixed flags; solver failure aborts the operation.\\\",\\\"properties\\\":{\\\"changes\\\":{\\\"additionalProperties\\\":false,\\\"minProperties\\\":1,\\\"properties\\\":{\\\"center\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"construction\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"end\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"fixed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"position\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"radius\\\":{\\\"type\\\":\\\"number\\\"},\\\"start\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"}},\\\"required\\\":[],\\\"type\\\":\\\"object\\\"},\\\"entity\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"sketch\\\",\\\"entity\\\",\\\"changes\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_geometry\\\":{\\\"description\\\":\\\"Create a transactionally grouped set of sketch primitives. Numeric geometry uses mm and arc sweeps/polygon angles use deg.\\\",\\\"properties\\\":{\\\"items\\\":{\\\"items\\\":{\\\"oneOf\\\":[{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"position\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"point\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"position\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"construction\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"end\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"start\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"line\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"start\\\",\\\"end\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"construction\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"end\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"start\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"rectangle\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"start\\\",\\\"end\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"center\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"construction\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"radius\\\":{\\\"exclusiveMinimum\\\":0,\\\"type\\\":\\\"number\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"circle\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"center\\\",\\\"radius\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"center\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"construction\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"start\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"sweep\\\":{\\\"type\\\":\\\"number\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"arc\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"center\\\",\\\"start\\\",\\\"sweep\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"angle\\\":{\\\"type\\\":\\\"number\\\"},\\\"center\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"construction\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"radius\\\":{\\\"exclusiveMinimum\\\":0,\\\"type\\\":\\\"number\\\"},\\\"sides\\\":{\\\"maximum\\\":128,\\\"minimum\\\":3,\\\"type\\\":\\\"integer\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"polygon\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"center\\\",\\\"radius\\\",\\\"sides\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"construction\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"end\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"start\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"slot\\\"]},\\\"width\\\":{\\\"exclusiveMinimum\\\":0,\\\"type\\\":\\\"number\\\"}},\\\"required\\\":[\\\"type\\\",\\\"start\\\",\\\"end\\\",\\\"width\\\"],\\\"type\\\":\\\"object\\\"},{\\\"additionalProperties\\\":false,\\\"properties\\\":{\\\"closed\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"construction\\\":{\\\"type\\\":\\\"boolean\\\"},\\\"points\\\":{\\\"items\\\":{\\\"items\\\":{\\\"type\\\":\\\"number\\\"},\\\"maxItems\\\":3,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"maxItems\\\":128,\\\"minItems\\\":2,\\\"type\\\":\\\"array\\\"},\\\"type\\\":{\\\"enum\\\":[\\\"spline\\\"]}},\\\"required\\\":[\\\"type\\\",\\\"points\\\"],\\\"type\\\":\\\"object\\\"}]},\\\"maxItems\\\":128,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"sketch\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"sketch\\\",\\\"items\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_offset\\\":{\\\"description\\\":\\\"Modern createOffsetInput/addOffset2. Curves must be native 2D, unique, in connected flow order (never reordered). Nonzero signed mm number/expression: positive right, negative left; a single circle/ellipse positive outside. Topology matched defaults true. Read back native signed distance, parent/child refs and controlling parameter after recompute. No retired Sketch.offset fallback.\\\",\\\"properties\\\":{\\\"curves\\\":{\\\"items\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"distance\\\":{\\\"oneOf\\\":[{\\\"type\\\":\\\"number\\\"},{\\\"type\\\":\\\"string\\\"}]},\\\"sketch\\\":{\\\"description\\\":\\\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"topologyMatched\\\":{\\\"type\\\":\\\"boolean\\\"}},\\\"required\\\":[\\\"op\\\",\\\"target\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"sketch\\\",\\\"curves\\\",\\\"distance\\\"],\\\"type\\\":\\\"object\\\"},\\\"sketch_project\\\":{\\\"description\\\":\\\"Project selected topology into a sketch with Fusion associative projection.\\\",\\\"properties\\\":{\\\"entities\\\":{\\\"items\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"},\\\"maxItems\\\":256,\\\"minItems\\\":1,\\\"type\\\":\\\"array\\\"},\\\"sketch\\\":{\\\"description\\\":\\\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\\\",\\\"required\\\":[\\\"documentId\\\",\\\"revision\\\",\\\"objectType\\\"],\\\"type\\\":\\\"object\\\"}},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\",\\\"sketch\\\",\\\"entities\\\"],\\\"type\\\":\\\"object\\\"},\\\"transaction_probe\\\":{\\\"description\\\":\\\"Verify runtime PTransaction abort+commit using temporary user parameters, remove probe data and compare semantic restoration. Required once per running add-in session before feature/sketch/atomic-batch writes. Returns fresh target; inspect again for current references.\\\",\\\"properties\\\":{},\\\"required\\\":[\\\"op\\\",\\\"sessionId\\\",\\\"operationId\\\",\\\"target\\\"],\\\"type\\\":\\\"object\\\"}},\\\"schemaVersion\\\":1,\\\"sessionId\\\":\\\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\\\",\\\"shell\\\":\\\"rust\\\",\\\"statusVerb\\\":\\\"fusion_get_app_state\\\",\\\"success\\\":true,\\\"timeoutSeconds\\\":60,\\\"transactions\\\":{\\\"externalEffects\\\":\\\"exports publish atomically; model recovery does not undo files\\\",\\\"genericAtomicBatch\\\":false,\\\"newDesignRecovery\\\":\\\"discard only the new unsaved document\\\",\\\"parameterRecovery\\\":\\\"compensating expression restore with semantic readback\\\",\\\"typedModelOperations\\\":{\\\"backend\\\":\\\"PTransaction\\\",\\\"evidence\\\":null,\\\"scope\\\":\\\"one active Fusion Design; no document lifecycle, files or cloud effects\\\",\\\"verified\\\":false}},\\\"units\\\":{\\\"angle\\\":\\\"deg\\\",\\\"area\\\":\\\"mm2\\\",\\\"length\\\":\\\"mm\\\",\\\"mass\\\":\\\"kg\\\",\\\"volume\\\":\\\"mm3\\\"}}\",\n \"schemaVersion\": 1,\n \"sessionId\": \"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\n \"shell\": \"rust\",\n \"status\": \"ok\",\n \"statusVerb\": \"fusion_get_app_state\",\n \"success\": true,\n \"timeoutSeconds\": 60,\n \"transactions\": {\n \"externalEffects\": \"exports publish atomically; model recovery does not undo files\",\n \"genericAtomicBatch\": false,\n \"newDesignRecovery\": \"discard only the new unsaved document\",\n \"parameterRecovery\": \"compensating expression restore with semantic readback\",\n \"typedModelOperations\": {\n \"backend\": \"PTransaction\",\n \"evidence\": null,\n \"scope\": \"one active Fusion Design; no document lifecycle, files or cloud effects\",\n \"verified\": false\n }\n },\n \"units\": {\n \"angle\": \"deg\",\n \"area\": \"mm2\",\n \"length\": \"mm\",\n \"mass\": \"kg\",\n \"volume\": \"mm3\"\n }\n}\n", + "stderr": "", + "returncode": 0, + "finishedAt": 1791234197.315833, + "raw": { + "_timeoutHint": "ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.", + "durationMs": 181, + "error": "", + "idempotency": { + "admission": "FULL SQLite commit before native dispatch", + "capacity": 10000, + "databaseByteLimit": 67108864, + "recordByteLimit": 4194304, + "restartBehavior": "old-session history is readable; native execution never replays across sessions", + "scope": "durable history keyed by add-in session and operation ID", + "storageVersion": 1 + }, + "operations": { + "assembly_properties": { + "description": "High-accuracy physical properties of whole root assembly (default) or an exact Component/Occurrence/BRepBody. Returns mass kg, volume mm3, area mm2, center of mass mm, mean density kg/mm3 and definition/instance coordinate scope.", + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "target" + ], + "type": "object" + }, + "bom": { + "description": "Structured component-definition and instance BOM; quantities by actual identity, root bodies plus nested children; purchased metadata collapses subtrees unless exploded. Physical mass includes all unsuppressed bodies exactly once per instance. Includes exact current active configuration provenance; incomplete configuration scope refuses. Visibility does not remove quantity.", + "properties": { + "explodePurchased": { + "type": "boolean" + } + }, + "required": [ + "op", + "target" + ], + "type": "object" + }, + "bom_export": { + "description": "Export flat grouped purchasing rows or structured parent/path/depth instance rows and supplier provenance to CSV with exclusive/atomic publication. This external effect is separate from model transactions. Both CSV modes include document/revision and current active configuration table/row provenance.", + "properties": { + "explodePurchased": { + "type": "boolean" + }, + "filename": { + "type": "string" + }, + "mode": { + "enum": [ + "flat", + "structured" + ] + }, + "overwrite": { + "type": "boolean" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "filename" + ], + "type": "object" + }, + "cad_import": { + "description": "Import a pre-downloaded local STEP/SAT into a new wrapper component in Hybrid design. Validate optional expected SHA-256, record actual source/hash/supplier metadata, preserve camera, measure model recovery. Does not fetch URLs or create cloud documents. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.", + "properties": { + "asPurchased": { + "type": "boolean" + }, + "filename": { + "type": "string" + }, + "name": { + "type": "string" + }, + "parent": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "provenance": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "sourceUrl": { + "type": "string" + }, + "supplier": { + "type": "string" + }, + "supplierPartNumber": { + "type": "string" + } + }, + "required": [ + "supplier", + "supplierPartNumber", + "sourceUrl" + ], + "type": "object" + }, + "sha256": { + "type": "string" + }, + "transform": { + "additionalProperties": false, + "description": "Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.", + "properties": { + "angle": { + "type": "number" + }, + "axis": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "position": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "filename", + "provenance" + ], + "type": "object" + }, + "component_create": { + "description": "Create a native internal component and its first occurrence in a Hybrid design. parent is a component definition; edits to it affect every instance. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.", + "properties": { + "metadata": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "asPurchased": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "excludeFromBom": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "partNumber": { + "type": "string" + }, + "sourceUrl": { + "type": "string" + }, + "supplier": { + "type": "string" + }, + "supplierPartNumber": { + "type": "string" + } + }, + "required": [], + "type": "object" + }, + "name": { + "type": "string" + }, + "parent": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "transform": { + "additionalProperties": false, + "description": "Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.", + "properties": { + "angle": { + "type": "number" + }, + "axis": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "position": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "name" + ], + "type": "object" + }, + "component_metadata": { + "description": "Update component-definition name/part number/description and persistent supplier or BOM attributes. Shared occurrences all see this metadata.", + "properties": { + "changes": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "asPurchased": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "excludeFromBom": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "partNumber": { + "type": "string" + }, + "sourceUrl": { + "type": "string" + }, + "supplier": { + "type": "string" + }, + "supplierPartNumber": { + "type": "string" + } + }, + "required": [], + "type": "object" + }, + "component": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "changes" + ], + "type": "object" + }, + "configuration_inspect": { + "description": "Read the loaded Design configuration graph without activation or recompute: ordinary rows, the separate native reserved test row, all supported typed cells including inactive/test cells, exact controlled-source links and current ordinary row. Unreadable fields and unknown/theme/hierarchical/inserted scopes remain explicit incomplete diagnostics. Configuration lifecycle and configured-design model mutations remain disabled pending native recovery/archive gates.", + "properties": {}, + "required": [ + "op", + "target" + ], + "type": "object" + }, + "construction_axis": { + "description": "Create a parametric axis from native references (edge/circular face/two intersecting planes/two distinct points). Root-space external geometry requires exact occurrence context. For cross-component geometry into a non-root target component, creationOccurrence must identify a root-context instance of that target. Returns component-space native axis geometry/health. No direct-only infinite-line or preview snap APIs.", + "properties": { + "component": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "creationOccurrence": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "entities": { + "items": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "name": { + "type": "string" + }, + "type": { + "enum": [ + "edge", + "circular_face", + "two_planes", + "two_points" + ] + } + }, + "required": [ + "op", + "target", + "sessionId", + "operationId", + "type", + "entities" + ], + "type": "object" + }, + "entity_delete": { + "description": "Delete sketch geometry or independently deletable timeline features. Model transaction and semantic recovery cover downstream failures; document and external file deletion are excluded.", + "properties": { + "entity": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "entity" + ], + "type": "object" + }, + "export": { + "description": "Export entire design using runtime-checked API. Preflight and unique same-filesystem staging preserve the destination on failure; publish only nonempty verified output. Availability differs by Fusion build. STL numeric coordinates use mm.", + "properties": { + "format": { + "default": "step", + "enum": [ + "step", + "stl", + "3mf", + "f3d", + "iges", + "sat", + "smt", + "usdz", + "fbx", + "skp" + ] + }, + "outputPath": { + "type": "string" + }, + "overwrite": { + "default": false, + "type": "boolean" + }, + "refinement": { + "default": "medium", + "enum": [ + "low", + "medium", + "high" + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "outputPath" + ], + "type": "object" + }, + "feature_create": { + "description": "Create a typed native solid feature. All length quantities are mm (or expressions), angles deg. Cut/intersect require explicit participant bodies. Join needs a single existing component body; combine selects multiple bodies explicitly. Feature availability is runtime-checked; missing APIs fail before commit.", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "direction": { + "enum": [ + "positive", + "negative", + "symmetric" + ] + }, + "distance": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operation": { + "enum": [ + "new_body", + "join", + "cut", + "intersect" + ] + }, + "operationId": { + "type": "string" + }, + "profiles": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "sessionId": { + "type": "string" + }, + "taper": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "extrude" + ] + } + }, + "required": [ + "type", + "profiles", + "distance" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "angle": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "axis": { + "oneOf": [ + { + "enum": [ + "x", + "y", + "z" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operation": { + "enum": [ + "new_body", + "join", + "cut", + "intersect" + ] + }, + "operationId": { + "type": "string" + }, + "profiles": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "revolve" + ] + } + }, + "required": [ + "type", + "profiles", + "axis", + "angle" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "edges": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "radius": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "sessionId": { + "type": "string" + }, + "tangentChain": { + "type": "boolean" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "fillet" + ] + } + }, + "required": [ + "type", + "edges", + "radius" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "distance": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "edges": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "tangentChain": { + "type": "boolean" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "chamfer" + ] + } + }, + "required": [ + "type", + "edges", + "distance" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "faces": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "tangentChain": { + "type": "boolean" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "thickness": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "type": { + "enum": [ + "shell" + ] + } + }, + "required": [ + "type", + "faces", + "thickness" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "depth": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "diameter": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "points": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "hole" + ] + } + }, + "required": [ + "type", + "points", + "diameter", + "depth", + "bodies" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operation": { + "enum": [ + "new_body", + "join", + "cut", + "intersect" + ] + }, + "operationId": { + "type": "string" + }, + "profiles": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "loft" + ] + } + }, + "required": [ + "type", + "profiles" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operation": { + "enum": [ + "new_body", + "join", + "cut", + "intersect" + ] + }, + "operationId": { + "type": "string" + }, + "path": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "profiles": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "sweep" + ] + } + }, + "required": [ + "type", + "profiles", + "path" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "body": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keepTools": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operation": { + "enum": [ + "join", + "cut", + "intersect" + ] + }, + "operationId": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "tools": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "type": { + "enum": [ + "combine" + ] + } + }, + "required": [ + "type", + "body", + "tools", + "operation" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "extend": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "plane": { + "oneOf": [ + { + "enum": [ + "xy", + "xz", + "yz" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "split" + ] + } + }, + "required": [ + "type", + "bodies", + "plane" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "angle": { + "type": "number" + }, + "axis": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "origin": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "translation": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "type": { + "enum": [ + "move" + ] + } + }, + "required": [ + "type", + "bodies" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "plane": { + "oneOf": [ + { + "enum": [ + "xy", + "xz", + "yz" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "mirror" + ] + } + }, + "required": [ + "type", + "bodies", + "plane" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "axis": { + "oneOf": [ + { + "enum": [ + "x", + "y", + "z" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "axis2": { + "oneOf": [ + { + "enum": [ + "x", + "y", + "z" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "count": { + "maximum": 1000, + "minimum": 2, + "type": "integer" + }, + "count2": { + "maximum": 1000, + "minimum": 1, + "type": "integer" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "spacing": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "spacing2": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "rectangular_pattern" + ] + } + }, + "required": [ + "type", + "bodies", + "axis", + "count", + "spacing" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "angle": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "axis": { + "oneOf": [ + { + "enum": [ + "x", + "y", + "z" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "bodies": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "count": { + "maximum": 1000, + "minimum": 2, + "type": "integer" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "circular_pattern" + ] + } + }, + "required": [ + "type", + "bodies", + "axis", + "count" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "angle": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "faces": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "plane": { + "oneOf": [ + { + "enum": [ + "xy", + "xz", + "yz" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "sessionId": { + "type": "string" + }, + "tangentChain": { + "type": "boolean" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "draft" + ] + } + }, + "required": [ + "type", + "faces", + "plane", + "angle" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "designation": { + "type": "string" + }, + "faces": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "internal": { + "type": "boolean" + }, + "modeled": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "target": { + "additionalProperties": false, + "properties": { + "documentId": { + "type": "string" + }, + "revision": { + "type": "string" + } + }, + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "threadClass": { + "type": "string" + }, + "threadType": { + "type": "string" + }, + "type": { + "enum": [ + "thread" + ] + } + }, + "required": [ + "type", + "faces", + "internal", + "threadType", + "designation", + "threadClass" + ], + "type": "object" + } + ], + "properties": { + "angle": {}, + "axis": {}, + "axis2": {}, + "bodies": {}, + "body": {}, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "count": {}, + "count2": {}, + "depth": {}, + "designation": {}, + "diameter": {}, + "direction": {}, + "distance": {}, + "edges": {}, + "extend": {}, + "faces": {}, + "internal": {}, + "keepTools": {}, + "modeled": {}, + "name": { + "type": "string" + }, + "operation": {}, + "origin": {}, + "path": {}, + "plane": {}, + "points": {}, + "profiles": {}, + "radius": {}, + "spacing": {}, + "spacing2": {}, + "tangentChain": {}, + "taper": {}, + "thickness": {}, + "threadClass": {}, + "threadType": {}, + "tools": {}, + "translation": {}, + "type": { + "enum": [ + "extrude", + "revolve", + "fillet", + "chamfer", + "shell", + "hole", + "loft", + "sweep", + "combine", + "split", + "move", + "mirror", + "rectangular_pattern", + "circular_pattern", + "draft", + "thread" + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "type" + ], + "type": "object" + }, + "feature_edit": { + "description": "Rename/suppress a feature or change expressions of model parameters whose createdBy is that exact feature; read health and abort on downstream errors.", + "properties": { + "feature": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "parameters": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "suppressed": { + "type": "boolean" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "feature" + ], + "type": "object" + }, + "geometry_query": { + "description": "Complete body-scoped topology query, no arbitrary first-match selection. selection one (default) refuses zero/multiple matches; many may return empty. Geometry types are exact native types; size ranges inclusive in mm/mm2, near is minimum distance in the explicit frame; direction is outward planar face normal or linear edge tangent. Returned refs retain instance context even for component-space filters. Exceeding maxResults fails rather than truncating.", + "properties": { + "body": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "filters": { + "additionalProperties": false, + "properties": { + "area": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "max": { + "minimum": 0, + "type": "number" + }, + "min": { + "minimum": 0, + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "direction": { + "additionalProperties": false, + "properties": { + "orientation": { + "enum": [ + "same", + "parallel" + ] + }, + "tolerance": { + "maximum": 90, + "minimum": 0, + "type": "number" + }, + "vector": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [ + "vector" + ], + "type": "object" + }, + "length": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "max": { + "minimum": 0, + "type": "number" + }, + "min": { + "minimum": 0, + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "near": { + "additionalProperties": false, + "properties": { + "point": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "tolerance": { + "minimum": 0, + "type": "number" + } + }, + "required": [ + "point", + "tolerance" + ], + "type": "object" + }, + "radius": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "max": { + "minimum": 0, + "type": "number" + }, + "min": { + "minimum": 0, + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": { + "enum": [ + "Plane", + "Cylinder", + "Cone", + "Sphere", + "Torus", + "NurbsSurface", + "Line3D", + "Arc3D", + "Circle3D", + "Ellipse3D", + "EllipticalArc3D", + "NurbsCurve3D", + "Point3D", + "degenerate" + ] + } + }, + "required": [], + "type": "object" + }, + "kind": { + "enum": [ + "faces", + "edges", + "vertices" + ] + }, + "maxResults": { + "maximum": 1024, + "minimum": 1, + "type": "integer" + }, + "selection": { + "enum": [ + "one", + "many" + ] + }, + "space": { + "enum": [ + "root", + "component" + ] + } + }, + "required": [ + "op", + "target", + "body", + "kind", + "space" + ], + "type": "object" + }, + "health": { + "description": "Read timeline warnings/errors. recompute:true also requires current target revision, sessionId and operationId.", + "properties": { + "recompute": { + "default": false, + "type": "boolean" + } + }, + "required": [ + "op", + "target" + ], + "type": "object" + }, + "inspect": { + "description": "Inspect the active Design without mutation. Returns target identity/revision, native component-space bodies and occurrence transforms, parameters and feature health.", + "properties": {}, + "required": [ + "op" + ], + "type": "object" + }, + "inspect_entity": { + "properties": { + "entity": { + "description": "Exact reference returned by inspect; resolves uniquely with document/revision/type/occurrence guards.", + "type": "object" + } + }, + "required": [ + "op", + "target", + "entity" + ], + "type": "object" + }, + "interference": { + "description": "Analyze root-context occurrences/body proxies; returns overlap volume mm3 or touching. Does not create interference bodies.", + "properties": { + "entities": { + "items": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 2, + "type": "array" + }, + "includeTouching": { + "type": "boolean" + }, + "volumeTolerance": { + "minimum": 0, + "type": "number" + } + }, + "required": [ + "op", + "target", + "entities" + ], + "type": "object" + }, + "joint_create": { + "description": "Create an as-built joint without moving occurrences. Non-rigid motion requires explicit joint geometry; x/y/z are joint-coordinate directions. Limits and drive values use mm/deg. Seven native motion types; ball uses joint Z pitch/X yaw; planar uses native primary slide direction reported on readback. Use regular_joint_create for geometry-solving placement.", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "occurrenceOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "occurrenceTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "suppressed": { + "type": "boolean" + }, + "target": { + "type": "object" + }, + "type": { + "enum": [ + "rigid" + ] + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "axis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "geometry": { + "additionalProperties": false, + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "occurrenceOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "occurrenceTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "rotationLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rotationValue": { + "type": "number" + }, + "sessionId": { + "type": "string" + }, + "suppressed": { + "type": "boolean" + }, + "target": { + "type": "object" + }, + "type": { + "enum": [ + "revolute" + ] + } + }, + "required": [ + "type", + "geometry" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "axis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "geometry": { + "additionalProperties": false, + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "occurrenceOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "occurrenceTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "slideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "slideValue": { + "type": "number" + }, + "suppressed": { + "type": "boolean" + }, + "target": { + "type": "object" + }, + "type": { + "enum": [ + "slider" + ] + } + }, + "required": [ + "type", + "geometry" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "axis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "geometry": { + "additionalProperties": false, + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "occurrenceOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "occurrenceTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "rotationLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rotationValue": { + "type": "number" + }, + "sessionId": { + "type": "string" + }, + "slideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "slideValue": { + "type": "number" + }, + "suppressed": { + "type": "boolean" + }, + "target": { + "type": "object" + }, + "type": { + "enum": [ + "cylindrical" + ] + } + }, + "required": [ + "type", + "geometry" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "axis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "geometry": { + "additionalProperties": false, + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "occurrenceOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "occurrenceTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "rotationLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rotationValue": { + "type": "number" + }, + "sessionId": { + "type": "string" + }, + "slideAxis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "slideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "slideValue": { + "type": "number" + }, + "suppressed": { + "type": "boolean" + }, + "target": { + "type": "object" + }, + "type": { + "enum": [ + "pin_slot" + ] + } + }, + "required": [ + "type", + "geometry" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "axis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "geometry": { + "additionalProperties": false, + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "occurrenceOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "occurrenceTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "primarySlideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "primarySlideValue": { + "type": "number" + }, + "rotationLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rotationValue": { + "type": "number" + }, + "secondarySlideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "secondarySlideValue": { + "type": "number" + }, + "sessionId": { + "type": "string" + }, + "suppressed": { + "type": "boolean" + }, + "target": { + "type": "object" + }, + "type": { + "enum": [ + "planar" + ] + } + }, + "required": [ + "type", + "geometry" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "geometry": { + "additionalProperties": false, + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "occurrenceOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "occurrenceTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "pitchLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "pitchValue": { + "type": "number" + }, + "rollLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rollValue": { + "type": "number" + }, + "sessionId": { + "type": "string" + }, + "suppressed": { + "type": "boolean" + }, + "target": { + "type": "object" + }, + "type": { + "enum": [ + "ball" + ] + }, + "yawLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "yawValue": { + "type": "number" + } + }, + "required": [ + "type", + "geometry" + ], + "type": "object" + } + ], + "properties": { + "axis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "geometry": { + "additionalProperties": false, + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "occurrenceOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "occurrenceTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "pitchLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "pitchValue": { + "type": "number" + }, + "primarySlideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "primarySlideValue": { + "type": "number" + }, + "rollLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rollValue": { + "type": "number" + }, + "rotationLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rotationValue": { + "type": "number" + }, + "secondarySlideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "secondarySlideValue": { + "type": "number" + }, + "slideAxis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "slideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "slideValue": { + "type": "number" + }, + "suppressed": { + "type": "boolean" + }, + "type": { + "enum": [ + "rigid", + "revolute", + "slider", + "cylindrical", + "pin_slot", + "planar", + "ball" + ] + }, + "yawLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "yawValue": { + "type": "number" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "type", + "occurrenceOne", + "occurrenceTwo" + ], + "type": "object" + }, + "joint_delete": { + "description": "Delete one selected Joint or AsBuiltJoint with recovery verification.", + "properties": { + "joint": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "joint" + ], + "type": "object" + }, + "joint_edit": { + "description": "Edit joint name/suppression, enabled limits, rest and drive values; wrong motion type or out-of-limit values fail with recovery. For driven root joints, active motion links must preserve their settings and their partner motion must follow the native ratio; a coupling mismatch aborts.", + "properties": { + "joint": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "pitchLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "pitchValue": { + "type": "number" + }, + "primarySlideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "primarySlideValue": { + "type": "number" + }, + "rollLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rollValue": { + "type": "number" + }, + "rotationLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rotationValue": { + "type": "number" + }, + "secondarySlideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "secondarySlideValue": { + "type": "number" + }, + "slideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "slideValue": { + "type": "number" + }, + "suppressed": { + "type": "boolean" + }, + "yawLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "yawValue": { + "type": "number" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "joint" + ], + "type": "object" + }, + "joint_origin_create": { + "description": "Create a native component-definition joint origin from guarded native geometry, with mm offsets/deg angle and optional straight axis references. Child occurrence origin references are exposed by inspect_entity(occurrence).", + "properties": { + "angle": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "component": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "flipped": { + "type": "boolean" + }, + "geometry": { + "additionalProperties": false, + "properties": { + "edge": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + "offsetX": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "offsetY": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "offsetZ": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "xAxisEntity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "zAxisEntity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "geometry" + ], + "type": "object" + }, + "joint_origin_delete": { + "description": "Delete a native joint origin; unhealthy downstream joints cause transaction rollback.", + "properties": { + "origin": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "origin" + ], + "type": "object" + }, + "joint_origin_edit": { + "description": "Edit a native joint origin definition; rolls before its timeline item and restores the original marker in finally. Recomputes and verifies attachment, axes, offsets, angle, name and flip.", + "properties": { + "angle": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "flipped": { + "type": "boolean" + }, + "geometry": { + "additionalProperties": false, + "properties": { + "edge": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + "name": { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + "offsetX": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "offsetY": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "offsetZ": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "origin": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "xAxisEntity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "zAxisEntity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "origin" + ], + "type": "object" + }, + "material_assign": { + "description": "Assign a loaded library or document material to an exact native Component/BRepBody; verify material ID readback with model transaction recovery. Query assembly_properties for resulting mass.", + "properties": { + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "libraryId": { + "type": "string" + }, + "materialId": { + "type": "string" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "entity", + "materialId" + ], + "type": "object" + }, + "material_list": { + "description": "List loaded material libraries and matching materials by stable library/material IDs. Omit libraryId for document materials.", + "properties": { + "libraryId": { + "type": "string" + }, + "limit": { + "maximum": 1000, + "minimum": 1, + "type": "integer" + }, + "query": { + "type": "string" + } + }, + "required": [ + "op", + "target" + ], + "type": "object" + }, + "mcmaster_discover": { + "description": "Discover Fusion native Insert McMaster-Carr command and requirements in the active design.", + "properties": {}, + "required": [ + "op" + ], + "type": "object" + }, + "mcmaster_open": { + "description": "Invoke Fusion native McMaster UI in the targeted Hybrid design. Interactive external operation: completion/insert/cancel stays with Fusion; inspect afterward. Idempotency records launch only.", + "properties": {}, + "required": [ + "op", + "sessionId", + "operationId", + "target" + ], + "type": "object" + }, + "measure": { + "description": "Native engineering minimum distance or angle in root assembly space. Non-root definition refs require an occurrence context. Distance needs2 entities; angle needs2 lines/planes or3 points (second apex). Returns mm/deg and native witness positions in root mm. witnessValidation identifies native points or native geometry directions used for valid parallel angles with degenerate native points; degenerate point angles and unavailable/inconsistent witnesses fail.", + "properties": { + "entities": { + "items": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "space": { + "enum": [ + "root" + ] + }, + "type": { + "enum": [ + "distance", + "angle" + ] + } + }, + "required": [ + "op", + "target", + "type", + "space", + "entities" + ], + "type": "object" + }, + "motion_link_create": { + "description": "Create a native motion link between two root-owned joints, or two different motions of jointOne when jointTwo is omitted. Positive ratio magnitudes use mm for translation and deg for rotation; reversed selects opposite direction. Requires the November 2025+ API; no script fallback.", + "properties": { + "jointOne": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "jointTwo": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "motionOne": { + "enum": [ + "rotation", + "slide", + "primarySlide", + "secondarySlide", + "pitch", + "roll", + "yaw" + ] + }, + "motionTwo": { + "enum": [ + "rotation", + "slide", + "primarySlide", + "secondarySlide", + "pitch", + "roll", + "yaw" + ] + }, + "name": { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + "reversed": { + "type": "boolean" + }, + "valueOne": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "valueTwo": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "jointOne", + "motionOne", + "motionTwo", + "valueOne", + "valueTwo" + ], + "type": "object" + }, + "motion_link_delete": { + "description": "Delete a root-owned motion link under the same transaction/recovery contract.", + "properties": { + "link": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "link" + ], + "type": "object" + }, + "motion_link_edit": { + "description": "Edit a root-owned motion link ratio, degree-of-freedom pair, direction, name or suppression. Joint membership is immutable; recreate the link to change members. Verify exact joint identities, ratio, flags and health.", + "properties": { + "link": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "motionOne": { + "enum": [ + "rotation", + "slide", + "primarySlide", + "secondarySlide", + "pitch", + "roll", + "yaw" + ] + }, + "motionTwo": { + "enum": [ + "rotation", + "slide", + "primarySlide", + "secondarySlide", + "pitch", + "roll", + "yaw" + ] + }, + "name": { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + "reversed": { + "type": "boolean" + }, + "suppressed": { + "type": "boolean" + }, + "valueOne": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "valueTwo": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "link" + ], + "type": "object" + }, + "new_design": { + "description": "Create an unnamed unsaved parametric hybrid Design; name is retained as requestedName metadata to keep failure recovery free of save dialogs. Optional box dimensions in mm create a driving-parameter fixture. Never edits an existing document.", + "properties": { + "box": { + "additionalProperties": false, + "properties": { + "depth": { + "exclusiveMinimum": 0, + "type": "number" + }, + "height": { + "exclusiveMinimum": 0, + "type": "number" + }, + "width": { + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "width", + "height", + "depth" + ], + "type": "object" + }, + "name": { + "type": "string" + } + }, + "required": [ + "op", + "sessionId", + "operationId" + ], + "type": "object" + }, + "occurrence_delete": { + "description": "Delete one selected occurrence through the shared transaction executor.", + "properties": { + "occurrence": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "occurrence" + ], + "type": "object" + }, + "occurrence_insert": { + "description": "Insert another occurrence of an existing definition; independentCopy:true uses Paste New to create a separate definition. Nested placement is in parent component coordinates. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.", + "properties": { + "component": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "independentCopy": { + "type": "boolean" + }, + "parent": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "transform": { + "additionalProperties": false, + "description": "Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.", + "properties": { + "angle": { + "type": "number" + }, + "axis": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "position": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "component" + ], + "type": "object" + }, + "occurrence_update": { + "description": "Set occurrence pose in its assembly context and capture position; explicit grounding/ungrounding. Grounded or constrained transforms fail with recovery.", + "properties": { + "grounded": { + "type": "boolean" + }, + "groundedToParent": { + "type": "boolean" + }, + "occurrence": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "transform": { + "additionalProperties": false, + "description": "Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.", + "properties": { + "angle": { + "type": "number" + }, + "axis": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "position": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + } + }, + "required": [], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "occurrence" + ], + "type": "object" + }, + "parameter_batch": { + "description": "Atomic sequential create/set/delete parameter edits with one recompute+health gate; delete supports user parameters only. Any failure aborts all edits and reports semantic recovery.", + "properties": { + "changes": { + "items": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "action": { + "enum": [ + "create" + ] + }, + "comment": { + "type": "string" + }, + "expression": { + "type": "string" + }, + "name": { + "type": "string" + }, + "unit": { + "enum": [ + "mm", + "deg", + "kg", + "" + ] + } + }, + "required": [ + "action", + "name", + "expression", + "unit" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "action": { + "enum": [ + "set" + ] + }, + "expression": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "action", + "name", + "expression" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "action": { + "enum": [ + "delete" + ] + }, + "name": { + "type": "string" + } + }, + "required": [ + "action", + "name" + ], + "type": "object" + } + ] + }, + "maxItems": 128, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "changes" + ], + "type": "object" + }, + "parameter_create": { + "properties": { + "comment": { + "type": "string" + }, + "expression": { + "type": "string" + }, + "name": { + "type": "string" + }, + "unit": { + "enum": [ + "mm", + "deg", + "kg", + "" + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "name", + "expression", + "unit" + ], + "type": "object" + }, + "parameter_set": { + "description": "Set an expression, recompute and inspect health. Failure restores old expression and reports a semantic recovery witness; not an atomic transaction.", + "properties": { + "expression": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "name", + "expression" + ], + "type": "object" + }, + "plane_create": { + "description": "Create offset plane (offset in mm) or angled plane around axis (angle in deg).", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "offset": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "plane": { + "oneOf": [ + { + "enum": [ + "xy", + "xz", + "yz" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "sessionId": { + "type": "string" + }, + "target": { + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "offset" + ] + } + }, + "required": [ + "type", + "offset" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "angle": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "axis": { + "oneOf": [ + { + "enum": [ + "x", + "y", + "z" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "op": { + "type": "string" + }, + "operationId": { + "type": "string" + }, + "plane": { + "oneOf": [ + { + "enum": [ + "xy", + "xz", + "yz" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "sessionId": { + "type": "string" + }, + "target": { + "required": [ + "documentId", + "revision" + ], + "type": "object" + }, + "type": { + "enum": [ + "angle" + ] + } + }, + "required": [ + "type", + "axis", + "angle" + ], + "type": "object" + } + ], + "properties": { + "angle": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "axis": { + "oneOf": [ + { + "enum": [ + "x", + "y", + "z" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "offset": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "plane": { + "oneOf": [ + { + "enum": [ + "xy", + "xz", + "yz" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + }, + "type": { + "enum": [ + "offset", + "angle" + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "type" + ], + "type": "object" + }, + "regular_joint_create": { + "description": "Create a geometry-solving regular joint in the root component using two distinct instance-context attachments or joint origins. All seven native motion families; offsets mm, angle and angular limits deg. Read back freshly resolved attachment graph, native parameters and root-space occurrence placement. Root/non-root sides must be unambiguous; both grounded and ancestor/descendant pairs are refused. Inferred joints are unsupported. Existing pending positions must be captured or reverted first. Before applying drive values, checks native joint-transform anchor offset magnitude/axiality and zero-angle axis collinearity. Native joint matrices have explicit provenance; physical angle/flip sense requires independent occurrence-geometry acceptance.", + "properties": { + "angle": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "axis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "flipped": { + "type": "boolean" + }, + "geometryOne": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "edge": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "origin": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "origin" + ], + "type": "object" + } + ] + }, + "geometryTwo": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "edge": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "origin": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "origin" + ], + "type": "object" + } + ] + }, + "locked": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "offset": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "pitchLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "pitchValue": { + "type": "number" + }, + "primarySlideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "primarySlideValue": { + "type": "number" + }, + "rollLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rollValue": { + "type": "number" + }, + "rotationLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "rotationValue": { + "type": "number" + }, + "secondarySlideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "secondarySlideValue": { + "type": "number" + }, + "slideAxis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "slideLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "slideValue": { + "type": "number" + }, + "type": { + "enum": [ + "rigid", + "revolute", + "slider", + "cylindrical", + "pin_slot", + "planar", + "ball" + ] + }, + "yawLimits": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "maximum": { + "type": "number" + }, + "maximumEnabled": { + "type": "boolean" + }, + "minimum": { + "type": "number" + }, + "minimumEnabled": { + "type": "boolean" + }, + "rest": { + "type": "number" + }, + "restEnabled": { + "type": "boolean" + } + }, + "required": [], + "type": "object" + }, + "yawValue": { + "type": "number" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "type", + "geometryOne", + "geometryTwo" + ], + "type": "object" + }, + "regular_joint_edit": { + "description": "Redefine root-owned regular joint geometry, motion family, offsets, angle, flip or lock. Restore timeline in finally and verify after recompute. Use joint_edit for name, suppression, limits and drive values; joint_delete for deletion.", + "properties": { + "angle": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "axis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "flipped": { + "type": "boolean" + }, + "geometryOne": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "edge": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "origin": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "origin" + ], + "type": "object" + } + ] + }, + "geometryTwo": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "edge": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "entity": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "keyPoint": { + "enum": [ + "center", + "start", + "middle", + "end" + ] + } + }, + "required": [ + "entity" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "origin": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "origin" + ], + "type": "object" + } + ] + }, + "joint": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "locked": { + "type": "boolean" + }, + "offset": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "offsetX": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "offsetY": { + "description": "Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.", + "oneOf": [ + { + "type": "number" + }, + { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + ] + }, + "slideAxis": { + "enum": [ + "x", + "y", + "z" + ] + }, + "type": { + "enum": [ + "rigid", + "revolute", + "slider", + "cylindrical", + "pin_slot", + "planar", + "ball" + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "joint" + ], + "type": "object" + }, + "rigid_group_create": { + "description": "Create a native rigid group from exact occurrence instances; includeChildren defaults true.", + "properties": { + "includeChildren": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "occurrences": { + "items": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "op", + "target", + "sessionId", + "operationId", + "occurrences" + ], + "type": "object" + }, + "rigid_group_delete": { + "description": "Delete an exact rigid group with transaction recovery.", + "properties": { + "group": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "target", + "sessionId", + "operationId", + "group" + ], + "type": "object" + }, + "rigid_group_edit": { + "description": "Rename or suppress an exact rigid group with transaction recovery.", + "properties": { + "group": { + "description": "Guarded reference from inspect in this document/revision; occurrence references retain instance context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "suppressed": { + "type": "boolean" + } + }, + "required": [ + "op", + "target", + "sessionId", + "operationId", + "group" + ], + "type": "object" + }, + "sketch_constraint": { + "description": "Constrain entities in one sketch. midpoint order is point,line; symmetry order entity1,entity2,symmetryLine. fix sets one entity fixed.", + "properties": { + "entities": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "sketch": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "type": { + "enum": [ + "horizontal", + "vertical", + "coincident", + "parallel", + "perpendicular", + "tangent", + "equal", + "concentric", + "collinear", + "midpoint", + "symmetry", + "fix" + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "sketch", + "type", + "entities" + ], + "type": "object" + }, + "sketch_create": { + "description": "Create a native component-definition sketch on an origin/construction plane or planar face. Coordinates in subsequent geometry are sketch-space mm.", + "properties": { + "component": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "plane": { + "oneOf": [ + { + "enum": [ + "xy", + "xz", + "yz" + ] + }, + { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target" + ], + "type": "object" + }, + "sketch_curve_edit": { + "description": "Edit one native sketch curve with sketch-space mm pick. trim removes the nearest segment; extend chooses nearest endpoint; split requires an interior on-curve point; break uses neighboring intersections. Fresh replacement refs are returned; original may be deleted. In-place extend returns the original with a fresh ref only after its geometry change survives recompute. No change or empty break/split fails. Full trim deletion requires allowDelete true. Linked/derived/deferred-compute geometry refused.", + "properties": { + "action": { + "enum": [ + "trim", + "extend", + "split", + "break" + ] + }, + "allowDelete": { + "type": "boolean" + }, + "createConstraints": { + "type": "boolean" + }, + "curve": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "pick": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "sketch": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "target", + "sessionId", + "operationId", + "sketch", + "curve", + "action", + "pick" + ], + "type": "object" + }, + "sketch_diagnostics": { + "description": "Read native sketch health/message, fully-constrained/fixed/linked/reference flags, geometric constraints and driving dimensions. Reports no solver DOF count or conflict-set explanation; no recompute/mutation.", + "properties": { + "sketch": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "target", + "sketch" + ], + "type": "object" + }, + "sketch_dimension": { + "description": "Add driving dimensions. Distance uses two point references; radius/diameter one curve; angle two lines. Numeric expressions use mm or deg.", + "properties": { + "entities": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "expression": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "parameterName": { + "type": "string" + }, + "position": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "sketch": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "type": { + "enum": [ + "distance", + "horizontal", + "vertical", + "radius", + "diameter", + "angle" + ] + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "sketch", + "type", + "entities", + "expression", + "position" + ], + "type": "object" + }, + "sketch_edit": { + "description": "Move sketch points/endpoints/centers in sketch-space mm, change radius or construction/fixed flags; solver failure aborts the operation.", + "properties": { + "changes": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "center": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "construction": { + "type": "boolean" + }, + "end": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "fixed": { + "type": "boolean" + }, + "position": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "radius": { + "type": "number" + }, + "start": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + } + }, + "required": [], + "type": "object" + }, + "entity": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "sketch": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "sketch", + "entity", + "changes" + ], + "type": "object" + }, + "sketch_geometry": { + "description": "Create a transactionally grouped set of sketch primitives. Numeric geometry uses mm and arc sweeps/polygon angles use deg.", + "properties": { + "items": { + "items": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "position": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "type": { + "enum": [ + "point" + ] + } + }, + "required": [ + "type", + "position" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "construction": { + "type": "boolean" + }, + "end": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "start": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "type": { + "enum": [ + "line" + ] + } + }, + "required": [ + "type", + "start", + "end" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "construction": { + "type": "boolean" + }, + "end": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "start": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "type": { + "enum": [ + "rectangle" + ] + } + }, + "required": [ + "type", + "start", + "end" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "center": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "construction": { + "type": "boolean" + }, + "radius": { + "exclusiveMinimum": 0, + "type": "number" + }, + "type": { + "enum": [ + "circle" + ] + } + }, + "required": [ + "type", + "center", + "radius" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "center": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "construction": { + "type": "boolean" + }, + "start": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "sweep": { + "type": "number" + }, + "type": { + "enum": [ + "arc" + ] + } + }, + "required": [ + "type", + "center", + "start", + "sweep" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "angle": { + "type": "number" + }, + "center": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "construction": { + "type": "boolean" + }, + "radius": { + "exclusiveMinimum": 0, + "type": "number" + }, + "sides": { + "maximum": 128, + "minimum": 3, + "type": "integer" + }, + "type": { + "enum": [ + "polygon" + ] + } + }, + "required": [ + "type", + "center", + "radius", + "sides" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "construction": { + "type": "boolean" + }, + "end": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "start": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "type": { + "enum": [ + "slot" + ] + }, + "width": { + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "type", + "start", + "end", + "width" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "closed": { + "type": "boolean" + }, + "construction": { + "type": "boolean" + }, + "points": { + "items": { + "items": { + "type": "number" + }, + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + "maxItems": 128, + "minItems": 2, + "type": "array" + }, + "type": { + "enum": [ + "spline" + ] + } + }, + "required": [ + "type", + "points" + ], + "type": "object" + } + ] + }, + "maxItems": 128, + "minItems": 1, + "type": "array" + }, + "sketch": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "sketch", + "items" + ], + "type": "object" + }, + "sketch_offset": { + "description": "Modern createOffsetInput/addOffset2. Curves must be native 2D, unique, in connected flow order (never reordered). Nonzero signed mm number/expression: positive right, negative left; a single circle/ellipse positive outside. Topology matched defaults true. Read back native signed distance, parent/child refs and controlling parameter after recompute. No retired Sketch.offset fallback.", + "properties": { + "curves": { + "items": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "distance": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "sketch": { + "description": "Current guarded entity reference; root-space child geometry requires its exact occurrence context.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "topologyMatched": { + "type": "boolean" + } + }, + "required": [ + "op", + "target", + "sessionId", + "operationId", + "sketch", + "curves", + "distance" + ], + "type": "object" + }, + "sketch_project": { + "description": "Project selected topology into a sketch with Fusion associative projection.", + "properties": { + "entities": { + "items": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + }, + "sketch": { + "description": "Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.", + "required": [ + "documentId", + "revision", + "objectType" + ], + "type": "object" + } + }, + "required": [ + "op", + "sessionId", + "operationId", + "target", + "sketch", + "entities" + ], + "type": "object" + }, + "transaction_probe": { + "description": "Verify runtime PTransaction abort+commit using temporary user parameters, remove probe data and compare semantic restoration. Required once per running add-in session before feature/sketch/atomic-batch writes. Returns fresh target; inspect again for current references.", + "properties": {}, + "required": [ + "op", + "sessionId", + "operationId", + "target" + ], + "type": "object" + } + }, + "output": "{\"_timeoutHint\":\"ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.\",\"idempotency\":{\"admission\":\"FULL SQLite commit before native dispatch\",\"capacity\":10000,\"databaseByteLimit\":67108864,\"recordByteLimit\":4194304,\"restartBehavior\":\"old-session history is readable; native execution never replays across sessions\",\"scope\":\"durable history keyed by add-in session and operation ID\",\"storageVersion\":1},\"operations\":{\"assembly_properties\":{\"description\":\"High-accuracy physical properties of whole root assembly (default) or an exact Component/Occurrence/BRepBody. Returns mass kg, volume mm3, area mm2, center of mass mm, mean density kg/mm3 and definition/instance coordinate scope.\",\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"target\"],\"type\":\"object\"},\"bom\":{\"description\":\"Structured component-definition and instance BOM; quantities by actual identity, root bodies plus nested children; purchased metadata collapses subtrees unless exploded. Physical mass includes all unsuppressed bodies exactly once per instance. Includes exact current active configuration provenance; incomplete configuration scope refuses. Visibility does not remove quantity.\",\"properties\":{\"explodePurchased\":{\"type\":\"boolean\"}},\"required\":[\"op\",\"target\"],\"type\":\"object\"},\"bom_export\":{\"description\":\"Export flat grouped purchasing rows or structured parent/path/depth instance rows and supplier provenance to CSV with exclusive/atomic publication. This external effect is separate from model transactions. Both CSV modes include document/revision and current active configuration table/row provenance.\",\"properties\":{\"explodePurchased\":{\"type\":\"boolean\"},\"filename\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"flat\",\"structured\"]},\"overwrite\":{\"type\":\"boolean\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"filename\"],\"type\":\"object\"},\"cad_import\":{\"description\":\"Import a pre-downloaded local STEP/SAT into a new wrapper component in Hybrid design. Validate optional expected SHA-256, record actual source/hash/supplier metadata, preserve camera, measure model recovery. Does not fetch URLs or create cloud documents. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\",\"properties\":{\"asPurchased\":{\"type\":\"boolean\"},\"filename\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"parent\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"provenance\":{\"additionalProperties\":false,\"properties\":{\"description\":{\"type\":\"string\"},\"sourceUrl\":{\"type\":\"string\"},\"supplier\":{\"type\":\"string\"},\"supplierPartNumber\":{\"type\":\"string\"}},\"required\":[\"supplier\",\"supplierPartNumber\",\"sourceUrl\"],\"type\":\"object\"},\"sha256\":{\"type\":\"string\"},\"transform\":{\"additionalProperties\":false,\"description\":\"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\",\"properties\":{\"angle\":{\"type\":\"number\"},\"axis\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"},\"position\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"filename\",\"provenance\"],\"type\":\"object\"},\"component_create\":{\"description\":\"Create a native internal component and its first occurrence in a Hybrid design. parent is a component definition; edits to it affect every instance. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\",\"properties\":{\"metadata\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"asPurchased\":{\"type\":\"boolean\"},\"description\":{\"type\":\"string\"},\"excludeFromBom\":{\"type\":\"boolean\"},\"name\":{\"type\":\"string\"},\"partNumber\":{\"type\":\"string\"},\"sourceUrl\":{\"type\":\"string\"},\"supplier\":{\"type\":\"string\"},\"supplierPartNumber\":{\"type\":\"string\"}},\"required\":[],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"parent\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"transform\":{\"additionalProperties\":false,\"description\":\"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\",\"properties\":{\"angle\":{\"type\":\"number\"},\"axis\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"},\"position\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"name\"],\"type\":\"object\"},\"component_metadata\":{\"description\":\"Update component-definition name/part number/description and persistent supplier or BOM attributes. Shared occurrences all see this metadata.\",\"properties\":{\"changes\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"asPurchased\":{\"type\":\"boolean\"},\"description\":{\"type\":\"string\"},\"excludeFromBom\":{\"type\":\"boolean\"},\"name\":{\"type\":\"string\"},\"partNumber\":{\"type\":\"string\"},\"sourceUrl\":{\"type\":\"string\"},\"supplier\":{\"type\":\"string\"},\"supplierPartNumber\":{\"type\":\"string\"}},\"required\":[],\"type\":\"object\"},\"component\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"changes\"],\"type\":\"object\"},\"configuration_inspect\":{\"description\":\"Read the loaded Design configuration graph without activation or recompute: ordinary rows, the separate native reserved test row, all supported typed cells including inactive/test cells, exact controlled-source links and current ordinary row. Unreadable fields and unknown/theme/hierarchical/inserted scopes remain explicit incomplete diagnostics. Configuration lifecycle and configured-design model mutations remain disabled pending native recovery/archive gates.\",\"properties\":{},\"required\":[\"op\",\"target\"],\"type\":\"object\"},\"construction_axis\":{\"description\":\"Create a parametric axis from native references (edge/circular face/two intersecting planes/two distinct points). Root-space external geometry requires exact occurrence context. For cross-component geometry into a non-root target component, creationOccurrence must identify a root-context instance of that target. Returns component-space native axis geometry/health. No direct-only infinite-line or preview snap APIs.\",\"properties\":{\"component\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"creationOccurrence\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"entities\":{\"items\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":2,\"minItems\":1,\"type\":\"array\"},\"name\":{\"type\":\"string\"},\"type\":{\"enum\":[\"edge\",\"circular_face\",\"two_planes\",\"two_points\"]}},\"required\":[\"op\",\"target\",\"sessionId\",\"operationId\",\"type\",\"entities\"],\"type\":\"object\"},\"entity_delete\":{\"description\":\"Delete sketch geometry or independently deletable timeline features. Model transaction and semantic recovery cover downstream failures; document and external file deletion are excluded.\",\"properties\":{\"entity\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"entity\"],\"type\":\"object\"},\"export\":{\"description\":\"Export entire design using runtime-checked API. Preflight and unique same-filesystem staging preserve the destination on failure; publish only nonempty verified output. Availability differs by Fusion build. STL numeric coordinates use mm.\",\"properties\":{\"format\":{\"default\":\"step\",\"enum\":[\"step\",\"stl\",\"3mf\",\"f3d\",\"iges\",\"sat\",\"smt\",\"usdz\",\"fbx\",\"skp\"]},\"outputPath\":{\"type\":\"string\"},\"overwrite\":{\"default\":false,\"type\":\"boolean\"},\"refinement\":{\"default\":\"medium\",\"enum\":[\"low\",\"medium\",\"high\"]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"outputPath\"],\"type\":\"object\"},\"feature_create\":{\"description\":\"Create a typed native solid feature. All length quantities are mm (or expressions), angles deg. Cut/intersect require explicit participant bodies. Join needs a single existing component body; combine selects multiple bodies explicitly. Feature availability is runtime-checked; missing APIs fail before commit.\",\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"direction\":{\"enum\":[\"positive\",\"negative\",\"symmetric\"]},\"distance\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operation\":{\"enum\":[\"new_body\",\"join\",\"cut\",\"intersect\"]},\"operationId\":{\"type\":\"string\"},\"profiles\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"sessionId\":{\"type\":\"string\"},\"taper\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"extrude\"]}},\"required\":[\"type\",\"profiles\",\"distance\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"angle\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"axis\":{\"oneOf\":[{\"enum\":[\"x\",\"y\",\"z\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operation\":{\"enum\":[\"new_body\",\"join\",\"cut\",\"intersect\"]},\"operationId\":{\"type\":\"string\"},\"profiles\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"revolve\"]}},\"required\":[\"type\",\"profiles\",\"axis\",\"angle\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"edges\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"radius\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"sessionId\":{\"type\":\"string\"},\"tangentChain\":{\"type\":\"boolean\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"fillet\"]}},\"required\":[\"type\",\"edges\",\"radius\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"distance\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"edges\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"sessionId\":{\"type\":\"string\"},\"tangentChain\":{\"type\":\"boolean\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"chamfer\"]}},\"required\":[\"type\",\"edges\",\"distance\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"faces\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"sessionId\":{\"type\":\"string\"},\"tangentChain\":{\"type\":\"boolean\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"thickness\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"type\":{\"enum\":[\"shell\"]}},\"required\":[\"type\",\"faces\",\"thickness\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"depth\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"diameter\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"points\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"hole\"]}},\"required\":[\"type\",\"points\",\"diameter\",\"depth\",\"bodies\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operation\":{\"enum\":[\"new_body\",\"join\",\"cut\",\"intersect\"]},\"operationId\":{\"type\":\"string\"},\"profiles\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"loft\"]}},\"required\":[\"type\",\"profiles\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operation\":{\"enum\":[\"new_body\",\"join\",\"cut\",\"intersect\"]},\"operationId\":{\"type\":\"string\"},\"path\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"profiles\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"sweep\"]}},\"required\":[\"type\",\"profiles\",\"path\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"body\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keepTools\":{\"type\":\"boolean\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operation\":{\"enum\":[\"join\",\"cut\",\"intersect\"]},\"operationId\":{\"type\":\"string\"},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"tools\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"type\":{\"enum\":[\"combine\"]}},\"required\":[\"type\",\"body\",\"tools\",\"operation\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"extend\":{\"type\":\"boolean\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"plane\":{\"oneOf\":[{\"enum\":[\"xy\",\"xz\",\"yz\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"split\"]}},\"required\":[\"type\",\"bodies\",\"plane\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"angle\":{\"type\":\"number\"},\"axis\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"},\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"origin\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"translation\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"type\":{\"enum\":[\"move\"]}},\"required\":[\"type\",\"bodies\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"plane\":{\"oneOf\":[{\"enum\":[\"xy\",\"xz\",\"yz\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"mirror\"]}},\"required\":[\"type\",\"bodies\",\"plane\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"axis\":{\"oneOf\":[{\"enum\":[\"x\",\"y\",\"z\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"axis2\":{\"oneOf\":[{\"enum\":[\"x\",\"y\",\"z\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"count\":{\"maximum\":1000,\"minimum\":2,\"type\":\"integer\"},\"count2\":{\"maximum\":1000,\"minimum\":1,\"type\":\"integer\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"sessionId\":{\"type\":\"string\"},\"spacing\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"spacing2\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"rectangular_pattern\"]}},\"required\":[\"type\",\"bodies\",\"axis\",\"count\",\"spacing\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"angle\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"axis\":{\"oneOf\":[{\"enum\":[\"x\",\"y\",\"z\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"bodies\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"count\":{\"maximum\":1000,\"minimum\":2,\"type\":\"integer\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"circular_pattern\"]}},\"required\":[\"type\",\"bodies\",\"axis\",\"count\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"angle\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"faces\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"plane\":{\"oneOf\":[{\"enum\":[\"xy\",\"xz\",\"yz\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"sessionId\":{\"type\":\"string\"},\"tangentChain\":{\"type\":\"boolean\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"draft\"]}},\"required\":[\"type\",\"faces\",\"plane\",\"angle\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"designation\":{\"type\":\"string\"},\"faces\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"internal\":{\"type\":\"boolean\"},\"modeled\":{\"type\":\"boolean\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"sessionId\":{\"type\":\"string\"},\"target\":{\"additionalProperties\":false,\"properties\":{\"documentId\":{\"type\":\"string\"},\"revision\":{\"type\":\"string\"}},\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"threadClass\":{\"type\":\"string\"},\"threadType\":{\"type\":\"string\"},\"type\":{\"enum\":[\"thread\"]}},\"required\":[\"type\",\"faces\",\"internal\",\"threadType\",\"designation\",\"threadClass\"],\"type\":\"object\"}],\"properties\":{\"angle\":{},\"axis\":{},\"axis2\":{},\"bodies\":{},\"body\":{},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"count\":{},\"count2\":{},\"depth\":{},\"designation\":{},\"diameter\":{},\"direction\":{},\"distance\":{},\"edges\":{},\"extend\":{},\"faces\":{},\"internal\":{},\"keepTools\":{},\"modeled\":{},\"name\":{\"type\":\"string\"},\"operation\":{},\"origin\":{},\"path\":{},\"plane\":{},\"points\":{},\"profiles\":{},\"radius\":{},\"spacing\":{},\"spacing2\":{},\"tangentChain\":{},\"taper\":{},\"thickness\":{},\"threadClass\":{},\"threadType\":{},\"tools\":{},\"translation\":{},\"type\":{\"enum\":[\"extrude\",\"revolve\",\"fillet\",\"chamfer\",\"shell\",\"hole\",\"loft\",\"sweep\",\"combine\",\"split\",\"move\",\"mirror\",\"rectangular_pattern\",\"circular_pattern\",\"draft\",\"thread\"]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"type\"],\"type\":\"object\"},\"feature_edit\":{\"description\":\"Rename/suppress a feature or change expressions of model parameters whose createdBy is that exact feature; read health and abort on downstream errors.\",\"properties\":{\"feature\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"parameters\":{\"additionalProperties\":{\"type\":\"string\"},\"type\":\"object\"},\"suppressed\":{\"type\":\"boolean\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"feature\"],\"type\":\"object\"},\"geometry_query\":{\"description\":\"Complete body-scoped topology query, no arbitrary first-match selection. selection one (default) refuses zero/multiple matches; many may return empty. Geometry types are exact native types; size ranges inclusive in mm/mm2, near is minimum distance in the explicit frame; direction is outward planar face normal or linear edge tangent. Returned refs retain instance context even for component-space filters. Exceeding maxResults fails rather than truncating.\",\"properties\":{\"body\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"filters\":{\"additionalProperties\":false,\"properties\":{\"area\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"max\":{\"minimum\":0,\"type\":\"number\"},\"min\":{\"minimum\":0,\"type\":\"number\"}},\"required\":[],\"type\":\"object\"},\"direction\":{\"additionalProperties\":false,\"properties\":{\"orientation\":{\"enum\":[\"same\",\"parallel\"]},\"tolerance\":{\"maximum\":90,\"minimum\":0,\"type\":\"number\"},\"vector\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"}},\"required\":[\"vector\"],\"type\":\"object\"},\"length\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"max\":{\"minimum\":0,\"type\":\"number\"},\"min\":{\"minimum\":0,\"type\":\"number\"}},\"required\":[],\"type\":\"object\"},\"near\":{\"additionalProperties\":false,\"properties\":{\"point\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"},\"tolerance\":{\"minimum\":0,\"type\":\"number\"}},\"required\":[\"point\",\"tolerance\"],\"type\":\"object\"},\"radius\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"max\":{\"minimum\":0,\"type\":\"number\"},\"min\":{\"minimum\":0,\"type\":\"number\"}},\"required\":[],\"type\":\"object\"},\"type\":{\"enum\":[\"Plane\",\"Cylinder\",\"Cone\",\"Sphere\",\"Torus\",\"NurbsSurface\",\"Line3D\",\"Arc3D\",\"Circle3D\",\"Ellipse3D\",\"EllipticalArc3D\",\"NurbsCurve3D\",\"Point3D\",\"degenerate\"]}},\"required\":[],\"type\":\"object\"},\"kind\":{\"enum\":[\"faces\",\"edges\",\"vertices\"]},\"maxResults\":{\"maximum\":1024,\"minimum\":1,\"type\":\"integer\"},\"selection\":{\"enum\":[\"one\",\"many\"]},\"space\":{\"enum\":[\"root\",\"component\"]}},\"required\":[\"op\",\"target\",\"body\",\"kind\",\"space\"],\"type\":\"object\"},\"health\":{\"description\":\"Read timeline warnings/errors. recompute:true also requires current target revision, sessionId and operationId.\",\"properties\":{\"recompute\":{\"default\":false,\"type\":\"boolean\"}},\"required\":[\"op\",\"target\"],\"type\":\"object\"},\"inspect\":{\"description\":\"Inspect the active Design without mutation. Returns target identity/revision, native component-space bodies and occurrence transforms, parameters and feature health.\",\"properties\":{},\"required\":[\"op\"],\"type\":\"object\"},\"inspect_entity\":{\"properties\":{\"entity\":{\"description\":\"Exact reference returned by inspect; resolves uniquely with document/revision/type/occurrence guards.\",\"type\":\"object\"}},\"required\":[\"op\",\"target\",\"entity\"],\"type\":\"object\"},\"interference\":{\"description\":\"Analyze root-context occurrences/body proxies; returns overlap volume mm3 or touching. Does not create interference bodies.\",\"properties\":{\"entities\":{\"items\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":2,\"type\":\"array\"},\"includeTouching\":{\"type\":\"boolean\"},\"volumeTolerance\":{\"minimum\":0,\"type\":\"number\"}},\"required\":[\"op\",\"target\",\"entities\"],\"type\":\"object\"},\"joint_create\":{\"description\":\"Create an as-built joint without moving occurrences. Non-rigid motion requires explicit joint geometry; x/y/z are joint-coordinate directions. Limits and drive values use mm/deg. Seven native motion types; ball uses joint Z pitch/X yaw; planar uses native primary slide direction reported on readback. Use regular_joint_create for geometry-solving placement.\",\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"name\":{\"type\":\"string\"},\"occurrenceOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"occurrenceTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"sessionId\":{\"type\":\"string\"},\"suppressed\":{\"type\":\"boolean\"},\"target\":{\"type\":\"object\"},\"type\":{\"enum\":[\"rigid\"]}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"axis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"geometry\":{\"additionalProperties\":false,\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"occurrenceOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"occurrenceTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"rotationLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rotationValue\":{\"type\":\"number\"},\"sessionId\":{\"type\":\"string\"},\"suppressed\":{\"type\":\"boolean\"},\"target\":{\"type\":\"object\"},\"type\":{\"enum\":[\"revolute\"]}},\"required\":[\"type\",\"geometry\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"axis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"geometry\":{\"additionalProperties\":false,\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"occurrenceOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"occurrenceTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"sessionId\":{\"type\":\"string\"},\"slideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"slideValue\":{\"type\":\"number\"},\"suppressed\":{\"type\":\"boolean\"},\"target\":{\"type\":\"object\"},\"type\":{\"enum\":[\"slider\"]}},\"required\":[\"type\",\"geometry\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"axis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"geometry\":{\"additionalProperties\":false,\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"occurrenceOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"occurrenceTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"rotationLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rotationValue\":{\"type\":\"number\"},\"sessionId\":{\"type\":\"string\"},\"slideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"slideValue\":{\"type\":\"number\"},\"suppressed\":{\"type\":\"boolean\"},\"target\":{\"type\":\"object\"},\"type\":{\"enum\":[\"cylindrical\"]}},\"required\":[\"type\",\"geometry\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"axis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"geometry\":{\"additionalProperties\":false,\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"occurrenceOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"occurrenceTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"rotationLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rotationValue\":{\"type\":\"number\"},\"sessionId\":{\"type\":\"string\"},\"slideAxis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"slideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"slideValue\":{\"type\":\"number\"},\"suppressed\":{\"type\":\"boolean\"},\"target\":{\"type\":\"object\"},\"type\":{\"enum\":[\"pin_slot\"]}},\"required\":[\"type\",\"geometry\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"axis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"geometry\":{\"additionalProperties\":false,\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"occurrenceOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"occurrenceTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"primarySlideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"primarySlideValue\":{\"type\":\"number\"},\"rotationLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rotationValue\":{\"type\":\"number\"},\"secondarySlideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"secondarySlideValue\":{\"type\":\"number\"},\"sessionId\":{\"type\":\"string\"},\"suppressed\":{\"type\":\"boolean\"},\"target\":{\"type\":\"object\"},\"type\":{\"enum\":[\"planar\"]}},\"required\":[\"type\",\"geometry\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"geometry\":{\"additionalProperties\":false,\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"occurrenceOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"occurrenceTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"pitchLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"pitchValue\":{\"type\":\"number\"},\"rollLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rollValue\":{\"type\":\"number\"},\"sessionId\":{\"type\":\"string\"},\"suppressed\":{\"type\":\"boolean\"},\"target\":{\"type\":\"object\"},\"type\":{\"enum\":[\"ball\"]},\"yawLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"yawValue\":{\"type\":\"number\"}},\"required\":[\"type\",\"geometry\"],\"type\":\"object\"}],\"properties\":{\"axis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"geometry\":{\"additionalProperties\":false,\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"occurrenceOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"occurrenceTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"pitchLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"pitchValue\":{\"type\":\"number\"},\"primarySlideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"primarySlideValue\":{\"type\":\"number\"},\"rollLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rollValue\":{\"type\":\"number\"},\"rotationLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rotationValue\":{\"type\":\"number\"},\"secondarySlideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"secondarySlideValue\":{\"type\":\"number\"},\"slideAxis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"slideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"slideValue\":{\"type\":\"number\"},\"suppressed\":{\"type\":\"boolean\"},\"type\":{\"enum\":[\"rigid\",\"revolute\",\"slider\",\"cylindrical\",\"pin_slot\",\"planar\",\"ball\"]},\"yawLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"yawValue\":{\"type\":\"number\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"type\",\"occurrenceOne\",\"occurrenceTwo\"],\"type\":\"object\"},\"joint_delete\":{\"description\":\"Delete one selected Joint or AsBuiltJoint with recovery verification.\",\"properties\":{\"joint\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"joint\"],\"type\":\"object\"},\"joint_edit\":{\"description\":\"Edit joint name/suppression, enabled limits, rest and drive values; wrong motion type or out-of-limit values fail with recovery. For driven root joints, active motion links must preserve their settings and their partner motion must follow the native ratio; a coupling mismatch aborts.\",\"properties\":{\"joint\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"pitchLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"pitchValue\":{\"type\":\"number\"},\"primarySlideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"primarySlideValue\":{\"type\":\"number\"},\"rollLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rollValue\":{\"type\":\"number\"},\"rotationLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rotationValue\":{\"type\":\"number\"},\"secondarySlideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"secondarySlideValue\":{\"type\":\"number\"},\"slideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"slideValue\":{\"type\":\"number\"},\"suppressed\":{\"type\":\"boolean\"},\"yawLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"yawValue\":{\"type\":\"number\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"joint\"],\"type\":\"object\"},\"joint_origin_create\":{\"description\":\"Create a native component-definition joint origin from guarded native geometry, with mm offsets/deg angle and optional straight axis references. Child occurrence origin references are exposed by inspect_entity(occurrence).\",\"properties\":{\"angle\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"component\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"flipped\":{\"type\":\"boolean\"},\"geometry\":{\"additionalProperties\":false,\"properties\":{\"edge\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"maxLength\":120,\"minLength\":1,\"type\":\"string\"},\"offsetX\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"offsetY\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"offsetZ\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"xAxisEntity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"zAxisEntity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"geometry\"],\"type\":\"object\"},\"joint_origin_delete\":{\"description\":\"Delete a native joint origin; unhealthy downstream joints cause transaction rollback.\",\"properties\":{\"origin\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"origin\"],\"type\":\"object\"},\"joint_origin_edit\":{\"description\":\"Edit a native joint origin definition; rolls before its timeline item and restores the original marker in finally. Recomputes and verifies attachment, axes, offsets, angle, name and flip.\",\"properties\":{\"angle\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"flipped\":{\"type\":\"boolean\"},\"geometry\":{\"additionalProperties\":false,\"properties\":{\"edge\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},\"name\":{\"maxLength\":120,\"minLength\":1,\"type\":\"string\"},\"offsetX\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"offsetY\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"offsetZ\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"origin\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"xAxisEntity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"zAxisEntity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"origin\"],\"type\":\"object\"},\"material_assign\":{\"description\":\"Assign a loaded library or document material to an exact native Component/BRepBody; verify material ID readback with model transaction recovery. Query assembly_properties for resulting mass.\",\"properties\":{\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"libraryId\":{\"type\":\"string\"},\"materialId\":{\"type\":\"string\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"entity\",\"materialId\"],\"type\":\"object\"},\"material_list\":{\"description\":\"List loaded material libraries and matching materials by stable library/material IDs. Omit libraryId for document materials.\",\"properties\":{\"libraryId\":{\"type\":\"string\"},\"limit\":{\"maximum\":1000,\"minimum\":1,\"type\":\"integer\"},\"query\":{\"type\":\"string\"}},\"required\":[\"op\",\"target\"],\"type\":\"object\"},\"mcmaster_discover\":{\"description\":\"Discover Fusion native Insert McMaster-Carr command and requirements in the active design.\",\"properties\":{},\"required\":[\"op\"],\"type\":\"object\"},\"mcmaster_open\":{\"description\":\"Invoke Fusion native McMaster UI in the targeted Hybrid design. Interactive external operation: completion/insert/cancel stays with Fusion; inspect afterward. Idempotency records launch only.\",\"properties\":{},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\"],\"type\":\"object\"},\"measure\":{\"description\":\"Native engineering minimum distance or angle in root assembly space. Non-root definition refs require an occurrence context. Distance needs2 entities; angle needs2 lines/planes or3 points (second apex). Returns mm/deg and native witness positions in root mm. witnessValidation identifies native points or native geometry directions used for valid parallel angles with degenerate native points; degenerate point angles and unavailable/inconsistent witnesses fail.\",\"properties\":{\"entities\":{\"items\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"space\":{\"enum\":[\"root\"]},\"type\":{\"enum\":[\"distance\",\"angle\"]}},\"required\":[\"op\",\"target\",\"type\",\"space\",\"entities\"],\"type\":\"object\"},\"motion_link_create\":{\"description\":\"Create a native motion link between two root-owned joints, or two different motions of jointOne when jointTwo is omitted. Positive ratio magnitudes use mm for translation and deg for rotation; reversed selects opposite direction. Requires the November 2025+ API; no script fallback.\",\"properties\":{\"jointOne\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"jointTwo\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"motionOne\":{\"enum\":[\"rotation\",\"slide\",\"primarySlide\",\"secondarySlide\",\"pitch\",\"roll\",\"yaw\"]},\"motionTwo\":{\"enum\":[\"rotation\",\"slide\",\"primarySlide\",\"secondarySlide\",\"pitch\",\"roll\",\"yaw\"]},\"name\":{\"maxLength\":120,\"minLength\":1,\"type\":\"string\"},\"reversed\":{\"type\":\"boolean\"},\"valueOne\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"valueTwo\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"jointOne\",\"motionOne\",\"motionTwo\",\"valueOne\",\"valueTwo\"],\"type\":\"object\"},\"motion_link_delete\":{\"description\":\"Delete a root-owned motion link under the same transaction/recovery contract.\",\"properties\":{\"link\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"link\"],\"type\":\"object\"},\"motion_link_edit\":{\"description\":\"Edit a root-owned motion link ratio, degree-of-freedom pair, direction, name or suppression. Joint membership is immutable; recreate the link to change members. Verify exact joint identities, ratio, flags and health.\",\"properties\":{\"link\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"motionOne\":{\"enum\":[\"rotation\",\"slide\",\"primarySlide\",\"secondarySlide\",\"pitch\",\"roll\",\"yaw\"]},\"motionTwo\":{\"enum\":[\"rotation\",\"slide\",\"primarySlide\",\"secondarySlide\",\"pitch\",\"roll\",\"yaw\"]},\"name\":{\"maxLength\":120,\"minLength\":1,\"type\":\"string\"},\"reversed\":{\"type\":\"boolean\"},\"suppressed\":{\"type\":\"boolean\"},\"valueOne\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"valueTwo\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"link\"],\"type\":\"object\"},\"new_design\":{\"description\":\"Create an unnamed unsaved parametric hybrid Design; name is retained as requestedName metadata to keep failure recovery free of save dialogs. Optional box dimensions in mm create a driving-parameter fixture. Never edits an existing document.\",\"properties\":{\"box\":{\"additionalProperties\":false,\"properties\":{\"depth\":{\"exclusiveMinimum\":0,\"type\":\"number\"},\"height\":{\"exclusiveMinimum\":0,\"type\":\"number\"},\"width\":{\"exclusiveMinimum\":0,\"type\":\"number\"}},\"required\":[\"width\",\"height\",\"depth\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"}},\"required\":[\"op\",\"sessionId\",\"operationId\"],\"type\":\"object\"},\"occurrence_delete\":{\"description\":\"Delete one selected occurrence through the shared transaction executor.\",\"properties\":{\"occurrence\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"occurrence\"],\"type\":\"object\"},\"occurrence_insert\":{\"description\":\"Insert another occurrence of an existing definition; independentCopy:true uses Paste New to create a separate definition. Nested placement is in parent component coordinates. Returns a representative root-context occurrence and all affectedOccurrences when the parent definition is reused.\",\"properties\":{\"component\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"independentCopy\":{\"type\":\"boolean\"},\"parent\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"transform\":{\"additionalProperties\":false,\"description\":\"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\",\"properties\":{\"angle\":{\"type\":\"number\"},\"axis\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"},\"position\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"component\"],\"type\":\"object\"},\"occurrence_update\":{\"description\":\"Set occurrence pose in its assembly context and capture position; explicit grounding/ungrounding. Grounded or constrained transforms fail with recovery.\",\"properties\":{\"grounded\":{\"type\":\"boolean\"},\"groundedToParent\":{\"type\":\"boolean\"},\"occurrence\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"transform\":{\"additionalProperties\":false,\"description\":\"Absolute rotation about the given nonzero axis through origin (deg), then translation (mm). Create/insert use parent component coordinates; updates use the selected occurrence assembly context.\",\"properties\":{\"angle\":{\"type\":\"number\"},\"axis\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"},\"position\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"type\":\"array\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"occurrence\"],\"type\":\"object\"},\"parameter_batch\":{\"description\":\"Atomic sequential create/set/delete parameter edits with one recompute+health gate; delete supports user parameters only. Any failure aborts all edits and reports semantic recovery.\",\"properties\":{\"changes\":{\"items\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"action\":{\"enum\":[\"create\"]},\"comment\":{\"type\":\"string\"},\"expression\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"unit\":{\"enum\":[\"mm\",\"deg\",\"kg\",\"\"]}},\"required\":[\"action\",\"name\",\"expression\",\"unit\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"action\":{\"enum\":[\"set\"]},\"expression\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"action\",\"name\",\"expression\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"action\":{\"enum\":[\"delete\"]},\"name\":{\"type\":\"string\"}},\"required\":[\"action\",\"name\"],\"type\":\"object\"}]},\"maxItems\":128,\"minItems\":1,\"type\":\"array\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"changes\"],\"type\":\"object\"},\"parameter_create\":{\"properties\":{\"comment\":{\"type\":\"string\"},\"expression\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"unit\":{\"enum\":[\"mm\",\"deg\",\"kg\",\"\"]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"name\",\"expression\",\"unit\"],\"type\":\"object\"},\"parameter_set\":{\"description\":\"Set an expression, recompute and inspect health. Failure restores old expression and reports a semantic recovery witness; not an atomic transaction.\",\"properties\":{\"expression\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"name\",\"expression\"],\"type\":\"object\"},\"plane_create\":{\"description\":\"Create offset plane (offset in mm) or angled plane around axis (angle in deg).\",\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"offset\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"plane\":{\"oneOf\":[{\"enum\":[\"xy\",\"xz\",\"yz\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"sessionId\":{\"type\":\"string\"},\"target\":{\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"offset\"]}},\"required\":[\"type\",\"offset\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"angle\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"axis\":{\"oneOf\":[{\"enum\":[\"x\",\"y\",\"z\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"op\":{\"type\":\"string\"},\"operationId\":{\"type\":\"string\"},\"plane\":{\"oneOf\":[{\"enum\":[\"xy\",\"xz\",\"yz\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"sessionId\":{\"type\":\"string\"},\"target\":{\"required\":[\"documentId\",\"revision\"],\"type\":\"object\"},\"type\":{\"enum\":[\"angle\"]}},\"required\":[\"type\",\"axis\",\"angle\"],\"type\":\"object\"}],\"properties\":{\"angle\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"axis\":{\"oneOf\":[{\"enum\":[\"x\",\"y\",\"z\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"offset\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"plane\":{\"oneOf\":[{\"enum\":[\"xy\",\"xz\",\"yz\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]},\"type\":{\"enum\":[\"offset\",\"angle\"]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"type\"],\"type\":\"object\"},\"regular_joint_create\":{\"description\":\"Create a geometry-solving regular joint in the root component using two distinct instance-context attachments or joint origins. All seven native motion families; offsets mm, angle and angular limits deg. Read back freshly resolved attachment graph, native parameters and root-space occurrence placement. Root/non-root sides must be unambiguous; both grounded and ancestor/descendant pairs are refused. Inferred joints are unsupported. Existing pending positions must be captured or reverted first. Before applying drive values, checks native joint-transform anchor offset magnitude/axiality and zero-angle axis collinearity. Native joint matrices have explicit provenance; physical angle/flip sense requires independent occurrence-geometry acceptance.\",\"properties\":{\"angle\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"axis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"flipped\":{\"type\":\"boolean\"},\"geometryOne\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"edge\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"origin\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"origin\"],\"type\":\"object\"}]},\"geometryTwo\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"edge\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"origin\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"origin\"],\"type\":\"object\"}]},\"locked\":{\"type\":\"boolean\"},\"name\":{\"type\":\"string\"},\"offset\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"pitchLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"pitchValue\":{\"type\":\"number\"},\"primarySlideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"primarySlideValue\":{\"type\":\"number\"},\"rollLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rollValue\":{\"type\":\"number\"},\"rotationLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"rotationValue\":{\"type\":\"number\"},\"secondarySlideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"secondarySlideValue\":{\"type\":\"number\"},\"slideAxis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"slideLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"slideValue\":{\"type\":\"number\"},\"type\":{\"enum\":[\"rigid\",\"revolute\",\"slider\",\"cylindrical\",\"pin_slot\",\"planar\",\"ball\"]},\"yawLimits\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"maximum\":{\"type\":\"number\"},\"maximumEnabled\":{\"type\":\"boolean\"},\"minimum\":{\"type\":\"number\"},\"minimumEnabled\":{\"type\":\"boolean\"},\"rest\":{\"type\":\"number\"},\"restEnabled\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"},\"yawValue\":{\"type\":\"number\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"type\",\"geometryOne\",\"geometryTwo\"],\"type\":\"object\"},\"regular_joint_edit\":{\"description\":\"Redefine root-owned regular joint geometry, motion family, offsets, angle, flip or lock. Restore timeline in finally and verify after recompute. Use joint_edit for name, suppression, limits and drive values; joint_delete for deletion.\",\"properties\":{\"angle\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"axis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"flipped\":{\"type\":\"boolean\"},\"geometryOne\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"edge\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"origin\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"origin\"],\"type\":\"object\"}]},\"geometryTwo\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"edge\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"entity\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"keyPoint\":{\"enum\":[\"center\",\"start\",\"middle\",\"end\"]}},\"required\":[\"entity\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"origin\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"origin\"],\"type\":\"object\"}]},\"joint\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"locked\":{\"type\":\"boolean\"},\"offset\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"offsetX\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"offsetY\":{\"description\":\"Number in mm (angle in deg), or a dimensionally valid Fusion parameter expression.\",\"oneOf\":[{\"type\":\"number\"},{\"maxLength\":512,\"minLength\":1,\"type\":\"string\"}]},\"slideAxis\":{\"enum\":[\"x\",\"y\",\"z\"]},\"type\":{\"enum\":[\"rigid\",\"revolute\",\"slider\",\"cylindrical\",\"pin_slot\",\"planar\",\"ball\"]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"joint\"],\"type\":\"object\"},\"rigid_group_create\":{\"description\":\"Create a native rigid group from exact occurrence instances; includeChildren defaults true.\",\"properties\":{\"includeChildren\":{\"type\":\"boolean\"},\"name\":{\"type\":\"string\"},\"occurrences\":{\"items\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":2,\"type\":\"array\"}},\"required\":[\"op\",\"target\",\"sessionId\",\"operationId\",\"occurrences\"],\"type\":\"object\"},\"rigid_group_delete\":{\"description\":\"Delete an exact rigid group with transaction recovery.\",\"properties\":{\"group\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"target\",\"sessionId\",\"operationId\",\"group\"],\"type\":\"object\"},\"rigid_group_edit\":{\"description\":\"Rename or suppress an exact rigid group with transaction recovery.\",\"properties\":{\"group\":{\"description\":\"Guarded reference from inspect in this document/revision; occurrence references retain instance context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"suppressed\":{\"type\":\"boolean\"}},\"required\":[\"op\",\"target\",\"sessionId\",\"operationId\",\"group\"],\"type\":\"object\"},\"sketch_constraint\":{\"description\":\"Constrain entities in one sketch. midpoint order is point,line; symmetry order entity1,entity2,symmetryLine. fix sets one entity fixed.\",\"properties\":{\"entities\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"sketch\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"type\":{\"enum\":[\"horizontal\",\"vertical\",\"coincident\",\"parallel\",\"perpendicular\",\"tangent\",\"equal\",\"concentric\",\"collinear\",\"midpoint\",\"symmetry\",\"fix\"]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"sketch\",\"type\",\"entities\"],\"type\":\"object\"},\"sketch_create\":{\"description\":\"Create a native component-definition sketch on an origin/construction plane or planar face. Coordinates in subsequent geometry are sketch-space mm.\",\"properties\":{\"component\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"plane\":{\"oneOf\":[{\"enum\":[\"xy\",\"xz\",\"yz\"]},{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\"],\"type\":\"object\"},\"sketch_curve_edit\":{\"description\":\"Edit one native sketch curve with sketch-space mm pick. trim removes the nearest segment; extend chooses nearest endpoint; split requires an interior on-curve point; break uses neighboring intersections. Fresh replacement refs are returned; original may be deleted. In-place extend returns the original with a fresh ref only after its geometry change survives recompute. No change or empty break/split fails. Full trim deletion requires allowDelete true. Linked/derived/deferred-compute geometry refused.\",\"properties\":{\"action\":{\"enum\":[\"trim\",\"extend\",\"split\",\"break\"]},\"allowDelete\":{\"type\":\"boolean\"},\"createConstraints\":{\"type\":\"boolean\"},\"curve\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"pick\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"sketch\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"target\",\"sessionId\",\"operationId\",\"sketch\",\"curve\",\"action\",\"pick\"],\"type\":\"object\"},\"sketch_diagnostics\":{\"description\":\"Read native sketch health/message, fully-constrained/fixed/linked/reference flags, geometric constraints and driving dimensions. Reports no solver DOF count or conflict-set explanation; no recompute/mutation.\",\"properties\":{\"sketch\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"target\",\"sketch\"],\"type\":\"object\"},\"sketch_dimension\":{\"description\":\"Add driving dimensions. Distance uses two point references; radius/diameter one curve; angle two lines. Numeric expressions use mm or deg.\",\"properties\":{\"entities\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"expression\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"parameterName\":{\"type\":\"string\"},\"position\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"sketch\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"type\":{\"enum\":[\"distance\",\"horizontal\",\"vertical\",\"radius\",\"diameter\",\"angle\"]}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"sketch\",\"type\",\"entities\",\"expression\",\"position\"],\"type\":\"object\"},\"sketch_edit\":{\"description\":\"Move sketch points/endpoints/centers in sketch-space mm, change radius or construction/fixed flags; solver failure aborts the operation.\",\"properties\":{\"changes\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"center\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"construction\":{\"type\":\"boolean\"},\"end\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"fixed\":{\"type\":\"boolean\"},\"position\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"radius\":{\"type\":\"number\"},\"start\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"}},\"required\":[],\"type\":\"object\"},\"entity\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"sketch\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"sketch\",\"entity\",\"changes\"],\"type\":\"object\"},\"sketch_geometry\":{\"description\":\"Create a transactionally grouped set of sketch primitives. Numeric geometry uses mm and arc sweeps/polygon angles use deg.\",\"properties\":{\"items\":{\"items\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"position\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"type\":{\"enum\":[\"point\"]}},\"required\":[\"type\",\"position\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"construction\":{\"type\":\"boolean\"},\"end\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"start\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"type\":{\"enum\":[\"line\"]}},\"required\":[\"type\",\"start\",\"end\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"construction\":{\"type\":\"boolean\"},\"end\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"start\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"type\":{\"enum\":[\"rectangle\"]}},\"required\":[\"type\",\"start\",\"end\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"center\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"construction\":{\"type\":\"boolean\"},\"radius\":{\"exclusiveMinimum\":0,\"type\":\"number\"},\"type\":{\"enum\":[\"circle\"]}},\"required\":[\"type\",\"center\",\"radius\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"center\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"construction\":{\"type\":\"boolean\"},\"start\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"sweep\":{\"type\":\"number\"},\"type\":{\"enum\":[\"arc\"]}},\"required\":[\"type\",\"center\",\"start\",\"sweep\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"angle\":{\"type\":\"number\"},\"center\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"construction\":{\"type\":\"boolean\"},\"radius\":{\"exclusiveMinimum\":0,\"type\":\"number\"},\"sides\":{\"maximum\":128,\"minimum\":3,\"type\":\"integer\"},\"type\":{\"enum\":[\"polygon\"]}},\"required\":[\"type\",\"center\",\"radius\",\"sides\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"construction\":{\"type\":\"boolean\"},\"end\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"start\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"type\":{\"enum\":[\"slot\"]},\"width\":{\"exclusiveMinimum\":0,\"type\":\"number\"}},\"required\":[\"type\",\"start\",\"end\",\"width\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"closed\":{\"type\":\"boolean\"},\"construction\":{\"type\":\"boolean\"},\"points\":{\"items\":{\"items\":{\"type\":\"number\"},\"maxItems\":3,\"minItems\":2,\"type\":\"array\"},\"maxItems\":128,\"minItems\":2,\"type\":\"array\"},\"type\":{\"enum\":[\"spline\"]}},\"required\":[\"type\",\"points\"],\"type\":\"object\"}]},\"maxItems\":128,\"minItems\":1,\"type\":\"array\"},\"sketch\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"sketch\",\"items\"],\"type\":\"object\"},\"sketch_offset\":{\"description\":\"Modern createOffsetInput/addOffset2. Curves must be native 2D, unique, in connected flow order (never reordered). Nonzero signed mm number/expression: positive right, negative left; a single circle/ellipse positive outside. Topology matched defaults true. Read back native signed distance, parent/child refs and controlling parameter after recompute. No retired Sketch.offset fallback.\",\"properties\":{\"curves\":{\"items\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"distance\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"sketch\":{\"description\":\"Current guarded entity reference; root-space child geometry requires its exact occurrence context.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"topologyMatched\":{\"type\":\"boolean\"}},\"required\":[\"op\",\"target\",\"sessionId\",\"operationId\",\"sketch\",\"curves\",\"distance\"],\"type\":\"object\"},\"sketch_project\":{\"description\":\"Project selected topology into a sketch with Fusion associative projection.\",\"properties\":{\"entities\":{\"items\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"},\"maxItems\":256,\"minItems\":1,\"type\":\"array\"},\"sketch\":{\"description\":\"Reference returned by inspect/inspect_entity in this document revision; native component-definition references for authoring.\",\"required\":[\"documentId\",\"revision\",\"objectType\"],\"type\":\"object\"}},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\",\"sketch\",\"entities\"],\"type\":\"object\"},\"transaction_probe\":{\"description\":\"Verify runtime PTransaction abort+commit using temporary user parameters, remove probe data and compare semantic restoration. Required once per running add-in session before feature/sketch/atomic-batch writes. Returns fresh target; inspect again for current references.\",\"properties\":{},\"required\":[\"op\",\"sessionId\",\"operationId\",\"target\"],\"type\":\"object\"}},\"schemaVersion\":1,\"sessionId\":\"3c5e6744-d1ac-4276-9264-b05a96c51e3d\",\"shell\":\"rust\",\"statusVerb\":\"fusion_get_app_state\",\"success\":true,\"timeoutSeconds\":60,\"transactions\":{\"externalEffects\":\"exports publish atomically; model recovery does not undo files\",\"genericAtomicBatch\":false,\"newDesignRecovery\":\"discard only the new unsaved document\",\"parameterRecovery\":\"compensating expression restore with semantic readback\",\"typedModelOperations\":{\"backend\":\"PTransaction\",\"evidence\":null,\"scope\":\"one active Fusion Design; no document lifecycle, files or cloud effects\",\"verified\":false}},\"units\":{\"angle\":\"deg\",\"area\":\"mm2\",\"length\":\"mm\",\"mass\":\"kg\",\"volume\":\"mm3\"}}", + "schemaVersion": 1, + "sessionId": "3c5e6744-d1ac-4276-9264-b05a96c51e3d", + "shell": "rust", + "status": "ok", + "statusVerb": "fusion_get_app_state", + "success": true, + "timeoutSeconds": 60, + "transactions": { + "externalEffects": "exports publish atomically; model recovery does not undo files", + "genericAtomicBatch": false, + "newDesignRecovery": "discard only the new unsaved document", + "parameterRecovery": "compensating expression restore with semantic readback", + "typedModelOperations": { + "backend": "PTransaction", + "evidence": null, + "scope": "one active Fusion Design; no document lifecycle, files or cloud effects", + "verified": false + } + }, + "units": { + "angle": "deg", + "area": "mm2", + "length": "mm", + "mass": "kg", + "volume": "mm3" + } + } +} \ No newline at end of file