← Commit history

Merge PR #253: Share native Rust mechanical checkpoint and AI Flow integration status (native-rust-checkpoint-2026-10-16 -> master) merge

John Lauer ·fcd9446b18 ·26d ago ·parents 86e30d7, b096267

Showing changes introduced by the merge (against its first parent).

65 files changed +18869 diff truncated
native-rust/.cargo/config.toml+4native-rust/BASELINE-BOM-OFFLINE-FREEZE5.txt+79native-rust/BASELINE-M12-FIX2-PRODUCT-SHA256.txt+105native-rust/BASELINE-R10-PRODUCT-FREEZE2.txt+92native-rust/BASELINE-R11-PRODUCT-FREEZE1.txt+97native-rust/BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+105native-rust/BASELINE-R12-PRODUCT-FREEZE1.txt+103native-rust/BASELINE-R13-PRODUCT-FREEZE1.txt+109native-rust/BASELINE-R14-PRODUCT-FREEZE1.txt+115native-rust/BASELINE-R15-PRODUCT-FREEZE2.txt+122native-rust/BASELINE-R16-PRODUCT-FREEZE1.txt+130native-rust/BASELINE-R17-PRODUCT-FREEZE1.txt+138native-rust/BASELINE-R18-FIX1-SOURCE-SHA256.txt+152native-rust/BASELINE-R18-FIX2-DELTA-SHA256.txt+5native-rust/BASELINE-R18-PRODUCT-FREEZE2.txt+148native-rust/BASELINE-R19-FIX1-PRODUCT-FREEZE1.txt+168native-rust/BASELINE-R19-PRODUCT-FREEZE1.txt+164native-rust/BASELINE-R20-FIX1-PRODUCT-FREEZE1.txt+180native-rust/BASELINE-R20-FIX2-PRODUCT-FREEZE1.txt+184native-rust/BASELINE-R20-FIX3-PRODUCT-FREEZE1.txt+186native-rust/BASELINE-R20-PRODUCT-FREEZE1.txt+178native-rust/BASELINE-R9-PRODUCT-FREEZE1.txt+79native-rust/BASELINE-R9-SHA256.txt+76native-rust/BASELINE-SKETCH-CORE-SHA256.txt+7native-rust/Cargo.lock+476native-rust/Cargo.toml+13native-rust/DEVELOPMENT.md+23native-rust/FREEZE-1.md+7native-rust/MIGRATION-PLAN.md+47native-rust/PRODUCT-SOURCE-SHA256.txt+193native-rust/R21-VALIDATION.json+36native-rust/README.md+22native-rust/artifact-publication/Cargo.toml+13native-rust/artifact-publication/PORT-MAPPING.md+23native-rust/artifact-publication/README.md+46native-rust/artifact-publication/SOURCE-CHECKSUMS.sha256+8native-rust/artifact-publication/src/lib.rs+338native-rust/artifact-publication/src/tests.rs+335native-rust/artifact-publication/src/windows.rs+292native-rust/bom-core/Cargo.toml+11native-rust/bom-core/PORT-MAPPING.md+86native-rust/bom-core/README.md+88native-rust/bom-core/SOURCE-CHECKSUMS.sha256+13native-rust/bom-core/src/configuration.rs+283native-rust/bom-core/src/csv.rs+190native-rust/bom-core/src/engine.rs+551native-rust/bom-core/src/lib.rs+155native-rust/bom-core/src/model.rs+241native-rust/bom-core/tests/bom.rs+1070native-rust/dispatch/Cargo.toml+7native-rust/dispatch/src/lib.rs+1169native-rust/docs/EXACT-SKETCH-ENTITIES.md+50native-rust/docs/MATERIAL-CATALOG.md+11native-rust/docs/NATIVE-LIFECYCLE-PLAN.md+95native-rust/docs/NATIVE-MCMASTER-DISCOVERY.md+23native-rust/docs/NATIVE-ROOT-PHYSICAL.md+65native-rust/docs/NATIVE-SKETCH-LINE-STATE.md+63native-rust/docs/NATIVE-SKETCH-RELATIONS.md+100native-rust/docs/NEXT-HORIZONTAL-VERTICAL.md+66native-rust/docs/PORTING-LEDGER.json+9116native-rust/docs/PORTING-LEDGER.md+613native-rust/docs/R10-SKETCH-CONTRACT.md+57native-rust/docs/R11-GEOMETRY-CONTRACT.md+62native-rust/docs/R12-EXTRUDE-CONTRACT.md+63native-rust/docs/R12-EXTRUDE-START-FIX.md+23
native-rust/.cargo/config.tomladded+4
@@ -0,0 +1,4 @@+[source.crates-io]+replace-with = "vendored-sources"+[source.vendored-sources]+directory = "vendor"
native-rust/BASELINE-BOM-OFFLINE-FREEZE5.txtadded+79
@@ -0,0 +1,79 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+b3b8cc8d88996c76bec2282d9ca2f732e0542be58846e61e318820ccd09ed085  BASELINE-PORTS-SHA256.txt+d90a8e72f95cf6cdbcdc1e55783c47fc5621ab0082275f3e5479c35205aaa3c7  BASELINE-R8-SHA256.txt+ac8a52006c053daac4ce92f07e13d0c2d0b5f95dcfe3c19969fe61761bb99afa  Cargo.lock+7133328a40a393e308d8bc7c2867b10e376d265be2d23bc958cc3d81b47113a5  Cargo.toml+69b40bff8adf4eafe6fe54ad04065f640c6b47bd5e52c7a6b8fe7f6a59080825  MIGRATION-PLAN.md+2691b8b81701e9d41af21fba3735c267bbf8766aa0d2aa2768309c0907d944ba  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+a20240d19a1f271e84fefe5f1010647aff671ef2fb6bc528e4b2b9cd912db544  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+c47a416d668814d403d157e6e2a9dd527c654895e8f2383c136aba8b537261b2  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+61e8b63aea25ff559057232a95951811d37eff437992bc11c6d33e0acabc776b  mechanical/tests/contracts.rs+1e995c0eb819d85fc4db509b479ce9b6b88884c120b871b23fa842323598f548  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+c661e27ad383a9779cc39c1abc247f99305f51eb48d57c2b5584279a49c6761d  native-addin/Cargo.toml+52e7b9e8ee9ba221d7bd5231a4c9b61d737ce367d35618b8f32df00e2757c7b0  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+8d63ca6446102ca46d7f96d0c8aff6c696ee504168beec4e3dcfbd292d6b96da  native-addin/shim/sdk.cpp+59a1fe7ce07288594bc587d8d153e8e388d4a63ba4d1043ad486ff4e080031a9  native-addin/shim/sdk.h+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+c5cab961ada3d98876fce4778cbdc89a903a22169d77ee6664ab82ea5bbfe71a  native-addin/src/execution.rs+d4ba290319a34af115b3e1a0e1041e8e5f7c45f289160e1e9a51785b0a1385f2  native-addin/src/execution_tests.rs+6d698cd611f3a151384ace2103cc28ffa5031a8d35e78db74cef068cbbf61f7c  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+5a6ae1a84bbf1db27f7dfbcb0fab4808967b0df383e5757d30ae9587489a6a34  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+e9de641af77a9946d43d6fb70c267accd929e0f6cc1b59d1f2d1f9f7ae20e940  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+4ea80d69edda5c03e3f92b7c24a8806a5105173ece7f3f592163c49db864dfdf  native-addin/src/service.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs
native-rust/BASELINE-M12-FIX2-PRODUCT-SHA256.txtadded+105
@@ -0,0 +1,105 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+6d52ef1f86060e8cc522e56df8eda0f270419007eb27d351a1d1697aebe2923a  MIGRATION-PLAN.md+684477f5f57e5a6a4b48bf806fb34df72fceccad9b03e03697e7beec1a6d1c01  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+29e554aa9f8871935ea5e8c6cbb246c4ae36a49b3e6db1450f0e72ce6a4c6ac1  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+9c768a436d689ac87da031b69ea1bf58acae9d584da5d16308d651abd7fc9b00  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+2e3e8b7ebb8982e682c8e2ac331aa8316995801f5a3189210585f47d8284c597  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+d05ba36cbc876d81fa0112bb3226e53260306f3cd87dac0e2865c3bcfbe21534  mechanical/tests/contracts.rs+5bebb99c29d2324cb1924952187c2ea76049d90724b7473cde69b835ed040216  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+114c6bdfa4b7c4302180e1b29a0428f58bcde10ef253b7ac816cc99eb54a31bd  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+d753612895aa2ac5d1ab43652f7e6ee5b5bbf3edfedcc24cea4ce4f9a399b882  native-addin/shim/sdk.cpp+a27d577b680503cde7b96915409f9f921fcf499ade73e05e8060626a82dd3273  native-addin/shim/sdk.h+3395fd744e092259882b368f1f8bd227b6b392753f1a80646401fb2a9358d625  native-addin/shim/sketch.inc+e54ff0bcb6d8ffdf0e6aac45cd95f768f45e429ab93e53afae81961846ac8ecb  native-addin/shim/sketch_geometry.inc+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+0c53680b80a5667e067c0cbbf3dbc766291fc6fed3b2e67a5c542627ba5393cc  native-addin/src/execution.rs+c6a8336f71924496c6ed125bc8afbbdb093d17edc7074ed468a9ea0bc5c67765  native-addin/src/execution_tests.rs+e3eb1363c9a895c3d7b3d6cc85b2e06f7b66680f675ed990b6f8e5f0b1d9d693  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+ea17737fc971295419359d08e6c0932d967a8cd7b7a6ebd356a61e45b60b895f  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+23336d5541259ead74b408b44102878c040ba4fa5603cbab679aa12a4f6b6314  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+06988006e37868b6d7ca5ab12489926be2062000ca89d1a36e03bf93434594aa  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+d5768a31398c12d3be0e3b2203ed607684f6dcca71b4e5603ac8f90a6ba9a711  native-addin/src/service.rs+edab90ba2a7f4877ff21c958b10bf3851d3f23fde592e591b9c750c21ba6b76e  native-addin/src/sketches.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+43b144ca77f45dc8c057a72b60fe84fa0b16321646c28aff7ee6e0a834252009  native-addin/src/sketches/extrusion/tests.rs+9df27e1b8d9a11fb497b72ddaca0d3e632338696abfcc788e31ccb151b3f27d8  native-addin/src/sketches/geometry.rs+1122f2178339f7c04dc000cf713ca19bc8804b34a5c2fd9c328cc5fc153d7af5  native-addin/src/sketches/geometry/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R10-PRODUCT-FREEZE2.txtadded+92
@@ -0,0 +1,92 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+736d4b33e4531189e0d90a7d888eb620ea16114020881f8eaf41e562c3974c0f  MIGRATION-PLAN.md+bdbf3f5df76c5396e3962df3ece7cfa2ef1911f9bdb7dbca279fab0a4ad348dd  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+c67718ed19d1e04995321c46455a7bc89792a46a5e8959f6e0af8c5fb37d3ea0  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+3b04ab74e1d7dcd3db9e03006b37d1c458f4a3d8140a57dd1821fe843c885b61  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+b54f79f512b823f93ca4ee5a85399c606afa6f0c75b204e4e24bc2c855455c01  mechanical/tests/contracts.rs+2822e3f55babf0a5cda7e42c612959aa95078f70b37fcd23c65d85c2d45012e8  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+d8cf0f3d223ea10a34a2c8949de284454decf9a9d34fdefcb7622ccf582ef9d3  native-addin/build.rs+ebb91f660d170dc283b3017d05d5d81eadcab2f519ae7de0b85e69b37156fcf2  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+850527f764f911622796f501b5931cdb5ebdeafcaffff316aefe84226d14d7a8  native-addin/shim/sdk.cpp+64f206dee572c8b00fbfc2e2fefa1945ce2d994b5d9e1acf034bb8d3500b303e  native-addin/shim/sdk.h+f1b53016f2ccc4a97e13e2e702622432b493212dfba64a22d9ccce4e492868e7  native-addin/shim/sketch.inc+0e6d88daa6a53d90af7743728bd71c0c45ac001289a7b39d1ff9513eca4197d8  native-addin/src/bom.rs+cca0b8fba0e979657ca03a5f21fcb371af950c0251f8c1528bab77a4842c4c01  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+b1dffe06ed17af4f02e31144f4d0f59d5c529f934bb46a9e063f17fa76167f2c  native-addin/src/execution.rs+d17f99d8aba8ce666a87207f92929b8885b74e94be00a842de317d3141f47648  native-addin/src/execution_tests.rs+1f3be0a78e3a960cbd85c223944449067a3683e772e22fe2412819993ed3bd83  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+ea17737fc971295419359d08e6c0932d967a8cd7b7a6ebd356a61e45b60b895f  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+fba3bc75c0400a0f91f21dece17b7056814803e7ff1106bc67c223a193010d83  native-addin/src/native.rs+81b1f2818284fcba186c372124fc96e9bd8fbd1c4d533d758e7096bd8e577f03  native-addin/src/native/bom_adapter.rs+120836b9bf8ce95b97edba569fc0d8135212a8df6fa541a8ae252437c5a5dfd2  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+bb08b2bc46320e4c5c402fee2e49079a237e011900d23718db47143a4d49a743  native-addin/src/service.rs+78325f0fc91c7b41facb27c203b3bbfe53c0bf95ad35fde477db690ae680ffac  native-addin/src/sketches.rs+506cd09d0b6909c9e2fcf700ee60086e3223266b834ccac46db4785c2d18769f  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R11-PRODUCT-FREEZE1.txtadded+97
@@ -0,0 +1,97 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+1779019c6e10c59b6534b1ae241a78d7dd956994be9979d3176e4e38b14b700a  MIGRATION-PLAN.md+17b120a5597f4c09521e36fbe860c3ba2981c59b53f9dff36c37164cc4d5843c  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+c67718ed19d1e04995321c46455a7bc89792a46a5e8959f6e0af8c5fb37d3ea0  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+3b04ab74e1d7dcd3db9e03006b37d1c458f4a3d8140a57dd1821fe843c885b61  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+b54f79f512b823f93ca4ee5a85399c606afa6f0c75b204e4e24bc2c855455c01  mechanical/tests/contracts.rs+d8684dc4ce4a83b211a58cabf6909a62fcb8e15783b9cf2f60fa30e7973db056  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+37dab816c18776a0f57094f2a1eebbc5f03d49f7fa1e6e866ae47bef9a0e4cdc  native-addin/build.rs+ebb91f660d170dc283b3017d05d5d81eadcab2f519ae7de0b85e69b37156fcf2  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+8223457f595d167f4d273b0fe7b3f652bb7aa6d8d18c9dd70479554b6c86e427  native-addin/shim/sdk.cpp+faf8b840947cfd6e1db5ec9337c24dcc6332e481f85320a2b8d36cb24e3c1adc  native-addin/shim/sdk.h+8420c8a6c8e057244ae181d224c7810c6eefdf212277af739b683ec13fab163b  native-addin/shim/sketch.inc+e54ff0bcb6d8ffdf0e6aac45cd95f768f45e429ab93e53afae81961846ac8ecb  native-addin/shim/sketch_geometry.inc+0e6d88daa6a53d90af7743728bd71c0c45ac001289a7b39d1ff9513eca4197d8  native-addin/src/bom.rs+cca0b8fba0e979657ca03a5f21fcb371af950c0251f8c1528bab77a4842c4c01  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+e9deeba7d9acb44204e79f6c63fbd60e4b72af68d4f0cc762a87a0007b087b04  native-addin/src/execution.rs+4bce94b21cafe6d6b6ca2cd92fcf0791421c96bdf1e9d39fdbd9a2f7bb5adf53  native-addin/src/execution_tests.rs+dd3652d5754dabefaffea1006d32ea5ebdddeed7aa7b113f5fee77c176e9a7df  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+ea17737fc971295419359d08e6c0932d967a8cd7b7a6ebd356a61e45b60b895f  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+5ace6c28713ff14d42dda568163bebfa03512324e638826da1568c7f6673c7de  native-addin/src/native.rs+81b1f2818284fcba186c372124fc96e9bd8fbd1c4d533d758e7096bd8e577f03  native-addin/src/native/bom_adapter.rs+dd88b7852e750af9daec64b41d7ac355e2a9d589bcc3f339702ed6005f8ba8ae  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+fb4bea7614e290464df0d61ac65815f2a7a3d20c2f6b197d2407e95a74d67d65  native-addin/src/service.rs+5f1bfbd8af7e027d182cc67559161b75e8e590d70442ebb3f02988c7cd8e9d44  native-addin/src/sketches.rs+9df27e1b8d9a11fb497b72ddaca0d3e632338696abfcc788e31ccb151b3f27d8  native-addin/src/sketches/geometry.rs+51c27a373113f8c6a07d629ad054aace5454c3378171f3622d6d8756bcec8d7b  native-addin/src/sketches/geometry/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R12-FIX1-PRODUCT-FREEZE1.txtadded+105
@@ -0,0 +1,105 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+6d52ef1f86060e8cc522e56df8eda0f270419007eb27d351a1d1697aebe2923a  MIGRATION-PLAN.md+a976085dcd34b1d56b6d7011a01cc74496b62e69e24c946fe718a343121034ee  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+d28f1033439914a7fdb4ffe8795da8920667bc3100011f6c2962d3121a5ac68d  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+9c768a436d689ac87da031b69ea1bf58acae9d584da5d16308d651abd7fc9b00  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+2e3e8b7ebb8982e682c8e2ac331aa8316995801f5a3189210585f47d8284c597  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+d05ba36cbc876d81fa0112bb3226e53260306f3cd87dac0e2865c3bcfbe21534  mechanical/tests/contracts.rs+5bebb99c29d2324cb1924952187c2ea76049d90724b7473cde69b835ed040216  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+114c6bdfa4b7c4302180e1b29a0428f58bcde10ef253b7ac816cc99eb54a31bd  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+ef82ac5aba4b278de9f6b41ad1a31589f90958bb06d992dd5f3553a7316e106e  native-addin/shim/extrusion.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+d753612895aa2ac5d1ab43652f7e6ee5b5bbf3edfedcc24cea4ce4f9a399b882  native-addin/shim/sdk.cpp+a0231a2cabea6d470cec213acc911e77af6734ea59f98b3332bb321662532c5c  native-addin/shim/sdk.h+caf5b34460549dd44c5340c1fb924c88a556d67a72b8546f0cc52ef3050cc505  native-addin/shim/sketch.inc+e54ff0bcb6d8ffdf0e6aac45cd95f768f45e429ab93e53afae81961846ac8ecb  native-addin/shim/sketch_geometry.inc+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+0c53680b80a5667e067c0cbbf3dbc766291fc6fed3b2e67a5c542627ba5393cc  native-addin/src/execution.rs+c6a8336f71924496c6ed125bc8afbbdb093d17edc7074ed468a9ea0bc5c67765  native-addin/src/execution_tests.rs+e3eb1363c9a895c3d7b3d6cc85b2e06f7b66680f675ed990b6f8e5f0b1d9d693  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+ea17737fc971295419359d08e6c0932d967a8cd7b7a6ebd356a61e45b60b895f  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+23336d5541259ead74b408b44102878c040ba4fa5603cbab679aa12a4f6b6314  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c88834b5dafccee3e53acd31606c300d70b39f69d7b1f5738f091f650b3814f8  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+d5768a31398c12d3be0e3b2203ed607684f6dcca71b4e5603ac8f90a6ba9a711  native-addin/src/service.rs+edab90ba2a7f4877ff21c958b10bf3851d3f23fde592e591b9c750c21ba6b76e  native-addin/src/sketches.rs+284662068d67469ec13934410939745975ed047e32ba28402643e046d7ea08a7  native-addin/src/sketches/extrusion.rs+834870c856328961f96bb46f1eb4d87ba91e68493857ba67a9da1a76fc3f6271  native-addin/src/sketches/extrusion/tests.rs+9df27e1b8d9a11fb497b72ddaca0d3e632338696abfcc788e31ccb151b3f27d8  native-addin/src/sketches/geometry.rs+1122f2178339f7c04dc000cf713ca19bc8804b34a5c2fd9c328cc5fc153d7af5  native-addin/src/sketches/geometry/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R12-PRODUCT-FREEZE1.txtadded+103
@@ -0,0 +1,103 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+6d52ef1f86060e8cc522e56df8eda0f270419007eb27d351a1d1697aebe2923a  MIGRATION-PLAN.md+a976085dcd34b1d56b6d7011a01cc74496b62e69e24c946fe718a343121034ee  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+d28f1033439914a7fdb4ffe8795da8920667bc3100011f6c2962d3121a5ac68d  docs/R12-EXTRUDE-CONTRACT.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+9c768a436d689ac87da031b69ea1bf58acae9d584da5d16308d651abd7fc9b00  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+2e3e8b7ebb8982e682c8e2ac331aa8316995801f5a3189210585f47d8284c597  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+d05ba36cbc876d81fa0112bb3226e53260306f3cd87dac0e2865c3bcfbe21534  mechanical/tests/contracts.rs+5bebb99c29d2324cb1924952187c2ea76049d90724b7473cde69b835ed040216  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+114c6bdfa4b7c4302180e1b29a0428f58bcde10ef253b7ac816cc99eb54a31bd  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3909ea46d078dd06f914fce0b54eb0781ab59491c0b0771a9c426215afdc5882  native-addin/shim/extrusion.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+d753612895aa2ac5d1ab43652f7e6ee5b5bbf3edfedcc24cea4ce4f9a399b882  native-addin/shim/sdk.cpp+a0231a2cabea6d470cec213acc911e77af6734ea59f98b3332bb321662532c5c  native-addin/shim/sdk.h+caf5b34460549dd44c5340c1fb924c88a556d67a72b8546f0cc52ef3050cc505  native-addin/shim/sketch.inc+e54ff0bcb6d8ffdf0e6aac45cd95f768f45e429ab93e53afae81961846ac8ecb  native-addin/shim/sketch_geometry.inc+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+0c53680b80a5667e067c0cbbf3dbc766291fc6fed3b2e67a5c542627ba5393cc  native-addin/src/execution.rs+7d8ce22e267821f22950d4e7c6352b159f85980091f6a682be46827f9b08850c  native-addin/src/execution_tests.rs+e3eb1363c9a895c3d7b3d6cc85b2e06f7b66680f675ed990b6f8e5f0b1d9d693  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+ea17737fc971295419359d08e6c0932d967a8cd7b7a6ebd356a61e45b60b895f  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+23336d5541259ead74b408b44102878c040ba4fa5603cbab679aa12a4f6b6314  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+0c6f2872f66c9b74bab4020b25f80ef98b7b8ef71666842577e5a7fdd4fee414  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+d5768a31398c12d3be0e3b2203ed607684f6dcca71b4e5603ac8f90a6ba9a711  native-addin/src/service.rs+edab90ba2a7f4877ff21c958b10bf3851d3f23fde592e591b9c750c21ba6b76e  native-addin/src/sketches.rs+284662068d67469ec13934410939745975ed047e32ba28402643e046d7ea08a7  native-addin/src/sketches/extrusion.rs+88333b87654d45dfaf6385c343ce5100b7638399eb7404f3b2ec8ae0719d63fe  native-addin/src/sketches/extrusion/tests.rs+9df27e1b8d9a11fb497b72ddaca0d3e632338696abfcc788e31ccb151b3f27d8  native-addin/src/sketches/geometry.rs+1122f2178339f7c04dc000cf713ca19bc8804b34a5c2fd9c328cc5fc153d7af5  native-addin/src/sketches/geometry/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R13-PRODUCT-FREEZE1.txtadded+109
@@ -0,0 +1,109 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+6d52ef1f86060e8cc522e56df8eda0f270419007eb27d351a1d1697aebe2923a  MIGRATION-PLAN.md+a976085dcd34b1d56b6d7011a01cc74496b62e69e24c946fe718a343121034ee  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+d28f1033439914a7fdb4ffe8795da8920667bc3100011f6c2962d3121a5ac68d  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+ce976add5771540335000006151caef20bf5b4ec136ba57cb9de18eab33095a8  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5440de940cee2bd1b336cd14ecd359ce36b95d52a0633b0d35066f399ac5fdb0  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+295ac8caebceafbc33dc68ff79152995943332e63fffc98edce0228556317486  mechanical/tests/contracts.rs+5bebb99c29d2324cb1924952187c2ea76049d90724b7473cde69b835ed040216  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+114c6bdfa4b7c4302180e1b29a0428f58bcde10ef253b7ac816cc99eb54a31bd  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+ef82ac5aba4b278de9f6b41ad1a31589f90958bb06d992dd5f3553a7316e106e  native-addin/shim/extrusion.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+d753612895aa2ac5d1ab43652f7e6ee5b5bbf3edfedcc24cea4ce4f9a399b882  native-addin/shim/sdk.cpp+583567e1be82d75a49cca0d700bcea62f4af58803eddbe9a6b275f04a8d90a70  native-addin/shim/sdk.h+caf5b34460549dd44c5340c1fb924c88a556d67a72b8546f0cc52ef3050cc505  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+8efdcd2417e8df57d71f76a34670371c6b7e06a356fc09429569c676c3d0b44f  native-addin/src/execution.rs+f47cd2f3cc0cb63d7bb607864f9ed3d1b97d34c1470ea43f86eff470a7ac1728  native-addin/src/execution_tests.rs+eac0e09cd0554dd7fadc8480e590afa724803618de328ab3d5ea78529026e44e  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+ea17737fc971295419359d08e6c0932d967a8cd7b7a6ebd356a61e45b60b895f  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+0194bdb26a07254ab2ea357f4936b1fcfd8b1bdbd321de6af455283877d4f99f  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+b0e08584b368c62e728886fd8228fe0d997b788da3f1329e56a169bfc8a87f98  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+b193aa0588cb3f177cde7d1d542870c8e4ba04785aa484db06b7419fc9dab86b  native-addin/src/service.rs+e4d9ca132ca123d97e182ebce5276e9eed48948f7de24c31f847514b33fb571f  native-addin/src/sketches.rs+38ad0890fa74f940250884d0b8f6c00917768354542ccd5199a33729b531e64d  native-addin/src/sketches/entities.rs+88975c7df0b114a938e227e1bf37df309d0f142a3e7839b45fe2cab07b3ee9b1  native-addin/src/sketches/entities/tests.rs+284662068d67469ec13934410939745975ed047e32ba28402643e046d7ea08a7  native-addin/src/sketches/extrusion.rs+11af9f8c4a1eb91c6612eb61cef271e15f96e8ab20f5735032f81c0c1d2d15a3  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+319bf166e19e0c961aed79a94a4299f2e53219e9982961548423bf9262b0c2b0  native-addin/src/sketches/geometry/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R14-PRODUCT-FREEZE1.txtadded+115
@@ -0,0 +1,115 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+6d52ef1f86060e8cc522e56df8eda0f270419007eb27d351a1d1697aebe2923a  MIGRATION-PLAN.md+a976085dcd34b1d56b6d7011a01cc74496b62e69e24c946fe718a343121034ee  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+d28f1033439914a7fdb4ffe8795da8920667bc3100011f6c2962d3121a5ac68d  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+ce976add5771540335000006151caef20bf5b4ec136ba57cb9de18eab33095a8  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5440de940cee2bd1b336cd14ecd359ce36b95d52a0633b0d35066f399ac5fdb0  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+295ac8caebceafbc33dc68ff79152995943332e63fffc98edce0228556317486  mechanical/tests/contracts.rs+5bebb99c29d2324cb1924952187c2ea76049d90724b7473cde69b835ed040216  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+f8b84073e77b60867d5a0a952081ae9a900e02d4e17c081b4ff779cd57b97dce  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+ef82ac5aba4b278de9f6b41ad1a31589f90958bb06d992dd5f3553a7316e106e  native-addin/shim/extrusion.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+bc100cefe8e5d640fa22c10cf053b40b0508c2fc24bc309b391b2f542d1011a3  native-addin/shim/sdk.cpp+8871b2f881a70185aa782a21e8d61b1b939778f44c2d5df303c6023828553d4a  native-addin/shim/sdk.h+caf5b34460549dd44c5340c1fb924c88a556d67a72b8546f0cc52ef3050cc505  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+22b3e78d9ffecf56ddb1e3fb275478cb195c6934274efed91f4d5e17b27fb88d  native-addin/src/execution.rs+f47cd2f3cc0cb63d7bb607864f9ed3d1b97d34c1470ea43f86eff470a7ac1728  native-addin/src/execution_tests.rs+41b4a03ce3c1be42a411d557b421cb783373c396b1ed9bcee7e8955d15621158  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+16bbe4e94ac774069892970bc966f2b607d8985492d7f9301b069c8a8a936531  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+23acffd314486b1b237ffb1728bf6ab46baa5eb5e7eb97569404fab5a2cdef76  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+b0e08584b368c62e728886fd8228fe0d997b788da3f1329e56a169bfc8a87f98  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+1b784db0b63fd83d5c57d65f7c39938ebb34a19aea25046a0142406b9a87166b  native-addin/src/service.rs+e4d9ca132ca123d97e182ebce5276e9eed48948f7de24c31f847514b33fb571f  native-addin/src/sketches.rs+38ad0890fa74f940250884d0b8f6c00917768354542ccd5199a33729b531e64d  native-addin/src/sketches/entities.rs+3ab525548e468609a9744188cb992bd350f8a9c971297d4ce60f91a455b9d750  native-addin/src/sketches/entities/tests.rs+284662068d67469ec13934410939745975ed047e32ba28402643e046d7ea08a7  native-addin/src/sketches/extrusion.rs+11af9f8c4a1eb91c6612eb61cef271e15f96e8ab20f5735032f81c0c1d2d15a3  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+319bf166e19e0c961aed79a94a4299f2e53219e9982961548423bf9262b0c2b0  native-addin/src/sketches/geometry/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R15-PRODUCT-FREEZE2.txtadded+122
@@ -0,0 +1,122 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+0025f0a10fe21083fcaadbd1fb670341347a8739fd8e48a87abd246f606e2f33  MIGRATION-PLAN.md+1d58c952be65184ba123e9e33265214d068ce0c72bcd65f31d86fb106d7b5e29  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+ce976add5771540335000006151caef20bf5b4ec136ba57cb9de18eab33095a8  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5440de940cee2bd1b336cd14ecd359ce36b95d52a0633b0d35066f399ac5fdb0  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+295ac8caebceafbc33dc68ff79152995943332e63fffc98edce0228556317486  mechanical/tests/contracts.rs+0b4cdb8d64d563c57f1c59c976105729687a69e67eb71304e0a8c53be4033c80  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+a3a242c152895f8c1d2db24398783ed0072371e10e5d920e33ec4f38cb1a56c2  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+54c952309582ba07eb23c9a1a5538380c5a4b1d41725016a89c114020e57d50d  native-addin/shim/sdk.cpp+acef946790a49bf5fd00c097dbb1175ae7be79a3bfebce202f259bc277906acd  native-addin/shim/sdk.h+3395fd744e092259882b368f1f8bd227b6b392753f1a80646401fb2a9358d625  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+fab7e9e6b62b1a49ac494f809a49d439432cc2f0eff4ac355efeee3b00148e04  native-addin/src/execution.rs+f47cd2f3cc0cb63d7bb607864f9ed3d1b97d34c1470ea43f86eff470a7ac1728  native-addin/src/execution_tests.rs+c6533ecc7449d3b5cc1ccafd217dcfd374fad90a68c8e13a6ab7234722aa0cb7  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+9606e124db4b28a72f2c24d75586befcf98bfa8ea11432c7623ce5783b8fc61d  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+0eab46bfe31a5bbe7766eabc063e61d514d4dfc1442e013f50ee43ff58a800ef  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+1a86f251c238812a3e3b885c0f07ab4d3c5eeeeeb895c490a6b5bbba41c057be  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+9717b346398f7cb5a0741d495a082c205afc73e7d70285fad2cc3c1100cbbb5d  native-addin/src/service.rs+e4d9ca132ca123d97e182ebce5276e9eed48948f7de24c31f847514b33fb571f  native-addin/src/sketches.rs+38ad0890fa74f940250884d0b8f6c00917768354542ccd5199a33729b531e64d  native-addin/src/sketches/entities.rs+f81c720b00618847eca03cd4427f6f5603108d2d3a3e5c79983831652c6c8e7b  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+cfed80eb11dd387f770882a527832cb4edab6eb1ff7c32c636afe2993c6eae85  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+319bf166e19e0c961aed79a94a4299f2e53219e9982961548423bf9262b0c2b0  native-addin/src/sketches/geometry/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R16-PRODUCT-FREEZE1.txtadded+130
@@ -0,0 +1,130 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+7d9312b82e865350da795ec92712d2d8e78956d30ce145d4d1f302aa7c294b4e  FREEZE-1.md+0025f0a10fe21083fcaadbd1fb670341347a8739fd8e48a87abd246f606e2f33  MIGRATION-PLAN.md+e48ef8a727ec97f02e8a6bb3fa6f8a3f0b76e8a894e6054db5e0ccdd9b421484  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+ce976add5771540335000006151caef20bf5b4ec136ba57cb9de18eab33095a8  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5440de940cee2bd1b336cd14ecd359ce36b95d52a0633b0d35066f399ac5fdb0  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+295ac8caebceafbc33dc68ff79152995943332e63fffc98edce0228556317486  mechanical/tests/contracts.rs+69abc247b325db5a703332d33130ac3c073587acf7510232fb83c59fb6f99dd0  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+b0cc001055055901975593b143d8f2c5cee83cbf34086094accd2967fbb26918  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+b399d08c16b7be4d42e3c6d09d17122b1fa42f8155ee119c320fd05a626d639f  native-addin/shim/sdk.cpp+78017097271b913928b1b43cf6060398b53fd9816cea1e44d985a3a5e5158044  native-addin/shim/sdk.h+3395fd744e092259882b368f1f8bd227b6b392753f1a80646401fb2a9358d625  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+0b4bc09a53f27ea8c6b23edc3f584d3ed01dd6c7f1ece54eafa218b35f4c4675  native-addin/src/execution.rs+f47cd2f3cc0cb63d7bb607864f9ed3d1b97d34c1470ea43f86eff470a7ac1728  native-addin/src/execution_tests.rs+ecac8cdbd696dc0d59df05e5ab0cd66f9dc4a42e79121bba80a32256b263bb12  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+3a4494e8531449aa841c997c9d573089df8d53384c011f74f47fc02e7cb5522d  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+1095cf9fc59f6d195b833791523ace51d48c7a228240550d1f331df16cd2b48e  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+1a86f251c238812a3e3b885c0f07ab4d3c5eeeeeb895c490a6b5bbba41c057be  native-addin/src/native/sketch_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+f9778c6dced4868278e03edb4fb5304fbd852901d843a721c8bb228cf2235d00  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+940806e23cbca724cd2af7368bd5ec866ad7d66fc55c482d732e84725a1f7913  native-addin/src/service.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+e4d9ca132ca123d97e182ebce5276e9eed48948f7de24c31f847514b33fb571f  native-addin/src/sketches.rs+38ad0890fa74f940250884d0b8f6c00917768354542ccd5199a33729b531e64d  native-addin/src/sketches/entities.rs+c523c0074f72f9384bb9e67abdc5381e813afdd6771d092d6815ed7c95160be8  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+cfed80eb11dd387f770882a527832cb4edab6eb1ff7c32c636afe2993c6eae85  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+319bf166e19e0c961aed79a94a4299f2e53219e9982961548423bf9262b0c2b0  native-addin/src/sketches/geometry/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R17-PRODUCT-FREEZE1.txtadded+138
@@ -0,0 +1,138 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+7d9312b82e865350da795ec92712d2d8e78956d30ce145d4d1f302aa7c294b4e  FREEZE-1.md+0025f0a10fe21083fcaadbd1fb670341347a8739fd8e48a87abd246f606e2f33  MIGRATION-PLAN.md+9dc7fb8b7beb457130b3cf0758f2b04ad0440e4271e9495ab0431672a884f85c  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+412cd2d0e8bff3dda346cb38aa1640ce00d29ab60a01a2e2bf5acc5241ec94b6  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+07251eae03689708268ae8dba45c479cc8ef25d8b50da0ec8b32758b326d1cf0  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+e88128600e9cbaed0a0a1e629cef37f32a5907a244cf3a8b06d6e7c344772568  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+15b8c557bb5db9cf7ecee35a99cec3ef0f508cc0ad1c5ce76f5f5f88a8b082b4  mechanical/tests/contracts.rs+8aee449b9389169a844b0f3a5353980257d6127227336b38fc789e45e66e50d7  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+779661e0aeaa11176e0315cf3257b1ec0d08de75d9fd3a5f8ab688412ec5e4dc  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+82c4b06887d8187e8b4ecbee722241c8612cbd9ce63633cc578363cb49cde28c  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+d750fe8b0c15948eb9d59a976db28a941d1cd3527e719fcf1ad6545bec2d4b79  native-addin/shim/sdk.cpp+8634f7059efc9e5fdd68327b861a603a7243e10099242432d3b4d51ecbf5dd52  native-addin/shim/sdk.h+9be575e71d1648390eeb9828009968622a3527fb8dc66d104d0a4c4a0f310aec  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+a39e1161d0ee86c30f3367137bae79ceb696aec10419f7f3afbb68a289fd2fdf  native-addin/src/execution.rs+f47cd2f3cc0cb63d7bb607864f9ed3d1b97d34c1470ea43f86eff470a7ac1728  native-addin/src/execution_tests.rs+c77043a1e5bd267bf1b1ac412b605ef1d4575578bd5dd5a7b7ac8ec87cdde9d9  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+3a4494e8531449aa841c997c9d573089df8d53384c011f74f47fc02e7cb5522d  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+34b5e84fdd8f0d663a80ac8d2106793b3d460a588569bff3cc2ee64aee906979  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+5c4738a49e8444514a642affa2748d3c932feccd2f45268a2cc44191891d8d5e  native-addin/src/native/sketch_adapter.rs+941d67ed5751d9664329fb73fa011fd4b2735829c894312dc076fe0ffccde3c4  native-addin/src/native/sketch_adapter/line_state.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+ff4443bc6e31ef69e680a0487cfef3f11150c5126ece9d20d2282675a6dccd5a  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+8b8cfa8be4e08d70dc194c1330cf536121ec0c807886011f13740c12f1fb7b70  native-addin/src/service.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+354099120338caf1f993e218f234f839a6bc7a8d0de1bc54d7c30eed4adc58af  native-addin/src/sketches.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+72393189fba3f49a353af6976379750ca93d4e5b88ab70eb08e561f746990f5f  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+cfed80eb11dd387f770882a527832cb4edab6eb1ff7c32c636afe2993c6eae85  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+319bf166e19e0c961aed79a94a4299f2e53219e9982961548423bf9262b0c2b0  native-addin/src/sketches/geometry/tests.rs+ede18ff94f041420b1b1129bef5f388e31db12c4c543544eb98e34e7ebddf546  native-addin/src/sketches/line_state.rs+9298dd7c4862d0d16194c641801372599012681f1d7c81a837434a0cdc678e89  native-addin/src/sketches/line_state/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R18-FIX1-SOURCE-SHA256.txtadded+152
@@ -0,0 +1,152 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+85790b8e509392e71e663ff5fbb2db6d755cc77f9738ca9f53766dd18ee7d5bb  BASELINE-R18-FREEZE2-SHA256.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+7d9312b82e865350da795ec92712d2d8e78956d30ce145d4d1f302aa7c294b4e  FREEZE-1.md+0025f0a10fe21083fcaadbd1fb670341347a8739fd8e48a87abd246f606e2f33  MIGRATION-PLAN.md+0594f0ac189cd6c0cce80fde2a7749ee0fed96816f0e46d0a49f49cb57a3fc41  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+331a806dabd96ed9c310f0a1589eb9120a694a058e3c96e35ecaae3e4501ba0c  docs/R18-LIVE-REFERENCE-GETTER-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+04db7063cfb8fa24ced47d31417aeb36ad68f2083f367797f613b3b94c1c6abc  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+b8d56caa50c07faf0a762e2afa8016bf45aaef04a10badfbfd8178fb951a86b5  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+6f80dc3d3ea0e492da61b361f239e3663b5d56164bd87ac41f31ef26dcc54e0d  mechanical/tests/contracts.rs+3288406e035f0ed91016db235a782033c36e079d1333f9ffb24879c7c27a71da  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+e88b353eb467701e4ec36e9bce2ce06d6d9eb8a445a3e3d4ea3c670a019ae344  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+d48d3a089b00ad598e2d8c9fd81721e793aa874a31a4fd235c694084ee13f829  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+cd35642f361b4230d8408a68d9ab47716bf63e74fd2c27a8d8679e129858db72  native-addin/shim/reference_presence.h+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+d22784eda01a2d5d2746d8b2fc5903d286f2fff2125fd79e87c9c7820546ecb7  native-addin/shim/sdk.cpp+4f95238519fff817e85cbc8e58df938b5c03a39e4bc3b2e15445f204b913370f  native-addin/shim/sdk.h+eddca52cd1f0a04c5ac36225af1f442da1e02d2f3480a097eb3dbdd096f027ba  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+3569f96c7ac208ab15d136a82e8b1b6a3934f3beaff30ce1f0e08b893ed48d5a  native-addin/shim/tests/reference_presence.cpp+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+0dd48b682ce46b77c7f74ee0a1a60389b690abfccdb44f6a38a1c42f2c1b6e08  native-addin/src/execution.rs+e58e6b0ddae8f3271233e5edae3be805d8f514a85798ebfc10e554770d2e9038  native-addin/src/execution_tests.rs+ae89e958a161e5aa4b4351e1f3f7766b6fd09dfdf22ee00e59748a6a05ebcf91  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+3a4494e8531449aa841c997c9d573089df8d53384c011f74f47fc02e7cb5522d  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+5ec60b1f3ef01d02cf5076a4bc12b55effbbf80dae2ff71c69f6c7f10ef72b53  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+e9a408d40226997f1ead047f12ab2f01b6676eeac492ef7f4226849097778405  native-addin/src/native/sketch_adapter.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+b345131e34f2b864940e659734e20e23d5f2dcd0f60cd19ebe157975c86c448e  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+36c449e494f13609763819e28794cfbd7a2817a2bb19ab6e055eed1e924b5fb4  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+3635d1d460cc6b57118e39ce849dfb767ff6e938a3c0e4d76ad0ecdd613e7e11  native-addin/src/service.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+3bad3d22f7fb66e93c194073c75e93780c72c67a0ae9fdc2ced96ac52f1d65e8  native-addin/src/sketches.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+aa17b9eafa03cccbdda880465d4c1e9fa79a2298add25fd43000ee23c50d3249  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+cfed80eb11dd387f770882a527832cb4edab6eb1ff7c32c636afe2993c6eae85  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+319bf166e19e0c961aed79a94a4299f2e53219e9982961548423bf9262b0c2b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+b6f4193ef4005899fbabb73c047d3acbc5ad64dd2cbf3d5ed49f0969d510a576  native-addin/src/sketches/line_state/tests.rs+129ca7aeffe9acda39fa9c21bfe9f48e405003e5de14c2b0385166c415f0d9ec  native-addin/src/sketches/relations.rs+3c296897c19c97fa4aa76346269ef7d92eb3bcae5f87f32c24a9bc34b24a67f4  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R18-FIX2-DELTA-SHA256.txtadded+5
@@ -0,0 +1,5 @@+aeb714fb3cc50fa39d64e021dc2aa75c6607fda724f6b59eb0c0bc7e567e2c7b  docs/R18-LIVE-INCIDENCE-FIX.md+9d51c949f3eff611962c10d487e3d95501b0b887066fd6219c441c76d6a0de61  native-addin/build.rs+8fd6f37c4c13983caa7180c8326cb1e334746bcb8e2faef21b3eea2303f070b8  native-addin/shim/isolated_line_incidence.h+b4b366daa691e2e8b8a88a823f0ac9cbc9ec0a30c57d36187aa5679b93b26e5a  native-addin/shim/line_state.inc+f0bfc487d731f0092fac187668bbe96a222575138da4bb4224620b3a502d6d8f  native-addin/shim/tests/isolated_line_incidence.cpp
native-rust/BASELINE-R18-PRODUCT-FREEZE2.txtadded+148
@@ -0,0 +1,148 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+7d9312b82e865350da795ec92712d2d8e78956d30ce145d4d1f302aa7c294b4e  FREEZE-1.md+0025f0a10fe21083fcaadbd1fb670341347a8739fd8e48a87abd246f606e2f33  MIGRATION-PLAN.md+0594f0ac189cd6c0cce80fde2a7749ee0fed96816f0e46d0a49f49cb57a3fc41  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+04db7063cfb8fa24ced47d31417aeb36ad68f2083f367797f613b3b94c1c6abc  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+b8d56caa50c07faf0a762e2afa8016bf45aaef04a10badfbfd8178fb951a86b5  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+6f80dc3d3ea0e492da61b361f239e3663b5d56164bd87ac41f31ef26dcc54e0d  mechanical/tests/contracts.rs+3288406e035f0ed91016db235a782033c36e079d1333f9ffb24879c7c27a71da  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+251a4a8c26291cf67ac574616d451d5abe22a7e337f04e8c1f13746a2fce13ca  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+cafbef25b99b76fffa09d1afd632e8c4f87759fe3ee41ff68e2f9ddf0b0af16d  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+d22784eda01a2d5d2746d8b2fc5903d286f2fff2125fd79e87c9c7820546ecb7  native-addin/shim/sdk.cpp+4f95238519fff817e85cbc8e58df938b5c03a39e4bc3b2e15445f204b913370f  native-addin/shim/sdk.h+eddca52cd1f0a04c5ac36225af1f442da1e02d2f3480a097eb3dbdd096f027ba  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+0dd48b682ce46b77c7f74ee0a1a60389b690abfccdb44f6a38a1c42f2c1b6e08  native-addin/src/execution.rs+e58e6b0ddae8f3271233e5edae3be805d8f514a85798ebfc10e554770d2e9038  native-addin/src/execution_tests.rs+ae89e958a161e5aa4b4351e1f3f7766b6fd09dfdf22ee00e59748a6a05ebcf91  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+3a4494e8531449aa841c997c9d573089df8d53384c011f74f47fc02e7cb5522d  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+5ec60b1f3ef01d02cf5076a4bc12b55effbbf80dae2ff71c69f6c7f10ef72b53  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+e9a408d40226997f1ead047f12ab2f01b6676eeac492ef7f4226849097778405  native-addin/src/native/sketch_adapter.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+b345131e34f2b864940e659734e20e23d5f2dcd0f60cd19ebe157975c86c448e  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+36c449e494f13609763819e28794cfbd7a2817a2bb19ab6e055eed1e924b5fb4  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+3635d1d460cc6b57118e39ce849dfb767ff6e938a3c0e4d76ad0ecdd613e7e11  native-addin/src/service.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+3bad3d22f7fb66e93c194073c75e93780c72c67a0ae9fdc2ced96ac52f1d65e8  native-addin/src/sketches.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+aa17b9eafa03cccbdda880465d4c1e9fa79a2298add25fd43000ee23c50d3249  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+cfed80eb11dd387f770882a527832cb4edab6eb1ff7c32c636afe2993c6eae85  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+319bf166e19e0c961aed79a94a4299f2e53219e9982961548423bf9262b0c2b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+b6f4193ef4005899fbabb73c047d3acbc5ad64dd2cbf3d5ed49f0969d510a576  native-addin/src/sketches/line_state/tests.rs+129ca7aeffe9acda39fa9c21bfe9f48e405003e5de14c2b0385166c415f0d9ec  native-addin/src/sketches/relations.rs+3c296897c19c97fa4aa76346269ef7d92eb3bcae5f87f32c24a9bc34b24a67f4  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R19-FIX1-PRODUCT-FREEZE1.txtadded+168
@@ -0,0 +1,168 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+3ac27fee0e361fb408b38efad971ab1b7913428c5641f0fd471205e9c0be9d00  BASELINE-R18-FIX1-SOURCE-SHA256.txt+3ce574d2443c34f5feeb81dfd7298d2ed7f9e47129d739ec83507f98ac6ae12a  BASELINE-R18-FIX2-DELTA-SHA256.txt+85790b8e509392e71e663ff5fbb2db6d755cc77f9738ca9f53766dd18ee7d5bb  BASELINE-R18-PRODUCT-FREEZE2.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+7d9312b82e865350da795ec92712d2d8e78956d30ce145d4d1f302aa7c294b4e  FREEZE-1.md+89ea322a69dfd14abd051b5329120e813b02adeaa062382e328df278956b32b0  MIGRATION-PLAN.md+57c9bf000f3e74e3e8b07c11dc5aafe6730a19c7a9fc9c9ff08c1262e174f934  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+aeb714fb3cc50fa39d64e021dc2aa75c6607fda724f6b59eb0c0bc7e567e2c7b  docs/R18-LIVE-INCIDENCE-FIX.md+4bf8b8b77588455776465577d3b0716b81fe7ff7955d105a107537aa6ecf4f42  docs/R19-DRIVING-DIMENSION.md+583183e76a3ccb833bff6849db733e3f335457bc4db04c387a505d67686d8667  docs/R19-FREEZE1.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+96d5f015012d796592dbd3776440b860a759dc67848cdf1e20cdaf827e77d0fe  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+b3ee36e99b75fc879f6ea1c063a85cbcfd27c48d2d4a330140253b19f58f1cdb  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+ad2117118391eab80c90ef7432c9cd8f120d7b9c0da38ffb1969bd707bfc2592  mechanical/tests/contracts.rs+1aa9201d80e6ecafa3a58135077e3240e4430dad3bb0ce231706f0c345fa1d1c  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+afad8ed39b3af1901842652e1c9f5c764b808191108a4876af6041ff6c7ad4fb  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+600a30c338ffcf3be1dd4f59ac2c883d46ebc009853c1364675d1d5e0e8c97ff  native-addin/shim/dimensions.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+8fd6f37c4c13983caa7180c8326cb1e334746bcb8e2faef21b3eea2303f070b8  native-addin/shim/isolated_line_incidence.h+1027dec4c4121f294fe66b245350095e147b7b8b83edc53d7dcfb1658f517bd3  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+cd35642f361b4230d8408a68d9ab47716bf63e74fd2c27a8d8679e129858db72  native-addin/shim/reference_presence.h+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+a1cec9a38e9c3d01a32cb8bbbd96a251da2b27330739e234d26df77f0375b344  native-addin/shim/sdk.cpp+1829c001493ae341d43d083520bb3c921089cc004ae7436eed53889c4d3da3a6  native-addin/shim/sdk.h+2ae9b60e40f3263ba48490d21a3848ce745c32f1731293d6d433425f8eebdbc2  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+f0bfc487d731f0092fac187668bbe96a222575138da4bb4224620b3a502d6d8f  native-addin/shim/tests/isolated_line_incidence.cpp+3569f96c7ac208ab15d136a82e8b1b6a3934f3beaff30ce1f0e08b893ed48d5a  native-addin/shim/tests/reference_presence.cpp+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+96d7702aeb5bc019ac542a3220d2af6c6d1c49cbe7df60d03b505f38e2289923  native-addin/src/execution.rs+6471c1037767a20f777a0f54049e9b7d43e2e04d05e340124fac7a43211d8d1e  native-addin/src/execution_dimensions_tests.rs+d6b86aa4b392d3edfa9b025f9407d2a9ce2af98f64d71cb7a8c0823033d66996  native-addin/src/execution_tests.rs+68494ccc7c31a8e7c3efa67765e8ff4bb94a0b2bab749b457821e951c480d983  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+3a4494e8531449aa841c997c9d573089df8d53384c011f74f47fc02e7cb5522d  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+3527853cf804c8d80585c03d9dd090012c9f9ec66b32b35a23ab4cc59fdd686a  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+13f4257b1b83e3146b4f36ea8dbca2d4fb8b52c06aa205cc69abc41e25153c3f  native-addin/src/native/sketch_adapter.rs+8d7c4f07d4081bc12d024aaf4b4273a149ba52cf1a4e94ce2c594db912c3b8e3  native-addin/src/native/sketch_adapter/dimensions.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+ed9a7084c4b35e9310a2a79b043ad56777d4ac994c3f6771b703ad2befa6a1ee  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+075e97b4402cacafdf7a94a96840b7453e29399a0f489d91ffd506778f5345bb  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+76e2816c228f4c601cdda13271975d93cd2217e1691ed41b1a516fdeb77a014a  native-addin/src/service.rs+fff7e54efa9107fd9205d3e0ea1b68118710540b77f038a4e5641ecbdfb92a27  native-addin/src/service_dimensions_tests.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+ac7250ec9afbc587ab6a96c8f86891784e93dd8df4dacf93f6cd8d04cade3228  native-addin/src/sketches.rs+2ecd6d699d643e452b0da0d9b1dfe34b9a5ec0167e43bdf418ca329b09bb12db  native-addin/src/sketches/dimensions.rs+04e50b1cacd65d06fac4aec2d4d0761a79a89f86e20c742383d4e93ab505cd27  native-addin/src/sketches/dimensions/tests.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+532bd55971e6835b2b3ecdfd15285933e6f508d0e3d478a8788b2b37bb77a9aa  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+0f7d81df08e416304e1af2bc8ab9f02e5755925cc82ee81e4efcdc8a7a25ec5b  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+b8a5dea25d00cf24310d8ef51ad14e274fce73ffc92dd5933ab792c47cc850b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+429fb16fb879209d1540d3c4aa47833ee8daa94701d05af6a945e2776f0d815d  native-addin/src/sketches/line_state/tests.rs+0f9263c584617a6d0b35e73ae39b40b11295dd017d89db0de0dbeefafd0fbdfa  native-addin/src/sketches/relations.rs+d270b4ba5d82f6ffa174c63b9aeea1d7038a8ad8fbe126ba1c9d215f9d4697d9  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs+11549c7596c77c21a05b25dc98d2a8f57ff1b1cb9af41d02c58e3b0a0998607b  BASELINE-R19-PRODUCT-FREEZE1.txt+a568cc74e46f74b9f9c0b5df572d9ef80b03f5dc7972652609e62307d066adfa  docs/R19-LIVE-CREATOR-FIX.md+dd6e16ae408c74b4bc4324117cae3cefc1d5ae75d7d750b66d7d6be0d2cccb7f  native-addin/shim/dimension_creator.h+6abcfafa16671c22784aea14b2a6b65feed269c93e84f63f60d79a4d62ef6f43  native-addin/shim/tests/dimension_creator.cpp
native-rust/BASELINE-R19-PRODUCT-FREEZE1.txtadded+164
@@ -0,0 +1,164 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+3ac27fee0e361fb408b38efad971ab1b7913428c5641f0fd471205e9c0be9d00  BASELINE-R18-FIX1-SOURCE-SHA256.txt+3ce574d2443c34f5feeb81dfd7298d2ed7f9e47129d739ec83507f98ac6ae12a  BASELINE-R18-FIX2-DELTA-SHA256.txt+85790b8e509392e71e663ff5fbb2db6d755cc77f9738ca9f53766dd18ee7d5bb  BASELINE-R18-PRODUCT-FREEZE2.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+7d9312b82e865350da795ec92712d2d8e78956d30ce145d4d1f302aa7c294b4e  FREEZE-1.md+89ea322a69dfd14abd051b5329120e813b02adeaa062382e328df278956b32b0  MIGRATION-PLAN.md+076a89f844676ffdcb2c487f8464ad3f4cc6765f361f8fd07bf265c1763f791c  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+aeb714fb3cc50fa39d64e021dc2aa75c6607fda724f6b59eb0c0bc7e567e2c7b  docs/R18-LIVE-INCIDENCE-FIX.md+4bf8b8b77588455776465577d3b0716b81fe7ff7955d105a107537aa6ecf4f42  docs/R19-DRIVING-DIMENSION.md+583183e76a3ccb833bff6849db733e3f335457bc4db04c387a505d67686d8667  docs/R19-FREEZE1.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+96d5f015012d796592dbd3776440b860a759dc67848cdf1e20cdaf827e77d0fe  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+b3ee36e99b75fc879f6ea1c063a85cbcfd27c48d2d4a330140253b19f58f1cdb  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+ad2117118391eab80c90ef7432c9cd8f120d7b9c0da38ffb1969bd707bfc2592  mechanical/tests/contracts.rs+1aa9201d80e6ecafa3a58135077e3240e4430dad3bb0ce231706f0c345fa1d1c  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+2c6188dc3dd039abe1478774c9ceadfa0532e4554e9efe94dc793ded9db9cdf0  native-addin/build.rs+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+f1512087ea82e998f544c35e84d2e6b369b635966bf91458be627b44dd655fb7  native-addin/shim/dimensions.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+8fd6f37c4c13983caa7180c8326cb1e334746bcb8e2faef21b3eea2303f070b8  native-addin/shim/isolated_line_incidence.h+1027dec4c4121f294fe66b245350095e147b7b8b83edc53d7dcfb1658f517bd3  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+cd35642f361b4230d8408a68d9ab47716bf63e74fd2c27a8d8679e129858db72  native-addin/shim/reference_presence.h+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+a1cec9a38e9c3d01a32cb8bbbd96a251da2b27330739e234d26df77f0375b344  native-addin/shim/sdk.cpp+1829c001493ae341d43d083520bb3c921089cc004ae7436eed53889c4d3da3a6  native-addin/shim/sdk.h+2ae9b60e40f3263ba48490d21a3848ce745c32f1731293d6d433425f8eebdbc2  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+f0bfc487d731f0092fac187668bbe96a222575138da4bb4224620b3a502d6d8f  native-addin/shim/tests/isolated_line_incidence.cpp+3569f96c7ac208ab15d136a82e8b1b6a3934f3beaff30ce1f0e08b893ed48d5a  native-addin/shim/tests/reference_presence.cpp+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+96d7702aeb5bc019ac542a3220d2af6c6d1c49cbe7df60d03b505f38e2289923  native-addin/src/execution.rs+6471c1037767a20f777a0f54049e9b7d43e2e04d05e340124fac7a43211d8d1e  native-addin/src/execution_dimensions_tests.rs+d6b86aa4b392d3edfa9b025f9407d2a9ce2af98f64d71cb7a8c0823033d66996  native-addin/src/execution_tests.rs+68494ccc7c31a8e7c3efa67765e8ff4bb94a0b2bab749b457821e951c480d983  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+3a4494e8531449aa841c997c9d573089df8d53384c011f74f47fc02e7cb5522d  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+3527853cf804c8d80585c03d9dd090012c9f9ec66b32b35a23ab4cc59fdd686a  native-addin/src/native.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+13f4257b1b83e3146b4f36ea8dbca2d4fb8b52c06aa205cc69abc41e25153c3f  native-addin/src/native/sketch_adapter.rs+8d7c4f07d4081bc12d024aaf4b4273a149ba52cf1a4e94ce2c594db912c3b8e3  native-addin/src/native/sketch_adapter/dimensions.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+ed9a7084c4b35e9310a2a79b043ad56777d4ac994c3f6771b703ad2befa6a1ee  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+075e97b4402cacafdf7a94a96840b7453e29399a0f489d91ffd506778f5345bb  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+76e2816c228f4c601cdda13271975d93cd2217e1691ed41b1a516fdeb77a014a  native-addin/src/service.rs+fff7e54efa9107fd9205d3e0ea1b68118710540b77f038a4e5641ecbdfb92a27  native-addin/src/service_dimensions_tests.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+ac7250ec9afbc587ab6a96c8f86891784e93dd8df4dacf93f6cd8d04cade3228  native-addin/src/sketches.rs+2ecd6d699d643e452b0da0d9b1dfe34b9a5ec0167e43bdf418ca329b09bb12db  native-addin/src/sketches/dimensions.rs+04e50b1cacd65d06fac4aec2d4d0761a79a89f86e20c742383d4e93ab505cd27  native-addin/src/sketches/dimensions/tests.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+532bd55971e6835b2b3ecdfd15285933e6f508d0e3d478a8788b2b37bb77a9aa  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+0f7d81df08e416304e1af2bc8ab9f02e5755925cc82ee81e4efcdc8a7a25ec5b  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+b8a5dea25d00cf24310d8ef51ad14e274fce73ffc92dd5933ab792c47cc850b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+429fb16fb879209d1540d3c4aa47833ee8daa94701d05af6a945e2776f0d815d  native-addin/src/sketches/line_state/tests.rs+0f9263c584617a6d0b35e73ae39b40b11295dd017d89db0de0dbeefafd0fbdfa  native-addin/src/sketches/relations.rs+d270b4ba5d82f6ffa174c63b9aeea1d7038a8ad8fbe126ba1c9d215f9d4697d9  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R20-FIX1-PRODUCT-FREEZE1.txtadded+180
@@ -0,0 +1,180 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+3ac27fee0e361fb408b38efad971ab1b7913428c5641f0fd471205e9c0be9d00  BASELINE-R18-FIX1-SOURCE-SHA256.txt+3ce574d2443c34f5feeb81dfd7298d2ed7f9e47129d739ec83507f98ac6ae12a  BASELINE-R18-FIX2-DELTA-SHA256.txt+85790b8e509392e71e663ff5fbb2db6d755cc77f9738ca9f53766dd18ee7d5bb  BASELINE-R18-PRODUCT-FREEZE2.txt+3465c2fd655934c365ca5d4e3b5ee74300a0895abd9e898155aceeaac79b51d3  BASELINE-R19-FIX1-PRODUCT-FREEZE1.txt+11549c7596c77c21a05b25dc98d2a8f57ff1b1cb9af41d02c58e3b0a0998607b  BASELINE-R19-PRODUCT-FREEZE1.txt+bd1d41d25dc8984289f96d96aa9588208e7325784b1b7884b5064996381daff0  BASELINE-R20-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+040d8d69260181ce231d194d1b883f59262e57fd1b1177d26d0e2ff090331940  FREEZE-1.md+89ea322a69dfd14abd051b5329120e813b02adeaa062382e328df278956b32b0  MIGRATION-PLAN.md+913d0b1135f956a1aa885389302aada0981843206733cab8c12060d2c69e67f3  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+aeb714fb3cc50fa39d64e021dc2aa75c6607fda724f6b59eb0c0bc7e567e2c7b  docs/R18-LIVE-INCIDENCE-FIX.md+4bf8b8b77588455776465577d3b0716b81fe7ff7955d105a107537aa6ecf4f42  docs/R19-DRIVING-DIMENSION.md+583183e76a3ccb833bff6849db733e3f335457bc4db04c387a505d67686d8667  docs/R19-FREEZE1.md+a568cc74e46f74b9f9c0b5df572d9ef80b03f5dc7972652609e62307d066adfa  docs/R19-LIVE-CREATOR-FIX.md+42c4625a474511ac46fae723e71304961f477025007bf93b830fb597a68eb1a3  docs/R20-ASSEMBLY-CONTRACT.md+6452903f5af8163ac0382dd155ff836cfe710afb0ce08ddef22a32ad4b05d046  docs/R20-ASSEMBLY-PLAN.md+add06ac9a9b9939ef7fea0745a0f0b5f29cbe541899a329854defba460286dcc  docs/R20-INSTRUMENT-ONLY-FIX1.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+04381f0b98143bff0ae5dabc3793dcb873dbb08b7269f7fdc885ed87afdd30b5  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5fb5e46ef72dabc2455178b6eaf6f4dece66e1f01d702474050e5f95ca11e9fd  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+c90013975ccee20dc087cdd5bde037b39aab31fb4f6ee22398862117bf3038f3  mechanical/tests/contracts.rs+3fe05e8f2dcac0943203f8fead842bb8ad57a76a43e6a0d3c2896347d7fd5fe9  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+50b899dcdb6d9f8e96d9036ca252ff786739cf20bfece30355b6b7c008cd6d17  native-addin/build.rs+9bbab3a9d50fc7af93fdda173bdfe95137889b6e222e393895fb4bc5cbfadacd  native-addin/shim/assembly.inc+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+dd6e16ae408c74b4bc4324117cae3cefc1d5ae75d7d750b66d7d6be0d2cccb7f  native-addin/shim/dimension_creator.h+600a30c338ffcf3be1dd4f59ac2c883d46ebc009853c1364675d1d5e0e8c97ff  native-addin/shim/dimensions.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+8fd6f37c4c13983caa7180c8326cb1e334746bcb8e2faef21b3eea2303f070b8  native-addin/shim/isolated_line_incidence.h+1027dec4c4121f294fe66b245350095e147b7b8b83edc53d7dcfb1658f517bd3  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+cd35642f361b4230d8408a68d9ab47716bf63e74fd2c27a8d8679e129858db72  native-addin/shim/reference_presence.h+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+3125fc9d024807998fdd7f674542e0412538b60c61e72ca0947842d11d27faab  native-addin/shim/sdk.cpp+e57fb4b660105fc7d120aa40106645204f1c8b7e6e42c45dad92db3a767db799  native-addin/shim/sdk.h+2ae9b60e40f3263ba48490d21a3848ce745c32f1731293d6d433425f8eebdbc2  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+6abcfafa16671c22784aea14b2a6b65feed269c93e84f63f60d79a4d62ef6f43  native-addin/shim/tests/dimension_creator.cpp+f0bfc487d731f0092fac187668bbe96a222575138da4bb4224620b3a502d6d8f  native-addin/shim/tests/isolated_line_incidence.cpp+3569f96c7ac208ab15d136a82e8b1b6a3934f3beaff30ce1f0e08b893ed48d5a  native-addin/shim/tests/reference_presence.cpp+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+033d006595501f7801182d27c1ca0b33e074aa46a40f26ba4c1109ec2b744238  native-addin/src/assembly/arguments.rs+1b5c283cc890ddc1f421acf3e4eb2ed91153a48e475116b9e88138e1e273aad9  native-addin/src/assembly/mod.rs+ec0daf777e63ac12e4d80351325228e3b06a414b0ef3d2a1ba23f2abd85b72f8  native-addin/src/assembly/tests.rs+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+ffb0ad0cb074261a1a2601012e9a05fd081f54f98ce01f952df205fac9825a36  native-addin/src/execution.rs+bd9a6112b9bc9da993f29e273b98cbba9cce4b146558ae223eb985c48cef2910  native-addin/src/execution_assembly_tests.rs+6471c1037767a20f777a0f54049e9b7d43e2e04d05e340124fac7a43211d8d1e  native-addin/src/execution_dimensions_tests.rs+786583fdfaa50788b981418ae22a59387d800a69b09dad0a54b15a54eff881fd  native-addin/src/execution_tests.rs+3ff8f5d923f63d2d3db982a3f64cefd488c4ec613763166b2cff99160eb0a129  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+2bcd50f5aac0097fbaab1f33511ca689ac32c4650e91cba3ed4307e0d1ead433  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+9c36cd44fc3d328914a01fcb41b8e04bacc5e29110c05cfbabd4d6bcd57f0aa1  native-addin/src/native.rs+887649effab2cfe98654f1cf6f7ce65caa1765ef11321de424560198e76c905c  native-addin/src/native/assembly_adapter.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+13f4257b1b83e3146b4f36ea8dbca2d4fb8b52c06aa205cc69abc41e25153c3f  native-addin/src/native/sketch_adapter.rs+8d7c4f07d4081bc12d024aaf4b4273a149ba52cf1a4e94ce2c594db912c3b8e3  native-addin/src/native/sketch_adapter/dimensions.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+ed9a7084c4b35e9310a2a79b043ad56777d4ac994c3f6771b703ad2befa6a1ee  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+10033ff4504497e5fa43b82aeda383aa50b40147a5fd53c3501fcc901e57130d  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+d131718590950fefbce202286c364d54dd7ab9d33bd228f3bc3a8b1cb6501a02  native-addin/src/service.rs+d7dbd4fc7429a22aae40689652e233ec0f93268959069e4d030972f76eaa8047  native-addin/src/service_assembly_tests.rs+fff7e54efa9107fd9205d3e0ea1b68118710540b77f038a4e5641ecbdfb92a27  native-addin/src/service_dimensions_tests.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+ac7250ec9afbc587ab6a96c8f86891784e93dd8df4dacf93f6cd8d04cade3228  native-addin/src/sketches.rs+2ecd6d699d643e452b0da0d9b1dfe34b9a5ec0167e43bdf418ca329b09bb12db  native-addin/src/sketches/dimensions.rs+78803762d523e41ac7f5f829269eee76f14c186f2509ebfa8d701c1ce2bfae09  native-addin/src/sketches/dimensions/tests.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+89dd6f4b55b916e4df139f2e1b50b42422e3d198ac84e0cd32c9c36f3df3fe74  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+0f7d81df08e416304e1af2bc8ab9f02e5755925cc82ee81e4efcdc8a7a25ec5b  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+b8a5dea25d00cf24310d8ef51ad14e274fce73ffc92dd5933ab792c47cc850b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+429fb16fb879209d1540d3c4aa47833ee8daa94701d05af6a945e2776f0d815d  native-addin/src/sketches/line_state/tests.rs+0f9263c584617a6d0b35e73ae39b40b11295dd017d89db0de0dbeefafd0fbdfa  native-addin/src/sketches/relations.rs+b8a538bc79cd368e70a847279b4ff9f80c93a7cfe1c040b1bcac28122f7b7034  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R20-FIX2-PRODUCT-FREEZE1.txtadded+184
@@ -0,0 +1,184 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+3ac27fee0e361fb408b38efad971ab1b7913428c5641f0fd471205e9c0be9d00  BASELINE-R18-FIX1-SOURCE-SHA256.txt+3ce574d2443c34f5feeb81dfd7298d2ed7f9e47129d739ec83507f98ac6ae12a  BASELINE-R18-FIX2-DELTA-SHA256.txt+85790b8e509392e71e663ff5fbb2db6d755cc77f9738ca9f53766dd18ee7d5bb  BASELINE-R18-PRODUCT-FREEZE2.txt+3465c2fd655934c365ca5d4e3b5ee74300a0895abd9e898155aceeaac79b51d3  BASELINE-R19-FIX1-PRODUCT-FREEZE1.txt+11549c7596c77c21a05b25dc98d2a8f57ff1b1cb9af41d02c58e3b0a0998607b  BASELINE-R19-PRODUCT-FREEZE1.txt+6f67e82c988e97bf7a731c9894822196e7797d6196c8024f44c60f4f9ac945a3  BASELINE-R20-FIX1-PRODUCT-FREEZE1.txt+bd1d41d25dc8984289f96d96aa9588208e7325784b1b7884b5064996381daff0  BASELINE-R20-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+8a78e2f163fc0c2aea6d9575953e8d1f5608ebb34652aec13903a433d2496468  FREEZE-1.md+89ea322a69dfd14abd051b5329120e813b02adeaa062382e328df278956b32b0  MIGRATION-PLAN.md+c464af8102b428969de01cf69a8d3bce42c18d17c5c402bde395ed4d4e3bde20  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+aeb714fb3cc50fa39d64e021dc2aa75c6607fda724f6b59eb0c0bc7e567e2c7b  docs/R18-LIVE-INCIDENCE-FIX.md+4bf8b8b77588455776465577d3b0716b81fe7ff7955d105a107537aa6ecf4f42  docs/R19-DRIVING-DIMENSION.md+583183e76a3ccb833bff6849db733e3f335457bc4db04c387a505d67686d8667  docs/R19-FREEZE1.md+a568cc74e46f74b9f9c0b5df572d9ef80b03f5dc7972652609e62307d066adfa  docs/R19-LIVE-CREATOR-FIX.md+946158a9267e7bf918af1bfab83337bc680b07a50a405ac35df057045b0d3fb6  docs/R20-ASSEMBLY-CONTRACT.md+6452903f5af8163ac0382dd155ff836cfe710afb0ce08ddef22a32ad4b05d046  docs/R20-ASSEMBLY-PLAN.md+add06ac9a9b9939ef7fea0745a0f0b5f29cbe541899a329854defba460286dcc  docs/R20-INSTRUMENT-ONLY-FIX1.md+a49950322471cd1304488896306e1d5e5c79fc5d880022d57e8eeda0b15d83d5  docs/R20-POST-EFFECT-READ-SETTLING-FIX2.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+04381f0b98143bff0ae5dabc3793dcb873dbb08b7269f7fdc885ed87afdd30b5  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5fb5e46ef72dabc2455178b6eaf6f4dece66e1f01d702474050e5f95ca11e9fd  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+c90013975ccee20dc087cdd5bde037b39aab31fb4f6ee22398862117bf3038f3  mechanical/tests/contracts.rs+3fe05e8f2dcac0943203f8fead842bb8ad57a76a43e6a0d3c2896347d7fd5fe9  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+50b899dcdb6d9f8e96d9036ca252ff786739cf20bfece30355b6b7c008cd6d17  native-addin/build.rs+9bbab3a9d50fc7af93fdda173bdfe95137889b6e222e393895fb4bc5cbfadacd  native-addin/shim/assembly.inc+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+dd6e16ae408c74b4bc4324117cae3cefc1d5ae75d7d750b66d7d6be0d2cccb7f  native-addin/shim/dimension_creator.h+600a30c338ffcf3be1dd4f59ac2c883d46ebc009853c1364675d1d5e0e8c97ff  native-addin/shim/dimensions.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+8fd6f37c4c13983caa7180c8326cb1e334746bcb8e2faef21b3eea2303f070b8  native-addin/shim/isolated_line_incidence.h+1027dec4c4121f294fe66b245350095e147b7b8b83edc53d7dcfb1658f517bd3  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+cd35642f361b4230d8408a68d9ab47716bf63e74fd2c27a8d8679e129858db72  native-addin/shim/reference_presence.h+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+3125fc9d024807998fdd7f674542e0412538b60c61e72ca0947842d11d27faab  native-addin/shim/sdk.cpp+e57fb4b660105fc7d120aa40106645204f1c8b7e6e42c45dad92db3a767db799  native-addin/shim/sdk.h+2ae9b60e40f3263ba48490d21a3848ce745c32f1731293d6d433425f8eebdbc2  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+6abcfafa16671c22784aea14b2a6b65feed269c93e84f63f60d79a4d62ef6f43  native-addin/shim/tests/dimension_creator.cpp+f0bfc487d731f0092fac187668bbe96a222575138da4bb4224620b3a502d6d8f  native-addin/shim/tests/isolated_line_incidence.cpp+3569f96c7ac208ab15d136a82e8b1b6a3934f3beaff30ce1f0e08b893ed48d5a  native-addin/shim/tests/reference_presence.cpp+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+033d006595501f7801182d27c1ca0b33e074aa46a40f26ba4c1109ec2b744238  native-addin/src/assembly/arguments.rs+4c39f02f73bfc214e54885047cb7112f09c5a54bcaffe59b7cf3a78d53aa0f63  native-addin/src/assembly/mod.rs+4fa07c31202197ac756baa0d97528dcbdada376f8597264c56932840f9c05773  native-addin/src/assembly/readback.rs+6e8ecbdc652813cdb08889e7d3e5cd9e818e232de5b591c7465aef62860bd624  native-addin/src/assembly/readback_tests.rs+3ac208bf783ecc0d46d23a176b9eac83dea9c939cc89598352fb2f59fa462d17  native-addin/src/assembly/tests.rs+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+ffb0ad0cb074261a1a2601012e9a05fd081f54f98ce01f952df205fac9825a36  native-addin/src/execution.rs+bd9a6112b9bc9da993f29e273b98cbba9cce4b146558ae223eb985c48cef2910  native-addin/src/execution_assembly_tests.rs+6471c1037767a20f777a0f54049e9b7d43e2e04d05e340124fac7a43211d8d1e  native-addin/src/execution_dimensions_tests.rs+786583fdfaa50788b981418ae22a59387d800a69b09dad0a54b15a54eff881fd  native-addin/src/execution_tests.rs+3ff8f5d923f63d2d3db982a3f64cefd488c4ec613763166b2cff99160eb0a129  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+2bcd50f5aac0097fbaab1f33511ca689ac32c4650e91cba3ed4307e0d1ead433  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+9c36cd44fc3d328914a01fcb41b8e04bacc5e29110c05cfbabd4d6bcd57f0aa1  native-addin/src/native.rs+eab151c295d1ad91b2253b5412627a6dd1c5bdc7df4fac3670e05c99daf140cb  native-addin/src/native/assembly_adapter.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+13f4257b1b83e3146b4f36ea8dbca2d4fb8b52c06aa205cc69abc41e25153c3f  native-addin/src/native/sketch_adapter.rs+8d7c4f07d4081bc12d024aaf4b4273a149ba52cf1a4e94ce2c594db912c3b8e3  native-addin/src/native/sketch_adapter/dimensions.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+ed9a7084c4b35e9310a2a79b043ad56777d4ac994c3f6771b703ad2befa6a1ee  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+10033ff4504497e5fa43b82aeda383aa50b40147a5fd53c3501fcc901e57130d  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+d131718590950fefbce202286c364d54dd7ab9d33bd228f3bc3a8b1cb6501a02  native-addin/src/service.rs+d7dbd4fc7429a22aae40689652e233ec0f93268959069e4d030972f76eaa8047  native-addin/src/service_assembly_tests.rs+fff7e54efa9107fd9205d3e0ea1b68118710540b77f038a4e5641ecbdfb92a27  native-addin/src/service_dimensions_tests.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+ac7250ec9afbc587ab6a96c8f86891784e93dd8df4dacf93f6cd8d04cade3228  native-addin/src/sketches.rs+2ecd6d699d643e452b0da0d9b1dfe34b9a5ec0167e43bdf418ca329b09bb12db  native-addin/src/sketches/dimensions.rs+78803762d523e41ac7f5f829269eee76f14c186f2509ebfa8d701c1ce2bfae09  native-addin/src/sketches/dimensions/tests.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+89dd6f4b55b916e4df139f2e1b50b42422e3d198ac84e0cd32c9c36f3df3fe74  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+0f7d81df08e416304e1af2bc8ab9f02e5755925cc82ee81e4efcdc8a7a25ec5b  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+b8a5dea25d00cf24310d8ef51ad14e274fce73ffc92dd5933ab792c47cc850b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+429fb16fb879209d1540d3c4aa47833ee8daa94701d05af6a945e2776f0d815d  native-addin/src/sketches/line_state/tests.rs+0f9263c584617a6d0b35e73ae39b40b11295dd017d89db0de0dbeefafd0fbdfa  native-addin/src/sketches/relations.rs+b8a538bc79cd368e70a847279b4ff9f80c93a7cfe1c040b1bcac28122f7b7034  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R20-FIX3-PRODUCT-FREEZE1.txtadded+186
@@ -0,0 +1,186 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+3ac27fee0e361fb408b38efad971ab1b7913428c5641f0fd471205e9c0be9d00  BASELINE-R18-FIX1-SOURCE-SHA256.txt+3ce574d2443c34f5feeb81dfd7298d2ed7f9e47129d739ec83507f98ac6ae12a  BASELINE-R18-FIX2-DELTA-SHA256.txt+85790b8e509392e71e663ff5fbb2db6d755cc77f9738ca9f53766dd18ee7d5bb  BASELINE-R18-PRODUCT-FREEZE2.txt+3465c2fd655934c365ca5d4e3b5ee74300a0895abd9e898155aceeaac79b51d3  BASELINE-R19-FIX1-PRODUCT-FREEZE1.txt+11549c7596c77c21a05b25dc98d2a8f57ff1b1cb9af41d02c58e3b0a0998607b  BASELINE-R19-PRODUCT-FREEZE1.txt+6f67e82c988e97bf7a731c9894822196e7797d6196c8024f44c60f4f9ac945a3  BASELINE-R20-FIX1-PRODUCT-FREEZE1.txt+63ae9355a32fc07ad77c5ff970a658c43043d4be113c9e68d8a152de9cdaf7d4  BASELINE-R20-FIX2-PRODUCT-FREEZE1.txt+bd1d41d25dc8984289f96d96aa9588208e7325784b1b7884b5064996381daff0  BASELINE-R20-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+ff8848812031fff59be39bfe0b3d24c4cf2a2625a0f6124d41a1ec0ab5a9d812  FREEZE-1.md+89ea322a69dfd14abd051b5329120e813b02adeaa062382e328df278956b32b0  MIGRATION-PLAN.md+7c22348acf34c50006732a36c4dda4d3818aec0c2403512049222742776d5b72  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+aeb714fb3cc50fa39d64e021dc2aa75c6607fda724f6b59eb0c0bc7e567e2c7b  docs/R18-LIVE-INCIDENCE-FIX.md+4bf8b8b77588455776465577d3b0716b81fe7ff7955d105a107537aa6ecf4f42  docs/R19-DRIVING-DIMENSION.md+583183e76a3ccb833bff6849db733e3f335457bc4db04c387a505d67686d8667  docs/R19-FREEZE1.md+a568cc74e46f74b9f9c0b5df572d9ef80b03f5dc7972652609e62307d066adfa  docs/R19-LIVE-CREATOR-FIX.md+ad5ca0ef4740b53938264e49d067f5343019befd751d900e1b5e3edf6749dbeb  docs/R20-ASSEMBLY-CONTRACT.md+6452903f5af8163ac0382dd155ff836cfe710afb0ce08ddef22a32ad4b05d046  docs/R20-ASSEMBLY-PLAN.md+028c253c63968a592e42ee95060240a4ce47f0f0c0fdea91c1babf4f749f53bc  docs/R20-INITIAL-COMPONENT-REVISION-FIX3.md+add06ac9a9b9939ef7fea0745a0f0b5f29cbe541899a329854defba460286dcc  docs/R20-INSTRUMENT-ONLY-FIX1.md+a49950322471cd1304488896306e1d5e5c79fc5d880022d57e8eeda0b15d83d5  docs/R20-POST-EFFECT-READ-SETTLING-FIX2.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+04381f0b98143bff0ae5dabc3793dcb873dbb08b7269f7fdc885ed87afdd30b5  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5fb5e46ef72dabc2455178b6eaf6f4dece66e1f01d702474050e5f95ca11e9fd  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+c90013975ccee20dc087cdd5bde037b39aab31fb4f6ee22398862117bf3038f3  mechanical/tests/contracts.rs+3fe05e8f2dcac0943203f8fead842bb8ad57a76a43e6a0d3c2896347d7fd5fe9  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+50b899dcdb6d9f8e96d9036ca252ff786739cf20bfece30355b6b7c008cd6d17  native-addin/build.rs+9bbab3a9d50fc7af93fdda173bdfe95137889b6e222e393895fb4bc5cbfadacd  native-addin/shim/assembly.inc+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+dd6e16ae408c74b4bc4324117cae3cefc1d5ae75d7d750b66d7d6be0d2cccb7f  native-addin/shim/dimension_creator.h+600a30c338ffcf3be1dd4f59ac2c883d46ebc009853c1364675d1d5e0e8c97ff  native-addin/shim/dimensions.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+8fd6f37c4c13983caa7180c8326cb1e334746bcb8e2faef21b3eea2303f070b8  native-addin/shim/isolated_line_incidence.h+1027dec4c4121f294fe66b245350095e147b7b8b83edc53d7dcfb1658f517bd3  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+cd35642f361b4230d8408a68d9ab47716bf63e74fd2c27a8d8679e129858db72  native-addin/shim/reference_presence.h+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+3125fc9d024807998fdd7f674542e0412538b60c61e72ca0947842d11d27faab  native-addin/shim/sdk.cpp+e57fb4b660105fc7d120aa40106645204f1c8b7e6e42c45dad92db3a767db799  native-addin/shim/sdk.h+2ae9b60e40f3263ba48490d21a3848ce745c32f1731293d6d433425f8eebdbc2  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+6abcfafa16671c22784aea14b2a6b65feed269c93e84f63f60d79a4d62ef6f43  native-addin/shim/tests/dimension_creator.cpp+f0bfc487d731f0092fac187668bbe96a222575138da4bb4224620b3a502d6d8f  native-addin/shim/tests/isolated_line_incidence.cpp+3569f96c7ac208ab15d136a82e8b1b6a3934f3beaff30ce1f0e08b893ed48d5a  native-addin/shim/tests/reference_presence.cpp+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+033d006595501f7801182d27c1ca0b33e074aa46a40f26ba4c1109ec2b744238  native-addin/src/assembly/arguments.rs+4c39f02f73bfc214e54885047cb7112f09c5a54bcaffe59b7cf3a78d53aa0f63  native-addin/src/assembly/mod.rs+65358708f94150efb60b50324a34c313a014fb2fdcd787d502e77fff9300e827  native-addin/src/assembly/readback.rs+ec38e472032bfd55bbd8073e2f17d397cd0f7f97975dc4478aac616a9f495760  native-addin/src/assembly/readback_tests.rs+ba74bf5de81cd636cd58e4b73d38b981d4581894076e401d795127411bf73d98  native-addin/src/assembly/tests.rs+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+ffb0ad0cb074261a1a2601012e9a05fd081f54f98ce01f952df205fac9825a36  native-addin/src/execution.rs+bd9a6112b9bc9da993f29e273b98cbba9cce4b146558ae223eb985c48cef2910  native-addin/src/execution_assembly_tests.rs+6471c1037767a20f777a0f54049e9b7d43e2e04d05e340124fac7a43211d8d1e  native-addin/src/execution_dimensions_tests.rs+786583fdfaa50788b981418ae22a59387d800a69b09dad0a54b15a54eff881fd  native-addin/src/execution_tests.rs+3ff8f5d923f63d2d3db982a3f64cefd488c4ec613763166b2cff99160eb0a129  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+2bcd50f5aac0097fbaab1f33511ca689ac32c4650e91cba3ed4307e0d1ead433  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+9c36cd44fc3d328914a01fcb41b8e04bacc5e29110c05cfbabd4d6bcd57f0aa1  native-addin/src/native.rs+eab151c295d1ad91b2253b5412627a6dd1c5bdc7df4fac3670e05c99daf140cb  native-addin/src/native/assembly_adapter.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+13f4257b1b83e3146b4f36ea8dbca2d4fb8b52c06aa205cc69abc41e25153c3f  native-addin/src/native/sketch_adapter.rs+8d7c4f07d4081bc12d024aaf4b4273a149ba52cf1a4e94ce2c594db912c3b8e3  native-addin/src/native/sketch_adapter/dimensions.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+ed9a7084c4b35e9310a2a79b043ad56777d4ac994c3f6771b703ad2befa6a1ee  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+10033ff4504497e5fa43b82aeda383aa50b40147a5fd53c3501fcc901e57130d  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+d131718590950fefbce202286c364d54dd7ab9d33bd228f3bc3a8b1cb6501a02  native-addin/src/service.rs+d7dbd4fc7429a22aae40689652e233ec0f93268959069e4d030972f76eaa8047  native-addin/src/service_assembly_tests.rs+fff7e54efa9107fd9205d3e0ea1b68118710540b77f038a4e5641ecbdfb92a27  native-addin/src/service_dimensions_tests.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+ac7250ec9afbc587ab6a96c8f86891784e93dd8df4dacf93f6cd8d04cade3228  native-addin/src/sketches.rs+2ecd6d699d643e452b0da0d9b1dfe34b9a5ec0167e43bdf418ca329b09bb12db  native-addin/src/sketches/dimensions.rs+78803762d523e41ac7f5f829269eee76f14c186f2509ebfa8d701c1ce2bfae09  native-addin/src/sketches/dimensions/tests.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+89dd6f4b55b916e4df139f2e1b50b42422e3d198ac84e0cd32c9c36f3df3fe74  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+0f7d81df08e416304e1af2bc8ab9f02e5755925cc82ee81e4efcdc8a7a25ec5b  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+b8a5dea25d00cf24310d8ef51ad14e274fce73ffc92dd5933ab792c47cc850b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+429fb16fb879209d1540d3c4aa47833ee8daa94701d05af6a945e2776f0d815d  native-addin/src/sketches/line_state/tests.rs+0f9263c584617a6d0b35e73ae39b40b11295dd017d89db0de0dbeefafd0fbdfa  native-addin/src/sketches/relations.rs+b8a538bc79cd368e70a847279b4ff9f80c93a7cfe1c040b1bcac28122f7b7034  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R20-PRODUCT-FREEZE1.txtadded+178
@@ -0,0 +1,178 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+3ac27fee0e361fb408b38efad971ab1b7913428c5641f0fd471205e9c0be9d00  BASELINE-R18-FIX1-SOURCE-SHA256.txt+3ce574d2443c34f5feeb81dfd7298d2ed7f9e47129d739ec83507f98ac6ae12a  BASELINE-R18-FIX2-DELTA-SHA256.txt+85790b8e509392e71e663ff5fbb2db6d755cc77f9738ca9f53766dd18ee7d5bb  BASELINE-R18-PRODUCT-FREEZE2.txt+3465c2fd655934c365ca5d4e3b5ee74300a0895abd9e898155aceeaac79b51d3  BASELINE-R19-FIX1-PRODUCT-FREEZE1.txt+11549c7596c77c21a05b25dc98d2a8f57ff1b1cb9af41d02c58e3b0a0998607b  BASELINE-R19-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+e7cac7a88d18d300cf61df75c6c334ef16dab388c8d53b63b0bce52a18347ac1  FREEZE-1.md+89ea322a69dfd14abd051b5329120e813b02adeaa062382e328df278956b32b0  MIGRATION-PLAN.md+913d0b1135f956a1aa885389302aada0981843206733cab8c12060d2c69e67f3  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+aeb714fb3cc50fa39d64e021dc2aa75c6607fda724f6b59eb0c0bc7e567e2c7b  docs/R18-LIVE-INCIDENCE-FIX.md+4bf8b8b77588455776465577d3b0716b81fe7ff7955d105a107537aa6ecf4f42  docs/R19-DRIVING-DIMENSION.md+583183e76a3ccb833bff6849db733e3f335457bc4db04c387a505d67686d8667  docs/R19-FREEZE1.md+a568cc74e46f74b9f9c0b5df572d9ef80b03f5dc7972652609e62307d066adfa  docs/R19-LIVE-CREATOR-FIX.md+42c4625a474511ac46fae723e71304961f477025007bf93b830fb597a68eb1a3  docs/R20-ASSEMBLY-CONTRACT.md+6452903f5af8163ac0382dd155ff836cfe710afb0ce08ddef22a32ad4b05d046  docs/R20-ASSEMBLY-PLAN.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+04381f0b98143bff0ae5dabc3793dcb873dbb08b7269f7fdc885ed87afdd30b5  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5fb5e46ef72dabc2455178b6eaf6f4dece66e1f01d702474050e5f95ca11e9fd  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+c90013975ccee20dc087cdd5bde037b39aab31fb4f6ee22398862117bf3038f3  mechanical/tests/contracts.rs+3fe05e8f2dcac0943203f8fead842bb8ad57a76a43e6a0d3c2896347d7fd5fe9  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+50b899dcdb6d9f8e96d9036ca252ff786739cf20bfece30355b6b7c008cd6d17  native-addin/build.rs+9bbab3a9d50fc7af93fdda173bdfe95137889b6e222e393895fb4bc5cbfadacd  native-addin/shim/assembly.inc+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+dd6e16ae408c74b4bc4324117cae3cefc1d5ae75d7d750b66d7d6be0d2cccb7f  native-addin/shim/dimension_creator.h+600a30c338ffcf3be1dd4f59ac2c883d46ebc009853c1364675d1d5e0e8c97ff  native-addin/shim/dimensions.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+8fd6f37c4c13983caa7180c8326cb1e334746bcb8e2faef21b3eea2303f070b8  native-addin/shim/isolated_line_incidence.h+1027dec4c4121f294fe66b245350095e147b7b8b83edc53d7dcfb1658f517bd3  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+cd35642f361b4230d8408a68d9ab47716bf63e74fd2c27a8d8679e129858db72  native-addin/shim/reference_presence.h+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+3125fc9d024807998fdd7f674542e0412538b60c61e72ca0947842d11d27faab  native-addin/shim/sdk.cpp+e57fb4b660105fc7d120aa40106645204f1c8b7e6e42c45dad92db3a767db799  native-addin/shim/sdk.h+2ae9b60e40f3263ba48490d21a3848ce745c32f1731293d6d433425f8eebdbc2  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+6abcfafa16671c22784aea14b2a6b65feed269c93e84f63f60d79a4d62ef6f43  native-addin/shim/tests/dimension_creator.cpp+f0bfc487d731f0092fac187668bbe96a222575138da4bb4224620b3a502d6d8f  native-addin/shim/tests/isolated_line_incidence.cpp+3569f96c7ac208ab15d136a82e8b1b6a3934f3beaff30ce1f0e08b893ed48d5a  native-addin/shim/tests/reference_presence.cpp+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+033d006595501f7801182d27c1ca0b33e074aa46a40f26ba4c1109ec2b744238  native-addin/src/assembly/arguments.rs+e02b1dff3873ba09b51cebf851718a338b781a1a5d8f204b1f836997b392a506  native-addin/src/assembly/mod.rs+f66ed00cc113191a6297bebf500e7175279594c44448216ea69506b9a92fbbb3  native-addin/src/assembly/tests.rs+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+ffb0ad0cb074261a1a2601012e9a05fd081f54f98ce01f952df205fac9825a36  native-addin/src/execution.rs+bd9a6112b9bc9da993f29e273b98cbba9cce4b146558ae223eb985c48cef2910  native-addin/src/execution_assembly_tests.rs+6471c1037767a20f777a0f54049e9b7d43e2e04d05e340124fac7a43211d8d1e  native-addin/src/execution_dimensions_tests.rs+786583fdfaa50788b981418ae22a59387d800a69b09dad0a54b15a54eff881fd  native-addin/src/execution_tests.rs+3ff8f5d923f63d2d3db982a3f64cefd488c4ec613763166b2cff99160eb0a129  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+2bcd50f5aac0097fbaab1f33511ca689ac32c4650e91cba3ed4307e0d1ead433  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+9c36cd44fc3d328914a01fcb41b8e04bacc5e29110c05cfbabd4d6bcd57f0aa1  native-addin/src/native.rs+4f7b5d9663cbf7a60726fde8c8e55bd38a49dfc35d1b72f47a4392214f67b360  native-addin/src/native/assembly_adapter.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+13f4257b1b83e3146b4f36ea8dbca2d4fb8b52c06aa205cc69abc41e25153c3f  native-addin/src/native/sketch_adapter.rs+8d7c4f07d4081bc12d024aaf4b4273a149ba52cf1a4e94ce2c594db912c3b8e3  native-addin/src/native/sketch_adapter/dimensions.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+ed9a7084c4b35e9310a2a79b043ad56777d4ac994c3f6771b703ad2befa6a1ee  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+10033ff4504497e5fa43b82aeda383aa50b40147a5fd53c3501fcc901e57130d  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+d131718590950fefbce202286c364d54dd7ab9d33bd228f3bc3a8b1cb6501a02  native-addin/src/service.rs+d7dbd4fc7429a22aae40689652e233ec0f93268959069e4d030972f76eaa8047  native-addin/src/service_assembly_tests.rs+fff7e54efa9107fd9205d3e0ea1b68118710540b77f038a4e5641ecbdfb92a27  native-addin/src/service_dimensions_tests.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+ac7250ec9afbc587ab6a96c8f86891784e93dd8df4dacf93f6cd8d04cade3228  native-addin/src/sketches.rs+2ecd6d699d643e452b0da0d9b1dfe34b9a5ec0167e43bdf418ca329b09bb12db  native-addin/src/sketches/dimensions.rs+78803762d523e41ac7f5f829269eee76f14c186f2509ebfa8d701c1ce2bfae09  native-addin/src/sketches/dimensions/tests.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+89dd6f4b55b916e4df139f2e1b50b42422e3d198ac84e0cd32c9c36f3df3fe74  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+0f7d81df08e416304e1af2bc8ab9f02e5755925cc82ee81e4efcdc8a7a25ec5b  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+b8a5dea25d00cf24310d8ef51ad14e274fce73ffc92dd5933ab792c47cc850b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+429fb16fb879209d1540d3c4aa47833ee8daa94701d05af6a945e2776f0d815d  native-addin/src/sketches/line_state/tests.rs+0f9263c584617a6d0b35e73ae39b40b11295dd017d89db0de0dbeefafd0fbdfa  native-addin/src/sketches/relations.rs+b8a538bc79cd368e70a847279b4ff9f80c93a7cfe1c040b1bcac28122f7b7034  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/BASELINE-R9-PRODUCT-FREEZE1.txtadded+79
@@ -0,0 +1,79 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+b3b8cc8d88996c76bec2282d9ca2f732e0542be58846e61e318820ccd09ed085  BASELINE-PORTS-SHA256.txt+d90a8e72f95cf6cdbcdc1e55783c47fc5621ab0082275f3e5479c35205aaa3c7  BASELINE-R8-SHA256.txt+ac8a52006c053daac4ce92f07e13d0c2d0b5f95dcfe3c19969fe61761bb99afa  Cargo.lock+7133328a40a393e308d8bc7c2867b10e376d265be2d23bc958cc3d81b47113a5  Cargo.toml+69b40bff8adf4eafe6fe54ad04065f640c6b47bd5e52c7a6b8fe7f6a59080825  MIGRATION-PLAN.md+2691b8b81701e9d41af21fba3735c267bbf8766aa0d2aa2768309c0907d944ba  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+a20240d19a1f271e84fefe5f1010647aff671ef2fb6bc528e4b2b9cd912db544  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+c47a416d668814d403d157e6e2a9dd527c654895e8f2383c136aba8b537261b2  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+61e8b63aea25ff559057232a95951811d37eff437992bc11c6d33e0acabc776b  mechanical/tests/contracts.rs+1e995c0eb819d85fc4db509b479ce9b6b88884c120b871b23fa842323598f548  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+c661e27ad383a9779cc39c1abc247f99305f51eb48d57c2b5584279a49c6761d  native-addin/Cargo.toml+52e7b9e8ee9ba221d7bd5231a4c9b61d737ce367d35618b8f32df00e2757c7b0  native-addin/build.rs+ebb91f660d170dc283b3017d05d5d81eadcab2f519ae7de0b85e69b37156fcf2  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+8d63ca6446102ca46d7f96d0c8aff6c696ee504168beec4e3dcfbd292d6b96da  native-addin/shim/sdk.cpp+59a1fe7ce07288594bc587d8d153e8e388d4a63ba4d1043ad486ff4e080031a9  native-addin/shim/sdk.h+0e6d88daa6a53d90af7743728bd71c0c45ac001289a7b39d1ff9513eca4197d8  native-addin/src/bom.rs+cca0b8fba0e979657ca03a5f21fcb371af950c0251f8c1528bab77a4842c4c01  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+1f71ec044ab3489e1e40881c1bd813db9321a515c524e48bd35ce29cd345a1f5  native-addin/src/execution.rs+d4ba290319a34af115b3e1a0e1041e8e5f7c45f289160e1e9a51785b0a1385f2  native-addin/src/execution_tests.rs+6d698cd611f3a151384ace2103cc28ffa5031a8d35e78db74cef068cbbf61f7c  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+5a6ae1a84bbf1db27f7dfbcb0fab4808967b0df383e5757d30ae9587489a6a34  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+e9de641af77a9946d43d6fb70c267accd929e0f6cc1b59d1f2d1f9f7ae20e940  native-addin/src/native.rs+81b1f2818284fcba186c372124fc96e9bd8fbd1c4d533d758e7096bd8e577f03  native-addin/src/native/bom_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+4ea80d69edda5c03e3f92b7c24a8806a5105173ece7f3f592163c49db864dfdf  native-addin/src/service.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs
native-rust/BASELINE-R9-SHA256.txtadded+76
@@ -0,0 +1,76 @@+ac8a52006c053daac4ce92f07e13d0c2d0b5f95dcfe3c19969fe61761bb99afa  Cargo.lock+7133328a40a393e308d8bc7c2867b10e376d265be2d23bc958cc3d81b47113a5  Cargo.toml+69b40bff8adf4eafe6fe54ad04065f640c6b47bd5e52c7a6b8fe7f6a59080825  MIGRATION-PLAN.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+a20240d19a1f271e84fefe5f1010647aff671ef2fb6bc528e4b2b9cd912db544  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+c47a416d668814d403d157e6e2a9dd527c654895e8f2383c136aba8b537261b2  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+61e8b63aea25ff559057232a95951811d37eff437992bc11c6d33e0acabc776b  mechanical/tests/contracts.rs+1e995c0eb819d85fc4db509b479ce9b6b88884c120b871b23fa842323598f548  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+c661e27ad383a9779cc39c1abc247f99305f51eb48d57c2b5584279a49c6761d  native-addin/Cargo.toml+52e7b9e8ee9ba221d7bd5231a4c9b61d737ce367d35618b8f32df00e2757c7b0  native-addin/build.rs+ebb91f660d170dc283b3017d05d5d81eadcab2f519ae7de0b85e69b37156fcf2  native-addin/shim/bom.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+8d63ca6446102ca46d7f96d0c8aff6c696ee504168beec4e3dcfbd292d6b96da  native-addin/shim/sdk.cpp+59a1fe7ce07288594bc587d8d153e8e388d4a63ba4d1043ad486ff4e080031a9  native-addin/shim/sdk.h+0e6d88daa6a53d90af7743728bd71c0c45ac001289a7b39d1ff9513eca4197d8  native-addin/src/bom.rs+cca0b8fba0e979657ca03a5f21fcb371af950c0251f8c1528bab77a4842c4c01  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+1f71ec044ab3489e1e40881c1bd813db9321a515c524e48bd35ce29cd345a1f5  native-addin/src/execution.rs+d4ba290319a34af115b3e1a0e1041e8e5f7c45f289160e1e9a51785b0a1385f2  native-addin/src/execution_tests.rs+6d698cd611f3a151384ace2103cc28ffa5031a8d35e78db74cef068cbbf61f7c  native-addin/src/http.rs+230446608e9067bb6ea6d9eeaa299d236c0e5f3001bff1e838bae666d53132b7  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+1975b85a24ccc2fbcdf4a7399600f1891c5c8476bd7cd349b705ed935db61f55  native-addin/src/identity/tests.rs+5a6ae1a84bbf1db27f7dfbcb0fab4808967b0df383e5757d30ae9587489a6a34  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+e9de641af77a9946d43d6fb70c267accd929e0f6cc1b59d1f2d1f9f7ae20e940  native-addin/src/native.rs+81b1f2818284fcba186c372124fc96e9bd8fbd1c4d533d758e7096bd8e577f03  native-addin/src/native/bom_adapter.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+4ea80d69edda5c03e3f92b7c24a8806a5105173ece7f3f592163c49db864dfdf  native-addin/src/service.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml
native-rust/BASELINE-SKETCH-CORE-SHA256.txtadded+7
@@ -0,0 +1,7 @@+37564934b5c3ec1fe0cfce11fedd2eaf1e1ecefd9a5dff692051fb2d67509a7d  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/Cargo.lockadded+476
@@ -0,0 +1,476 @@+# This file is automatically @generated by Cargo.+# It is not intended for manual editing.+version = 4++[[package]]+name = "ahash"+version = "0.8.12"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"+dependencies = [+ "cfg-if",+ "once_cell",+ "version_check",+ "zerocopy",+]++[[package]]+name = "bitflags"+version = "2.13.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"++[[package]]+name = "block-buffer"+version = "0.10.4"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"+dependencies = [+ "generic-array",+]++[[package]]+name = "cc"+version = "1.4.4"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273"+dependencies = [+ "find-msvc-tools",+ "shlex",+]++[[package]]+name = "cfg-if"+version = "1.0.4"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"++[[package]]+name = "cpufeatures"+version = "0.2.17"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"+dependencies = [+ "libc",+]++[[package]]+name = "crypto-common"+version = "0.1.7"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"+dependencies = [+ "generic-array",+ "typenum",+]++[[package]]+name = "digest"+version = "0.10.7"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"+dependencies = [+ "block-buffer",+ "crypto-common",+]++[[package]]+name = "equivalent"+version = "1.0.2"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"++[[package]]+name = "fallible-iterator"+version = "0.3.0"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"++[[package]]+name = "fallible-streaming-iterator"+version = "0.1.9"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"++[[package]]+name = "find-msvc-tools"+version = "0.1.11"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890"++[[package]]+name = "fusion-artifact-publication"+version = "0.1.0"+dependencies = [+ "getrandom",+ "sha2",+ "windows-sys",+]++[[package]]+name = "fusion-bom-core"+version = "0.1.0"+dependencies = [+ "serde",+ "serde_json",+ "thiserror",+]++[[package]]+name = "fusion-mechanical-core"+version = "0.1.0"+dependencies = [+ "serde",+ "serde_json",+ "thiserror",+]++[[package]]+name = "fusion-mechanical-journal"+version = "0.1.0"+dependencies = [+ "fusion-mechanical-core",+ "rusqlite",+ "serde",+ "serde_json",+ "sha2",+ "thiserror",+ "windows-sys",+]++[[package]]+name = "fusion-native-addin"+version = "0.1.0"+dependencies = [+ "cc",+ "fusion-artifact-publication",+ "fusion-bom-core",+ "fusion-mechanical-core",+ "fusion-mechanical-journal",+ "fusion-native-dispatch",+ "fusion-sketch-plan-core",+ "getrandom",+ "serde",+ "serde_json",+ "sha2",+]++[[package]]+name = "fusion-native-dispatch"+version = "0.1.0"++[[package]]+name = "fusion-sketch-plan-core"+version = "0.1.0"+dependencies = [+ "serde",+ "serde_json",+]++[[package]]+name = "generic-array"+version = "0.14.7"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"+dependencies = [+ "typenum",+ "version_check",+]++[[package]]+name = "getrandom"+version = "0.2.17"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"+dependencies = [+ "cfg-if",+ "libc",+ "wasi",+]++[[package]]+name = "hashbrown"+version = "0.14.5"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"+dependencies = [+ "ahash",+]++[[package]]+name = "hashbrown"+version = "0.17.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"++[[package]]+name = "hashlink"+version = "0.9.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af"+dependencies = [+ "hashbrown 0.14.5",+]++[[package]]+name = "indexmap"+version = "2.14.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "07aa2048142242915a31d35844fb311e0e53fcca590c3a0a40dcf1b841fa09eb"+dependencies = [+ "equivalent",+ "hashbrown 0.17.1",+]++[[package]]+name = "itoa"+version = "1.0.18"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"++[[package]]+name = "libc"+version = "0.2.189"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"++[[package]]+name = "libsqlite3-sys"+version = "0.30.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149"+dependencies = [+ "cc",+ "pkg-config",+ "vcpkg",+]++[[package]]+name = "memchr"+version = "2.8.3"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"++[[package]]+name = "once_cell"+version = "1.21.4"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"++[[package]]+name = "pkg-config"+version = "0.3.34"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"++[[package]]+name = "proc-macro2"+version = "1.0.107"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"+dependencies = [+ "unicode-ident",+]++[[package]]+name = "quote"+version = "1.0.47"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"+dependencies = [+ "proc-macro2",+]++[[package]]+name = "rusqlite"+version = "0.32.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e"+dependencies = [+ "bitflags",+ "fallible-iterator",+ "fallible-streaming-iterator",+ "hashlink",+ "libsqlite3-sys",+ "smallvec",+]++[[package]]+name = "serde"+version = "1.0.229"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"+dependencies = [+ "serde_core",+ "serde_derive",+]++[[package]]+name = "serde_core"+version = "1.0.229"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"+dependencies = [+ "serde_derive",+]++[[package]]+name = "serde_derive"+version = "1.0.229"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"+dependencies = [+ "proc-macro2",+ "quote",+ "syn 3.0.4",+]++[[package]]+name = "serde_json"+version = "1.0.151"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"+dependencies = [+ "indexmap",+ "itoa",+ "memchr",+ "serde",+ "serde_core",+ "zmij",+]++[[package]]+name = "sha2"+version = "0.10.9"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"+dependencies = [+ "cfg-if",+ "cpufeatures",+ "digest",+]++[[package]]+name = "shlex"+version = "2.0.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"++[[package]]+name = "smallvec"+version = "1.16.0"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f"++[[package]]+name = "syn"+version = "2.0.119"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"+dependencies = [+ "proc-macro2",+ "quote",+ "unicode-ident",+]++[[package]]+name = "syn"+version = "3.0.4"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f"+dependencies = [+ "proc-macro2",+ "quote",+ "unicode-ident",+]++[[package]]+name = "thiserror"+version = "1.0.69"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"+dependencies = [+ "thiserror-impl",+]++[[package]]+name = "thiserror-impl"+version = "1.0.69"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"+dependencies = [+ "proc-macro2",+ "quote",+ "syn 2.0.119",+]++[[package]]+name = "typenum"+version = "1.20.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"++[[package]]+name = "unicode-ident"+version = "1.0.24"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"++[[package]]+name = "vcpkg"+version = "0.2.15"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"++[[package]]+name = "version_check"+version = "0.9.5"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"++[[package]]+name = "wasi"+version = "0.11.1+wasi-snapshot-preview1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"++[[package]]+name = "windows-link"+version = "0.2.1"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"++[[package]]+name = "windows-sys"+version = "0.61.2"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"+dependencies = [+ "windows-link",+]++[[package]]+name = "zerocopy"+version = "0.8.56"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb"+dependencies = [+ "zerocopy-derive",+]++[[package]]+name = "zerocopy-derive"+version = "0.8.56"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1"+dependencies = [+ "proc-macro2",+ "quote",+ "syn 2.0.119",+]++[[package]]+name = "zmij"+version = "1.0.23"+source = "registry+https://github.com/rust-lang/crates.io-index"+checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
native-rust/Cargo.tomladded+13
@@ -0,0 +1,13 @@+[workspace]+resolver = "2"+members = ["mechanical", "journal", "dispatch", "native-addin", "bom-core", "artifact-publication", "sketch-plan-core"]++[workspace.package]+version = "0.1.0"+edition = "2021"+license = "MIT"++[workspace.dependencies]+serde = { version = "1", features = ["derive"] }+serde_json = { version = "1", features = ["preserve_order", "float_roundtrip"] }+thiserror = "1"
native-rust/DEVELOPMENT.mdadded+23
@@ -0,0 +1,23 @@+# Native Rust development checkpoint, 16 October 2026++This draft contains R21 development source. It is an isolated workspace and does not replace the existing bridge's build, installer, runtime selection, package manifest or release channel.++The product's 193 files match [PRODUCT-SOURCE-SHA256.txt](PRODUCT-SOURCE-SHA256.txt), SHA-256 c2b42e34335a2cc49a1762b3bd140dffe542d544aa7e81721d87449082cbe197. R21 has 18 finite subsets of the 61 legacy mechanical operations and nine native helpers. Full legacy parity is not established. The new subset is absolute translation of an exact owned empty root occurrence, with a captured position; rotations, grounding changes, nested/physical assemblies and general placement are not included.++## Verification state++R21 passed 508 Linux and 512 Windows tests, binding and installed SDK checks, and release DLL linking. Its protocol verifier passed 28 tests on each platform. The separate public-SDK placement observer passed 20 tests on each platform and SDK linking. Independent source reviews passed. R21 has not yet been run in Fusion; actual pose/snapshot qualification, semantic archive/reopen persistence and package/regression release gates remain pending.++The previous R20-fix3 actual Fusion assembly result remains a separately bound historical result: 52 requests, six durable successes, zero uncertain attempts and independent public-SDK checks of two empty definitions/three shared occurrences, local metadata and identity poses. See [that receipt](../docs/mechanical-progress/r20-assembly-qualification.json). It does not qualify R21 translations or reconcile failed historical attempts.++The new contract-authoring tool ports catalog expansion and contract freezing to Rust, including explicit changed-catalog refreezing and fresh output bundles. All 21 tool tests pass on Linux and Windows, including actual CLI and atomic publication. All 665,236 historical contract bytes match. It uses a caller-supplied date and stricter malformed-input validation. Its historical Python files are inert test fixtures, never executed. Release-CI adoption and macOS atomic-publication support remain pending. See [tool instructions](tools/contract-authoring/README.md).++Rust owns policy, transport, dispatch, identities, journals and results. Typed C++ glue invokes Autodesk's SDK. The preserved installed bridge still contains Python. Current priority is complete existing-behavior conversion before additional features or the AI Flow evidence adapter.++## Source layout and builds++The product, placement protocol verifier, observer and authoring tool each have source manifests. Older baseline manifests, READMEs and ledgers retain their original dated statements; use this document and [current progress](../docs/mechanical-progress/README.md) for current qualification claims. The previous C20 assembly verifier remains for historical reproduction.++Vendored dependencies, build products, SDK headers/libraries, live authorities, runtime credentials and active journals are excluded. In each isolated workspace, bootstrap with cargo vendor --locked vendor before cargo test --workspace --locked --offline. Do not use --respect-source-config while the vendor directory is absent. The placement verifier additionally uses the exact product mechanical crate through its relative path. Windows native DLL builds require the installed Autodesk Fusion C++ SDK; see each build.rs.++Live test clients require fresh explicit fixture authority and exact host/process/document checks. Passing portable tests is not authority to mutate an arbitrary design. No installable release is created by this source publication.
native-rust/FREEZE-1.mdadded+7
@@ -0,0 +1,7 @@+# R20 fix3 initial root/component revision readback freeze++Baseline: exact R20-fix2 product freeze1, 184 files, manifest SHA256 `63ae9355a32fc07ad77c5ff970a658c43043d4be113c9e68d8a152de9cdaf7d4`. `BASELINE-R20-FIX2-PRODUCT-FREEZE1.txt` and `evidence/baseline-source` preserve those bytes. All previous product directories and live journals remain unchanged.++Only acknowledged assembly effect readback with an initial root-revision-only drift may also normalize initial component revision witnesses to their second observed values. Two subsequent internally stable full captures must exactly equal the normalized projection and each other. At most three captures occur. Every other field/error remains strict. The separate pre-effect delta comparison still rejects unrelated component revision changes. Combined root/component diagnostics have one 8 KiB acceptance budget. No mutation is repeated; ordinary reads/preflight remain strict. See `docs/R20-INITIAL-COMPONENT-REVISION-FIX3.md`.++Linux full workspace: 494 tests (316 native, four compile-fail doctests), all passed. Focused assembly suite: 41 passed. GNU Windows workspace tests/bindings, native bindings tests, adapted installed SDK syntax, and formatting checks passed. These are source/platform checks, not actual Windows execution or Fusion qualification. Independent root review, MSVC build and a fresh bounded actual-app campaign remain separate gates. No prior unknown operation is reconciled by this change.
native-rust/MIGRATION-PLAN.mdadded+47
@@ -0,0 +1,47 @@+# Full Rust bridge migration++User authorized porting everything with detailed testing on 2026-10-14. Preserve frozen r6. All new product and verification clients Rust, minimal Autodesk C++ ABI glue. No new Python. Root sole Windows/Fusion operator; all captures, feeds, failure screenshots and Shotlog off. Preserve pinned install and user documents. Public release authorization persists after thorough acceptance, installer/signing and regression checks.++First functional slice: authenticated operation dispatch with retained-journal admission, exact current document membership and design revision guards. Port native design inspection, parameters (create/set/batch), new design and owned scratch lifecycle first, with real SDK readback. Unsupported operations must refuse before admission/effect. Results distinguish durable terminal, nondurable observation and unknown; never automatically retry effects.++Then implement the full legacy operation inventory in useful slices: sketch construction/constraints/dimensions/project/edit; planes/axes/solid features; entity inspection/query/measure/delete/export; components/occurrences/joints/rigid groups/interference; purchased CAD/McMaster/BOM/materials; exploded views/presentation/render/configuration/motion; remaining nonmechanical add-in handlers and Python tooling. Inventory will track implemented, offline-tested, actual-app-tested and released separately. No schema-only success claims.++Three-musketeers structural roles: builder native SDK/mechanical adapter; adversarial reviewer read-only design/source/results; verifier independent external client and parity inventory. Root owns HTTP/journal/queue integration and actual app testing. Only available model family is used; no Opus/Sonnet or model-diversity claim. Fresh agents attempted when available.++Qualification per slice: Rust unit and fault tests, independent behavior tests, Linux/Windows full regressions at checkpoints, MSVC native SDK build, bounded real Fusion scratch flows with exact readback/replay/conflict/stale guards, owned fixture cleanup and complete stop/unload. Existing document metadata and installed hashes checked before/after. No unbounded screenshot or polling loops.++## R10 isolated next checkpoint++The r10 candidate adds `native-sketch-v1` exact retained root origin-plane creation and scoped summary inspection. See `docs/R10-SKETCH-CONTRACT.md` and `evidence/builder-linux/REPORT.md`. Eight-primitive geometry preparation is copied from the reviewed Rust core; SDK insertion is still explicitly unsupported. This is not full legacy sketch parity and does not broaden parameter-only scratch discard. Author Linux/compile receipts do not substitute for root's separate Windows/Fusion qualification and release gates.++## r11 candidate checkpoint — retained sketch primitive insertion++This copy begins from r10 product freeze2 (`BASELINE-R10-PRODUCT-FREEZE2.txt`), preserving earlier frozen products and evidence. The r11 delta is documented in `docs/R11-GEOMETRY-CONTRACT.md`: exact retained empty origin-root sketch, explicit new contract, whole-plan pure preparation before admission, durable execution start before typed SDK effects, actual geometry and prefix readback, no automatic rollback/retry. The eight input primitives are bounded, non-atomic and not full legacy constraint/transaction parity. Product geometry scratch cleanup remains unsupported. Independent review and source-bound Windows/live qualification must precede any publication. Root owns host operation and external verifier clients; this author performs local Rust/ABI source qualification only. No live qualification from an older checkpoint is promoted automatically.++## r12 candidate checkpoint — retained sole-profile solid extrusion++The exact r11 freeze1 baseline is preserved separately. R12 adds an explicit `native-extrude-v1` profile-inspection/read and finite `feature_create` extrusion subset, documented in `docs/R12-EXTRUDE-CONTRACT.md`. Exact SDK profile/feature/body references remain beneath the owner-thread sketch lease. Prepared metadata crosses the journal worker; SDK pointers do not. One durable start precedes one feature-add invocation. Successful readback checks exact membership, feature health, solid volume, extent and transformed center of mass; any post-invocation uncertainty retains observations without retry or rollback. Product geometric scratch cleanup is still unsupported.++R9-fix1 freeze5 BOM offline guards and immediate diagnostics are propagated as four exact files after checking the inherited copies against original r9; only BOM capability wording/online flag are merged into changed execution code. This carries forward qualified offline refusal, not an unperformed successful assembly campaign. Parent owns independent review, Windows/native SDK execution, live fixtures and publication gates. Fresh reviewer agents are unavailable under the thread limit; reused roles are disclosed rather than described as fresh-model independence.++## R15 read-only purchased-command discovery++Exact R14 freeze1 copied without targets/live receipts. Add bounded native McMaster command registration/design-intent observation with an explicit discovery-only contract. No supplier launch/download/import. Add typed read-only document-selector refusal; cached malformed/foreign/absent selectors never invoke SDK or material backend, successful fresh retirement never enters the operation backend, genuine incomplete refresh remains unavailable. Write paths and journal semantics unchanged. Full author Linux workspace plus binding/SDK syntax checks precede parent review and Windows/live gates. At freeze1, the M12-fix2 profile-getter ordering correction remained a separate pending propagation; the amendment below records freeze2 integration. R15 does not retroactively resolve the original unknown operation.+++## R15 freeze2 source-only propagation sequencing++Parent authorized the reviewed six-file M12-fix2 correction to proceed before fresh actual-app acceptance, because the app roster is changing and app effects are gated. Freeze1 is archived and hash-verified; three exact source copies plus three narrow merges preserve R13 identity fields/equality and R14/R15 typed APIs. Full source/build tests and independent parent merge review precede any Windows/app use. Actual-app status stays PENDING; original unknown journal and old fixtures remain untouched.++## R19 finite driving length dimension++Start from exact R18 freeze2 and preserve the full baseline. Add a separate+endpoint/dimension projection and one driving aligned numeric-mm distance on the+exact previously returned H/V relation's isolated line. Publish exact ordered+point refs before admission; retain both returned typed dimension and driving+model parameter before follow-up getters/setter. Journal executing precedes the+add; add and value-set stages stay separately visible. Any post-add failure or+lost outcome remains unknown with retained prefix/children, no rollback/replay.+Pure/native author tests are distinct from root's independent source, Windows+and actual Fusion qualification. Record each later R18 SDK-precondition fix+explicitly; no frozen historical result is promoted or rewritten.
native-rust/PRODUCT-SOURCE-SHA256.txtadded+193
@@ -0,0 +1,193 @@+a01b87e607d6f4575906dde605ff16d4a9425389f78230f99f7a5af516637391  .cargo/config.toml+6d301973ae13a6cdbad9a74b5adc7f45f22f151971935318aab2b05c847282f2  BASELINE-BOM-OFFLINE-FREEZE5.txt+2287227fbc61858a7ea9ca7794da38fde685e7336352dc7961f1f058e080adb6  BASELINE-M12-FIX2-PRODUCT-SHA256.txt+39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc  BASELINE-R10-PRODUCT-FREEZE2.txt+f68c2d3c85bbb2be452b85cc4b11e908147f7b7fbc59a2bc51f8a11b11644812  BASELINE-R11-PRODUCT-FREEZE1.txt+8820646b4120e4fe75647e7983f0179b626cb6c69dd2b34b2b6a23253ffb3c7f  BASELINE-R12-FIX1-PRODUCT-FREEZE1.txt+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d  BASELINE-R12-PRODUCT-FREEZE1.txt+ed677db7dcb6a4ba379c4268655c9b10578128145d4d6050f19eeb2066a75e82  BASELINE-R13-PRODUCT-FREEZE1.txt+01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864  BASELINE-R14-PRODUCT-FREEZE1.txt+7eb86f73fc1201123bfb4a16261ce1af8ec29c0f834cd0924f956b6175c734df  BASELINE-R15-PRODUCT-FREEZE2.txt+85bcf6a7cf4c5435a61b17095e4f7bae600e21f8a05cd4eada71737691a10375  BASELINE-R16-PRODUCT-FREEZE1.txt+b18dd8d127318d903839b150bbc24ed068c2abbfb5db6fcbfc08065f117c261e  BASELINE-R17-PRODUCT-FREEZE1.txt+3ac27fee0e361fb408b38efad971ab1b7913428c5641f0fd471205e9c0be9d00  BASELINE-R18-FIX1-SOURCE-SHA256.txt+3ce574d2443c34f5feeb81dfd7298d2ed7f9e47129d739ec83507f98ac6ae12a  BASELINE-R18-FIX2-DELTA-SHA256.txt+85790b8e509392e71e663ff5fbb2db6d755cc77f9738ca9f53766dd18ee7d5bb  BASELINE-R18-PRODUCT-FREEZE2.txt+3465c2fd655934c365ca5d4e3b5ee74300a0895abd9e898155aceeaac79b51d3  BASELINE-R19-FIX1-PRODUCT-FREEZE1.txt+11549c7596c77c21a05b25dc98d2a8f57ff1b1cb9af41d02c58e3b0a0998607b  BASELINE-R19-PRODUCT-FREEZE1.txt+6f67e82c988e97bf7a731c9894822196e7797d6196c8024f44c60f4f9ac945a3  BASELINE-R20-FIX1-PRODUCT-FREEZE1.txt+63ae9355a32fc07ad77c5ff970a658c43043d4be113c9e68d8a152de9cdaf7d4  BASELINE-R20-FIX2-PRODUCT-FREEZE1.txt+9dd6f2f225a21b71cdc8cc51fe0b480b86f351dcc253939ac96b0354b7dc5208  BASELINE-R20-FIX3-PRODUCT-FREEZE1.txt+bd1d41d25dc8984289f96d96aa9588208e7325784b1b7884b5064996381daff0  BASELINE-R20-PRODUCT-FREEZE1.txt+ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7  BASELINE-R9-PRODUCT-FREEZE1.txt+1bb8aaa94cd1053c11503abdf05fda4474865a82dea34cd1030ef5354f9da686  BASELINE-R9-SHA256.txt+4b45849f6e5f3bd864ddf48f2d0d72e1ad0f4e24a2eb4d6501431a00674de286  BASELINE-SKETCH-CORE-SHA256.txt+6240f37683bc88201c06eebbce446e2773bc5f3ae50796e2598aee1caee40408  Cargo.lock+788e7ccca864c51315f1ed5511d49686337a4f86659fdcbb788920d3c2a53909  Cargo.toml+ff8848812031fff59be39bfe0b3d24c4cf2a2625a0f6124d41a1ec0ab5a9d812  FREEZE-1.md+89ea322a69dfd14abd051b5329120e813b02adeaa062382e328df278956b32b0  MIGRATION-PLAN.md+eef9698df9c3619e93e7d5a3f393cf37b9f098c3834e7da851f72c08f0a1a627  README.md+c2835d074ecf03fd00129a1bde2a8ab8d6d0f8663cf3536363dbc49ecaaa5a2c  artifact-publication/Cargo.toml+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  artifact-publication/PORT-MAPPING.md+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  artifact-publication/README.md+b81e358a447fc7aba88dfced299d01d392b6e80e8ca47fa0ba81edd5146857e9  artifact-publication/SOURCE-CHECKSUMS.sha256+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  artifact-publication/src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  artifact-publication/src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  artifact-publication/src/windows.rs+382d5e5b2980703eb27cc3be21d6fcf97668bb49f15d8c35b20c5c3ed6c727bf  bom-core/Cargo.toml+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  bom-core/PORT-MAPPING.md+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  bom-core/README.md+9edd8875056d669c6ffa703c05766e0422a80ca50c5b1af0f433e225c43096ea  bom-core/SOURCE-CHECKSUMS.sha256+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  bom-core/src/configuration.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  bom-core/src/csv.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  bom-core/src/engine.rs+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  bom-core/src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  bom-core/src/model.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  bom-core/tests/bom.rs+8fad180d2fb978badc1c2c0ba517779e7275f877b0fff5cdf63f32ff6a6be206  dispatch/Cargo.toml+3c48b96a5a5a8e2e65b46057708da146d0e71001f88ac245ee04bb49e0fade4b  dispatch/src/lib.rs+0d91cc892db75f821a3c5856fd52262d204cd533508d42091b817b233400efcf  docs/EXACT-SKETCH-ENTITIES.md+30d46e99ab0b7bc1c566308b5281562003c033d46662874c7e781822443787de  docs/MATERIAL-CATALOG.md+b58faeb82f9ea61a81b2f82d79dc75adc47ed3fe2662340964e23e04c9e1554c  docs/NATIVE-LIFECYCLE-PLAN.md+104555b187afc24b6a292b3c04c8080560f9e845e1d3c04f12acfaa0c2e8113e  docs/NATIVE-MCMASTER-DISCOVERY.md+21f986d15bf693a11543fdf33395102d492a8da3bb0c58f415798b8bd0a0ad0b  docs/NATIVE-ROOT-PHYSICAL.md+940b95247b2b81698fa37a885c9a8d0c1d7326cc305596207efb4eb98eb79c13  docs/NATIVE-SKETCH-LINE-STATE.md+974a7192e9349e51be2e96660872277b67347ead90f434fb778066a46c1361c7  docs/NATIVE-SKETCH-RELATIONS.md+58c4503428cef152365906b673a89d3fb1ba0ba930e434f57dfc8a62c587c230  docs/NEXT-HORIZONTAL-VERTICAL.md+63e66a5d2de636d3b3286875e59dbd3c20e6a4a93f2c1484426bfad97877d866  docs/PORTING-LEDGER.json+88dc171b00cdce3abba2a88f1645193906f65efa6555629932255f4f8ae4d5c0  docs/PORTING-LEDGER.md+ecc80b6be5fadc9f78dc153662297d3d7f9a553c90883be946f6b425f2100876  docs/R10-SKETCH-CONTRACT.md+dd63aa299c1a1b851b4cdeab4026a5e02cd3903a521996e6b215db4e479d42ab  docs/R11-GEOMETRY-CONTRACT.md+bcc6e736cadbcdbeaedc8e8be7cbf695ecac4111dd636cd37e284d2e82e3326c  docs/R12-EXTRUDE-CONTRACT.md+b375c41e1457c3bb4ddac68485990acf730fc4b600a92274ac5664146131f92c  docs/R12-EXTRUDE-START-FIX.md+1e8ed0c8ecff96ea6f842dbe06f6177ee710549f231abadb4a6979a07a2d6bbc  docs/R18-FREEZE2-TYPED-RELATION-FIX.md+aeb714fb3cc50fa39d64e021dc2aa75c6607fda724f6b59eb0c0bc7e567e2c7b  docs/R18-LIVE-INCIDENCE-FIX.md+4bf8b8b77588455776465577d3b0716b81fe7ff7955d105a107537aa6ecf4f42  docs/R19-DRIVING-DIMENSION.md+583183e76a3ccb833bff6849db733e3f335457bc4db04c387a505d67686d8667  docs/R19-FREEZE1.md+a568cc74e46f74b9f9c0b5df572d9ef80b03f5dc7972652609e62307d066adfa  docs/R19-LIVE-CREATOR-FIX.md+ad5ca0ef4740b53938264e49d067f5343019befd751d900e1b5e3edf6749dbeb  docs/R20-ASSEMBLY-CONTRACT.md+6452903f5af8163ac0382dd155ff836cfe710afb0ce08ddef22a32ad4b05d046  docs/R20-ASSEMBLY-PLAN.md+028c253c63968a592e42ee95060240a4ce47f0f0c0fdea91c1babf4f749f53bc  docs/R20-INITIAL-COMPONENT-REVISION-FIX3.md+add06ac9a9b9939ef7fea0745a0f0b5f29cbe541899a329854defba460286dcc  docs/R20-INSTRUMENT-ONLY-FIX1.md+a49950322471cd1304488896306e1d5e5c79fc5d880022d57e8eeda0b15d83d5  docs/R20-POST-EFFECT-READ-SETTLING-FIX2.md+04a9afd3803ceb7f3584572eb87f4639c4c9115a3026f365bd90982157e58636  docs/R21-OCCURRENCE-TRANSLATION.md+9f8b7fa3b4fecbad38c41da397c5357ee3a8d03516340b9fde3f03aa0638f4af  docs/R8-LIFECYCLE-CONTRACT.md+9ad620bd3d90cc01019ef9c47718307895bad9df34208f3576db389362ac01ba  docs/R9-BOM-CONTRACT.md+bbc1ff6fbae1524a9d790f15023bcd309748a7ed2e58936c151edcf56dfa6458  journal/Cargo.toml+92105e517befa03a2fb23af64cfd719f2128893a6cfb848e5a0146510d918f6f  journal/README.md+140ceec15f4cbd5c5dfc710d2fa4353d6299a43003968a01a4d2c896e82d8d3f  journal/RETENTION.md+2c91bba2faba3276eb509fa79fb9b05f063abe6bc9a50c60bc82ac92f06e2e5a  journal/src/lib.rs+aba8177c419a696a44307cbd15875f6de87aaf1bb40d205edc76644390388a57  journal/src/retained.rs+73d89174bf1ab63ed8be850bc2369ec863f274dfad399f24531e672f632c35a5  journal/src/retained/tests.rs+ec6ac4bde4b2d6c56aa4fe2f9c2d838593c3fbe8ad4ae572e0ec18d5e6a8e2a0  journal/src/storage_policy.rs+b5b28a98ff1160cd534ee11d718e3d367e4d99da0ba80258a82c9baf30288b0c  journal/src/tests.rs+32b6426889954b64de3d1f6167ca22a535e3e61dbdaa1e905a01dc26f3aaeca8  journal/src/windows_storage.rs+f59394e5e74ed65e8e282bf107905608aac6ca1593a2e0f6c067ea0f1cf6fc7e  journal/src/windows_storage/tests.rs+7a2a8a0eb1f6d89cee26f64785a6419085f8025877c8f1b681ea55063149414c  mechanical/Cargo.toml+04381f0b98143bff0ae5dabc3793dcb873dbb08b7269f7fdc885ed87afdd30b5  mechanical/schema.json+d4c665d47d01f810c1982e409de0bb8cbbb40e2858765af92c7f976379aaec53  mechanical/src/lib.rs+5fb5e46ef72dabc2455178b6eaf6f4dece66e1f01d702474050e5f95ca11e9fd  mechanical/src/operations.rs+ad431541393d199d8107ed9478dec98fa839c6f112a62368035d107dac71b909  mechanical/src/schema.rs+605310c504ea99530cc5f67f161fb2665f8106195840650d1620d63dfb5d42a9  mechanical/src/wire.rs+c90013975ccee20dc087cdd5bde037b39aab31fb4f6ee22398862117bf3038f3  mechanical/tests/contracts.rs+45fd7c55bfab35f886157d3444a0ef6e113e8a2a18a37ecf1970eb0593e113dc  native-addin/AdomFusionRustNative.manifest+a0ebb0e5df3b01cfae1d4ffc012c8e1d97ef28adf6030a682381d7285432443a  native-addin/AdomFusionRustProbe.manifest+5b92039a741ab7cab658a1b226f5f771d36228c260e6d0e710383a71613e2634  native-addin/Cargo.toml+ed6bba3b21a655ec3361e7d79eb9063f9a5666156c68a63d1f17c007ae20cc28  native-addin/build.rs+a331ed066463e91f91956028643087414f710f78ca8cd384b012f2132e2a39fb  native-addin/shim/assembly.inc+fb16c2ba8198623a303ffcecb1c37729e760ad2cfd78ec0fc49e6453820656fa  native-addin/shim/bom.inc+dd6e16ae408c74b4bc4324117cae3cefc1d5ae75d7d750b66d7d6be0d2cccb7f  native-addin/shim/dimension_creator.h+600a30c338ffcf3be1dd4f59ac2c883d46ebc009853c1364675d1d5e0e8c97ff  native-addin/shim/dimensions.inc+d8bf0a788bebfcc1eccfc330b25bf02f9dc4d86c9b2aef8e964730634decfd0f  native-addin/shim/document_lifecycle.inc+d3693d7888a487ca0206043981a753cd034c9a268f9bf6ed336d757dd7e675bd  native-addin/shim/events.cpp+3b2ea21d015b6f65a83816196b4c7848c1d25004cc62fa3c02cccb7c96cdd76b  native-addin/shim/extrusion.inc+8fd6f37c4c13983caa7180c8326cb1e334746bcb8e2faef21b3eea2303f070b8  native-addin/shim/isolated_line_incidence.h+1027dec4c4121f294fe66b245350095e147b7b8b83edc53d7dcfb1658f517bd3  native-addin/shim/line_state.inc+5ba1a786db512480fc77e8899875ef1bae43dec2174d3a22254e0dae0f534b6b  native-addin/shim/materials.inc+142c7cdea6c8d3dcc63a37e7aeac877ad6637c8450fcf6254448e468b20fa49b  native-addin/shim/mechanical.inc+c4002e957aff096e21f7a1ef68e00f920e57a0c062c0d980644cfcfd9837c55c  native-addin/shim/physical.inc+6dc3f6f995e37c0cdd3a14876abaaef630cb22b28bbedcfccf6e2bbceafa1d9b  native-addin/shim/placement.inc+d51b10641539369d3ae5df9c4a50a9a158000fd6f88c02d296832503c2bb43cb  native-addin/shim/purchased.inc+cd35642f361b4230d8408a68d9ab47716bf63e74fd2c27a8d8679e129858db72  native-addin/shim/reference_presence.h+86186eb94fccb245e127916270e7fd677ab3931ba98ba6dab3d6570c5f395c4f  native-addin/shim/relation_identity.h+94bd275a815ad37b20b969398d9b153ff7bad0d62fc4d1cd53892f94870ed1b1  native-addin/shim/relations.inc+019177b67473ba045b37e3fd13bcb321b52a3519aa3540af9297fb7a265a727e  native-addin/shim/sdk.cpp+aa003d77323bea9b60f9d4046e3be283cbcb0935b185a6cde9c37f92080a7bba  native-addin/shim/sdk.h+2ae9b60e40f3263ba48490d21a3848ce745c32f1731293d6d433425f8eebdbc2  native-addin/shim/sketch.inc+44f66af62e1159ba47e9365d48d9d0a2abee6c6343fb49e44df24d293fbe6225  native-addin/shim/sketch_geometry.inc+6abcfafa16671c22784aea14b2a6b65feed269c93e84f63f60d79a4d62ef6f43  native-addin/shim/tests/dimension_creator.cpp+f0bfc487d731f0092fac187668bbe96a222575138da4bb4224620b3a502d6d8f  native-addin/shim/tests/isolated_line_incidence.cpp+3569f96c7ac208ab15d136a82e8b1b6a3934f3beaff30ce1f0e08b893ed48d5a  native-addin/shim/tests/reference_presence.cpp+7978b44f35f0cc9a45ec59bfe835846c967378e7371d360173d351cab5f84723  native-addin/shim/tests/relation_identity.cpp+3913f45060c1f67c36dfebcc1e9ab18af0b344ceb9887ef792b37350079e4ad6  native-addin/src/assembly/arguments.rs+580f683490c12c578cb963d332ce5c4e298a5e7fcc6c85d6b7ac15133049b7b6  native-addin/src/assembly/mod.rs+f36d72f73adb94201d1dc13853e3ba49ef66d8b5dc2c31ecd287852631379d16  native-addin/src/assembly/placement.rs+76ee8c3764c3560f8846e18a051052706341e30543f90e74ba62b226e88f9104  native-addin/src/assembly/placement_tests.rs+65358708f94150efb60b50324a34c313a014fb2fdcd787d502e77fff9300e827  native-addin/src/assembly/readback.rs+ec38e472032bfd55bbd8073e2f17d397cd0f7f97975dc4478aac616a9f495760  native-addin/src/assembly/readback_tests.rs+2cf5fefc596862b20e1b33e29adca8f7a86dbcfd7fc85d2ed0f5608607a6e812  native-addin/src/assembly/tests.rs+5a12bcd6c6c79cb3fb6cff156c42393eac0d3f67e2f5c6e0c8567831fe82c9b6  native-addin/src/bom.rs+c01c6daa39723b19de9134f87b853c072d87cf8b96568f74313eee42fb5ca01e  native-addin/src/bom/tests.rs+57b3a8baf947cd6e73cbd458c087014db9728947571cd70a106156696a8a28b1  native-addin/src/bom_export.rs+3d421449de05bf060f88177e554e4e0f4c09d8395b781c0fff4cab360557991f  native-addin/src/bytes.rs+c828357b7218714d852c70e078fc5492e46ce99330dc94f87644c03f6ba25682  native-addin/src/execution.rs+bd9a6112b9bc9da993f29e273b98cbba9cce4b146558ae223eb985c48cef2910  native-addin/src/execution_assembly_tests.rs+6471c1037767a20f777a0f54049e9b7d43e2e04d05e340124fac7a43211d8d1e  native-addin/src/execution_dimensions_tests.rs+5693e7e1594477bda345ae3dad4dc28c79a1aa154227a9d2ef4d3af380ac8625  native-addin/src/execution_placement_tests.rs+c546068f93257c88870e9039f6e3401118d6806540065d0ef019c52fc50606b3  native-addin/src/execution_tests.rs+281126dcd59c7f9b94389293960af1cf5336034c9179e28fabfbc32baeeadd58  native-addin/src/http.rs+f1cd4ebb9a6a3ce4d2882c60d60c0a883d8e97898fab3a1fb0949d4822968d8a  native-addin/src/identity.rs+22fdcf60ca9e9007d87744106e2c36d55d065b86a21ba38909a40416da82ab70  native-addin/src/identity/document_lifecycle.rs+fa43f66c1a3bcccb9e8afb9019e9bffada500f8b22d8e59237e869d5bcc33129  native-addin/src/identity/document_lifecycle/tests.rs+7eb3deefc3aa843a883cddc3c9a3e788faf3d1448b83537f8174fda2021971b0  native-addin/src/identity/tests.rs+2bcd50f5aac0097fbaab1f33511ca689ac32c4650e91cba3ed4307e0d1ead433  native-addin/src/lib.rs+c72023e5b133243f57eeef357bc8e0f9fd84a826b5caa27c702313d963fb8d56  native-addin/src/lifecycle.rs+57b36e034c16cd89d8a79f82957c2aa9fcd605ecbbd82fb127a3d759dcf1c004  native-addin/src/materials.rs+0ff6a858a7f73cdd9d388dd0ac0db79d2b7759bed7a74f448d584e3b335e4f5c  native-addin/src/materials/tests.rs+57d73a033a424bbe492a7eeffeb962aa383eb03876264a7b384f73ccd2671ad1  native-addin/src/mechanics.rs+0ecf824bb72f53209f40fd0b74c3cc57f0c35af52473b6736fa39d0ab6d0b679  native-addin/src/mechanics/tests.rs+40009bd8d895af749e4abc38ec2f6a475a0cab3ab6ee69ce88771efb93333e19  native-addin/src/native.rs+ab357214b9999e345566aadc1dc3f42a761a6a793aa98e5a2dc84a4e78b434d5  native-addin/src/native/assembly_adapter.rs+a12dfbec596982bd0c8b63bbf613f88e700cadab50063ef3a3068ff8bc141163  native-addin/src/native/bom_adapter.rs+c53748268eacb5491db95f58e5fa74c765bd592f77fb7e0e6c2d46eb43407ae9  native-addin/src/native/material_adapter.rs+59ac3ba583f5603ff058e654989612aa26a53bcc305025db22ccbf8004ccbaa1  native-addin/src/native/physical_adapter.rs+9fb1123d4c260dc974f879398c9b69c538c2d602bc1f2131c9c128337ee9f151  native-addin/src/native/purchased_adapter.rs+13f4257b1b83e3146b4f36ea8dbca2d4fb8b52c06aa205cc69abc41e25153c3f  native-addin/src/native/sketch_adapter.rs+8d7c4f07d4081bc12d024aaf4b4273a149ba52cf1a4e94ce2c594db912c3b8e3  native-addin/src/native/sketch_adapter/dimensions.rs+4635f4e7767911cccb9950027dfb76a43c2b1c307dbd98691fc4722e1c03ae6e  native-addin/src/native/sketch_adapter/line_state.rs+ed9a7084c4b35e9310a2a79b043ad56777d4ac994c3f6771b703ad2befa6a1ee  native-addin/src/native/sketch_adapter/relations.rs+8dd1bf8571dd10c196f49ce6f29c37e4c41e51b0be182b7147c13e8948ac326b  native-addin/src/operation_status.rs+dc61df6eec9bf0c40f2a1c04dd5cacc9e48eea8a8b68051fabc7836faa1c1f84  native-addin/src/operation_status_tests.rs+ad466294ae06992eedbcb072ea61518aa7f45af4df8e578ea5a75dd0d90b917c  native-addin/src/physical.rs+10033ff4504497e5fa43b82aeda383aa50b40147a5fd53c3501fcc901e57130d  native-addin/src/physical/tests.rs+eaf8687f29cc875bd325472ba53248f1051ccc652464f8b27102130c08abbdd8  native-addin/src/purchased.rs+affcf86e95eefdc2e542b9472c659b0adc9dc1dd384389c3d2d6e07b94969b72  native-addin/src/purchased/tests.rs+86ea36b9cd94783051e8f7a7c1e50907e42f774f38c0dc5a5814fff4b523f34e  native-addin/src/service.rs+47b8af095ecb864ff6efae90dd6ca008afd3b74695730a4ffa381e01d4657f53  native-addin/src/service_assembly_tests.rs+fff7e54efa9107fd9205d3e0ea1b68118710540b77f038a4e5641ecbdfb92a27  native-addin/src/service_dimensions_tests.rs+4cb6cafa7900ec5983f95767ad76e2d7597f459212f8a7620d455c92931e864a  native-addin/src/service_line_state_tests.rs+09c82d0dbdddb9c1b5f0e33435ae1b800b3fbfc9fdb612fc30643619bc5665e4  native-addin/src/service_physical_tests.rs+78f102d927389b36701ac841cd1bb4340c00d388c2452287dcc332ea0fb748c0  native-addin/src/service_relations_tests.rs+ac7250ec9afbc587ab6a96c8f86891784e93dd8df4dacf93f6cd8d04cade3228  native-addin/src/sketches.rs+2ecd6d699d643e452b0da0d9b1dfe34b9a5ec0167e43bdf418ca329b09bb12db  native-addin/src/sketches/dimensions.rs+151d0c5045062cd78c25500bafe6f7860088a847e998cbd21e0d569544d52bfc  native-addin/src/sketches/dimensions/tests.rs+79f1ed6b76a70c42f4a6453ce269db4b7fcc05152a38479dd418a621665e0cf9  native-addin/src/sketches/entities.rs+82bac23b021db69d419225bad2929df6e8623a2779ecb37db130de8288ae860e  native-addin/src/sketches/entities/tests.rs+4bef39635aa3d637200a9a18193c5c91c1d4c33092da49064f257f853a053bd5  native-addin/src/sketches/extrusion.rs+0f7d81df08e416304e1af2bc8ab9f02e5755925cc82ee81e4efcdc8a7a25ec5b  native-addin/src/sketches/extrusion/tests.rs+e0ac32e6eb7ff272eb8c1ab9fb4578026869f7acb25d12f9e197e4cf6acf0279  native-addin/src/sketches/geometry.rs+b8a5dea25d00cf24310d8ef51ad14e274fce73ffc92dd5933ab792c47cc850b0  native-addin/src/sketches/geometry/tests.rs+2001185a3f728cc748a3db510c06c46fd2a0142f6ba1853e101b8ecf2431f37f  native-addin/src/sketches/line_state.rs+429fb16fb879209d1540d3c4aa47833ee8daa94701d05af6a945e2776f0d815d  native-addin/src/sketches/line_state/tests.rs+0f9263c584617a6d0b35e73ae39b40b11295dd017d89db0de0dbeefafd0fbdfa  native-addin/src/sketches/relations.rs+b8a538bc79cd368e70a847279b4ff9f80c93a7cfe1c040b1bcac28122f7b7034  native-addin/src/sketches/relations/tests.rs+32e8d691669c5214cfd96138017a3c4d49a047f7e85bc5647ad77f5a51d54485  native-addin/src/sketches/tests.rs+0bd347b09b2ad337ae49db79cabde9a49b32524065b398430bfe341af0481d82  native-addin/src/wake_tests.rs+3dabe6e9edeecd73a779b4b6491a4f6d1e6115ce50b9e1eac8c540f7c9fb91c9  review/R21-AUTHOR-SELF-REVIEW.md+c2a08e5f51717a710be15ca40b1d0e0b8e79344d89eaecb75ac6438cc2d400f8  sketch-plan-core/Cargo.toml+d03d751118ccb0698b6d924467f09e619b930d6e1cbc4ec90f515e104495b85a  sketch-plan-core/PORT-MAPPING.md+cf664371de11f85630623156a3c74cd5b0098697e69d6dba9d991efb0618c403  sketch-plan-core/README.md+e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6  sketch-plan-core/SOURCE-CHECKSUMS.sha256+caa6bc758706e09d999b4e92a0a06902b968173d552d500990a92ed4a62ef710  sketch-plan-core/src/lib.rs+6cc56f5423d9c5d7d2580ce2b8911c169a1634c329cda98ca8709ec35b214432  sketch-plan-core/src/model.rs+d10731185caff5e52bd8abfc1c7909e899480d244fc8afcd701a9efd51e942f2  sketch-plan-core/tests/geometry.rs
native-rust/R21-VALIDATION.jsonadded+36
@@ -0,0 +1,36 @@+{+  "at": "2026-10-16T19:09:04.992Z",+  "product": {+    "sourceManifest": "c2b42e34335a2cc49a1762b3bd140dffe542d544aa7e81721d87449082cbe197",+    "linuxTests": 508,+    "windowsTests": 512,+    "actualFusion": "NOT_RUN"+  },+  "placementVerifier": {+    "sourceManifest": "74ef74635037acc2670116c6c67fa00b4b33099cda8b741dcdbafd6fd0497c77",+    "linuxTests": 28,+    "windowsTests": 28+  },+  "placementObserver": {+    "sourceManifest": "e488d07c2b7c1a714f03bda9b54693ad496b4351c64d2eec4f7da8ab3438345b",+    "linuxTests": 20,+    "windowsTests": 20,+    "sdkLink": "PASS",+    "actualFusion": "NOT_RUN"+  },+  "contractAuthoring": {+    "source": "rust-contract-authoring-r1",+    "sourceManifest": "7e9afe38589eecedf425a39c27a9dfd8e229556332f1cde362f43af5f88d1d2e",+    "sourceFiles": 21,+    "linuxTests": 21,+    "windowsTests": 21,+    "status": "Historical reproduction and explicit refreeze implemented and independently reviewed; actual Windows CLI tests passed",+    "historicalContractBytes": 665236,+    "historicalBytesEqual": true,+    "releaseCiIntegrated": false,+    "macosExclusivePublication": false,+    "runtimePort": false+  },+  "sourceReviews": "CLEAR",+  "release": false+}\ No newline at end of file
native-rust/README.mdadded+22
@@ -0,0 +1,22 @@+# Rust native Fusion checkpoint R21++R21 adds bounded absolute translation of an exact owned flat root occurrence,+followed by one explicitly guarded captured position. Rust controls admission,+units, stale guards, readback, result stages and the durable journal. C++ contains+only typed Autodesk ABI calls and retained SDK object holders.++The new occurrence_update operation requires+`native-root-occurrence-translation-v1`; prior operations and the primary+`native-root-assembly-v1` contract remain supported. Rotation, grounding edits,+unrelated pending positions, arbitrary object adoption, rollback and automatic+retry remain unsupported. See [the finite contract](docs/R21-OCCURRENCE-TRANSLATION.md).++The exact R20-fix3 186-file baseline is archived under evidence/baseline-source+and recorded by BASELINE-R20-FIX3-PRODUCT-FREEZE1.txt. All earlier frozen source+and live evidence remain unchanged. Prior unknown operations remain unknown.++This candidate is source-tested only. Root independent review, actual Windows+SDK build, protocol execution and independent SDK observation remain separate+gates. No host actions, Python, installation or publication were performed by+this author. Root-owned verification/native-placements is not part of the+product freeze and is not qualified by product unit tests.
native-rust/artifact-publication/Cargo.tomladded+13
@@ -0,0 +1,13 @@+[package]+name = "fusion-artifact-publication"+version = "0.1.0"+edition = "2021"+license = "MIT"+publish = false++[dependencies]+getrandom = "0.2"+sha2 = "0.10"++[target.'cfg(windows)'.dependencies]+windows-sys = { version = "0.61.2", features = ["Win32_Foundation", "Win32_Security", "Win32_Security_Authorization", "Win32_Storage_FileSystem", "Win32_System_Threading"] }
native-rust/artifact-publication/PORT-MAPPING.mdadded+23
@@ -0,0 +1,23 @@+# Port mapping++Reference: `exploded-preview-preparation/runtime-dev9-build-r1/source/addin/AdomBridge/commands/mechanical/`.++| Legacy responsibility | Rust implementation | Qualification |+| --- | --- | --- |+| `exporting.py::publish_staged` exclusive publication or replacement | `publish_bytes` private staging, hardlink/rename and immutable input digest | Linux/Windows filesystem tests |+| `bill_of_materials.py::bom_export` absolute `.csv`, UTF-8, no implicit overwrite | `publish_csv` | Linux/Windows filesystem tests |+| Staging cleanup must not hide committed output | Success receipt with separate cleanup warning | Both platforms, injected failures and unexpected child |+| File permissions inherited from arbitrary destination parent | Hardened private staging: Unix0700, Windows current-user protected DACL | Windows shared-parent ACL regression |+| Destination operation throws after invocation | Explicit `PublicationState::Unknown` | Fault-boundary regression; no remote-server lost-ack experiment |+| Native generation, configuration snapshot and model guard | Separate BOM core plus future SDK adapter | Not integrated |+| Mechanical journal admission/retention and `bom_export` dispatch | Future handler integration | Not implemented here |+| `export_design` STEP/STL/3MF/F3D/etc. SDK factories | Future typed native adapter | Not implemented here |+| General native exporters writing their own files or bundles | Separate future staging capability | Not implemented here |++The Rust primitive deliberately accepts bytes rather than an arbitrary staging+path. It supports the BOM output path without claiming all native exporter parity.+No Python code was added or executed.++Reviewer findings resolved before qualification: Windows inherited ACL exposure,+unbounded UTF-8 work before size refusal, reserved Windows filename variants, and+uncertain commit errors. See `rust-native-migration-r7/review/ARTIFACT-PUBLICATION-REVIEW.md`.
native-rust/artifact-publication/README.mdadded+46
@@ -0,0 +1,46 @@+# Rust artifact publication++`publish_csv(destination, bytes, overwrite)` publishes already-generated UTF-8 BOM+CSV. `publish_bytes` provides the bounded byte primitive. This is a standalone+Rust port; the Fusion command adapter and operation-journal integration are pending.++Publication writes and syncs a fresh staging file on the destination filesystem.+An exclusive hardlink commits when replacement is disabled. An explicit replace+uses the platform's rename primitive. Neither path truncates an existing file.+The receipt includes the SHA-256 and size of the supplied bytes. Acknowledged+publication remains successful if subsequent staging cleanup fails.++Errors before the commit syscall have `publication: NotAttempted`. A commit+syscall error has `publication: Unknown`, requiring reconciliation rather than an+automatic retry. This distinction also covers lost acknowledgements on network+filesystems. File publication is an external effect and cannot be undone by a+Fusion model transaction.++Output is limited to 16 MiB and must be nonempty. CSV additionally requires UTF-8+and a `.csv` extension. Paths must be absolute and contain no parent traversal.+Existing directory/link/reparse-point destinations are refused. Windows device,+alternate-stream and ambiguous reserved names are refused before creating parents.+Missing parent directories may be created before publication.++Staging is private: Unix mode0700; Windows atomically assigned protected+current-user owner/DACL with opened-handle readback. Windows impersonation and+alternate process-token owners are unsupported. The published file retains its+private staging permissions; this API does not configure sharing permissions.+No caller configuration or existing ACL is repaired.++Scope excludes a hostile process replacing ancestor paths, SDK export-manager+calls, arbitrary caller-owned staging paths, sidecar bundles, and a power-loss+durability guarantee. Parent canonicalization and the current-user ACL do not+turn a path-based API into a capability filesystem. Unexpected staging children+are retained with a cleanup warning instead of recursively deleted.++Verification: **16 Linux tests and 18 Windows MSVC tests passed**, with matching+source hashes. Tests cover real filesystem replacement/exclusivity, eight+concurrent writers, hardlink alias preservation, bounds, precommit fault+injection, postcommit warnings, unexpected child preservation, Windows readonly+files, special paths, and private staging under an explicitly shared parent ACL.+The tests inject boundary failures; they do not claim an actual full-disk or+power-loss experiment. Raw logs and bindings are in `evidence/`.++Run from this directory: `cargo test --locked --offline`.+
native-rust/artifact-publication/SOURCE-CHECKSUMS.sha256added+8
@@ -0,0 +1,8 @@+56ebecc5682134a313649deccaa4c69c3d972f3b5e53cf4886ab41d9f3812280  Cargo.toml+1eb7db821b8478ad5bfe23a27113640d1e7f2baa3e68b949adcbbf1f5847ffad  Cargo.lock+c271c1d1cb59431796c3fef229fb7ff4f791a878562eda7068ba3f1fa740edc6  .cargo/config.toml+52d0204d39ec9f545d6a9ddf743e4f532a2d85d489f05a98b7ee63f3c335291d  src/lib.rs+5027d4be2bf26de9189a97304b396ca4d7c47dbce018c9d4b26e806cbbe9ff4f  src/tests.rs+4e89d520a665baa7ae6f5336b74345116fd4276eb51761817ebd2db818db68ad  src/windows.rs+e605a756e5f717a23c0a2b79de4aa2306d273e0bb60445f790c5430d1a7f51d1  README.md+1f32453f88d1d2ee76d8e3b0f248bfacec1c67a94cd6f875786750ae165d47fc  PORT-MAPPING.md
native-rust/artifact-publication/src/lib.rsadded+338
@@ -0,0 +1,338 @@+//! Publish already-generated, bounded bytes on the host filesystem.+//!+//! The destination commit is a single rename (replacement) or exclusive hardlink.+//! Publication is independent of model rollback. This is not an SDK exporter,+//! authorization check, journal, or guarantee of durability after power loss.++use sha2::{Digest, Sha256};+use std::fs::{self, OpenOptions};+use std::io::{self, Write};+use std::path::{Component, Path, PathBuf};++#[cfg(windows)]+mod windows;++pub const MAX_BYTES: usize = 16 * 1024 * 1024;++#[derive(Debug)]+pub struct Publication {+    pub output_path: PathBuf,+    pub file_size: usize,+    pub sha256: String,+    /// True means the OS acknowledged the namespace commit, even if cleanup failed.+    pub published: bool,+    pub overwrite: bool,+    pub cleanup_warning: Option<String>,+}++#[derive(Debug)]+pub struct Refusal {+    pub stage: &'static str,+    pub source: io::Error,+    /// A failed attempt can still leave an owned staging directory for diagnosis.+    pub cleanup_warning: Option<String>,+    /// A commit syscall error cannot authorize an automatic retry.+    pub publication: PublicationState,+}++#[derive(Debug, Clone, Copy, PartialEq, Eq)]+pub enum PublicationState {+    NotAttempted,+    Unknown,+}+impl std::fmt::Display for Refusal {+    fn fmt(&self, out: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {+        write!(out, "{}: {}", self.stage, self.source)+    }+}+impl std::error::Error for Refusal {+    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {+        Some(&self.source)+    }+}+fn error(stage: &'static str, source: io::Error) -> Refusal {+    Refusal {+        stage,+        source,+        cleanup_warning: None,+        publication: if stage.starts_with("commit_") {+            PublicationState::Unknown+        } else {+            PublicationState::NotAttempted+        },+    }+}+fn invalid(message: &'static str) -> Refusal {+    error(+        "preflight",+        io::Error::new(io::ErrorKind::InvalidInput, message),+    )+}++/// Publish a UTF-8 CSV produced by the separately verified BOM core.+/// Existing files are preserved unless `overwrite` is explicitly true.+pub fn publish_csv(+    destination: &Path,+    bytes: &[u8],+    overwrite: bool,+) -> Result<Publication, Refusal> {+    validate_size(bytes)?;+    if destination+        .extension()+        .and_then(|s| s.to_str())+        .map(str::to_ascii_lowercase)+        .as_deref()+        != Some("csv")+    {+        return Err(invalid("BOM output requires a .csv extension"));+    }+    std::str::from_utf8(bytes).map_err(|_| invalid("BOM output must be UTF-8"))?;+    publish_bytes(destination, bytes, overwrite)+}++/// This API accepts bytes, never an arbitrary on-disk staging path.+pub fn publish_bytes(+    destination: &Path,+    bytes: &[u8],+    overwrite: bool,+) -> Result<Publication, Refusal> {+    publish_with(destination, bytes, overwrite, |_, _| Ok(()))+}++#[derive(Clone, Copy, PartialEq, Eq)]+enum Checkpoint {+    BeforeWrite,+    BeforeCommit,+    AfterCommit,+}++fn publish_with(+    destination: &Path,+    bytes: &[u8],+    overwrite: bool,+    mut checkpoint: impl FnMut(Checkpoint, &Path) -> io::Result<()>,+) -> Result<Publication, Refusal> {+    validate_path(destination)?;+    validate_size(bytes)?;+    check_destination(destination, overwrite)?;+    let parent = destination+        .parent()+        .ok_or_else(|| invalid("output requires a parent"))?;+    fs::create_dir_all(parent).map_err(|e| error("create_parent", e))?;+    // Resolve the selected parent once before acquiring our private staging directory.+    // Ancestor changes by a hostile process are outside this path-based API's scope.+    let parent = fs::canonicalize(parent).map_err(|e| error("resolve_parent", e))?;+    let destination = parent.join(+        destination+            .file_name()+            .ok_or_else(|| invalid("missing filename"))?,+    );+    check_destination(&destination, overwrite)?;+    let mut staging = Staging::create(&parent).map_err(|e| error("create_staging", e))?;+    let sha256 = format!("{:x}", Sha256::digest(bytes));+    let before_commit = (|| -> Result<(), Refusal> {+        checkpoint(Checkpoint::BeforeWrite, &staging.file)+            .map_err(|e| error("write_staging", e))?;+        let mut file = OpenOptions::new()+            .write(true)+            .create_new(true)+            .open(&staging.file)+            .map_err(|e| error("open_staging", e))?;+        file.write_all(bytes)+            .map_err(|e| error("write_staging", e))?;+        file.sync_all().map_err(|e| error("sync_staging", e))?;+        // Windows cannot rename/remove an incompatible open file handle.+        drop(file);+        checkpoint(Checkpoint::BeforeCommit, &staging.file)+            .map_err(|e| error("before_commit", e))?;+        check_destination(&destination, overwrite)?;+        if overwrite {+            fs::rename(&staging.file, &destination).map_err(|e| error("commit_replace", e))?;+        } else {+            // An exists() + rename sequence would overwrite a concurrent writer.+            fs::hard_link(&staging.file, &destination).map_err(|e| error("commit_exclusive", e))?;+        }+        Ok(())+    })();+    if let Err(mut failure) = before_commit {+        failure.cleanup_warning = staging.cleanup().err().map(|e| e.to_string());+        return Err(failure);+    }+    // No fallible operation after this point is allowed to report a failed publish.+    let post_commit = checkpoint(Checkpoint::AfterCommit, &staging.file).err();+    let cleanup = staging.cleanup().err();+    let warnings = [post_commit, cleanup]+        .into_iter()+        .flatten()+        .map(|e| e.to_string())+        .collect::<Vec<_>>();+    Ok(Publication {+        output_path: destination,+        file_size: bytes.len(),+        sha256,+        published: true,+        overwrite,+        cleanup_warning: (!warnings.is_empty()).then(|| warnings.join("; ")),+    })+}++fn validate_path(destination: &Path) -> Result<(), Refusal> {+    if !destination.is_absolute()+        || destination.file_name().is_none()+        || destination+            .components()+            .any(|c| matches!(c, Component::ParentDir))+    {+        return Err(invalid(+            "output must be an absolute filename without parent traversal",+        ));+    }+    #[cfg(windows)]+    {+        use std::path::Prefix;+        // Device paths/alternate streams have different publication semantics.+        for component in destination.components() {+            match component {+                Component::Prefix(p)+                    if !matches!(p.kind(), Prefix::Disk(_) | Prefix::UNC(_, _)) =>+                {+                    return Err(invalid("device and verbatim output paths are unsupported"));+                }+                Component::Normal(name) => {+                    let text = name.to_string_lossy();+                    let stem = text+                        .split('.')+                        .next()+                        .unwrap_or("")+                        .trim_end_matches(' ')+                        .to_ascii_uppercase();+                    if text+                        .chars()+                        .any(|c| matches!(c, ':' | '<' | '>' | '"' | '|' | '?' | '*'))+                        || text.ends_with([' ', '.'])+                        || text.chars().any(|c| c < ' ')+                        || matches!(+                            stem.as_str(),+                            "CON" | "PRN" | "AUX" | "NUL" | "CONIN$" | "CONOUT$"+                        )+                        || ["COM", "LPT"].iter().any(|p| {+                            stem.strip_prefix(p).is_some_and(|s| {+                                matches!(+                                    s,+                                    "1" | "2"+                                        | "3"+                                        | "4"+                                        | "5"+                                        | "6"+                                        | "7"+                                        | "8"+                                        | "9"+                                        | "¹"+                                        | "²"+                                        | "³"+                                )+                            })+                        })+                    {+                        return Err(invalid("special Windows output names are unsupported"));+                    }+                }+                _ => {}+            }+        }+    }+    Ok(())+}+fn validate_size(bytes: &[u8]) -> Result<(), Refusal> {+    if bytes.is_empty() || bytes.len() > MAX_BYTES {+        Err(invalid("output must contain between 1 byte and 16 MiB"))+    } else {+        Ok(())+    }+}+fn check_destination(destination: &Path, overwrite: bool) -> Result<(), Refusal> {+    match fs::symlink_metadata(destination) {+        Ok(meta) => {+            if !meta.file_type().is_file() {+                return Err(invalid(+                    "destination must be a regular file, not a link or directory",+                ));+            }+            #[cfg(windows)]+            {+                use std::os::windows::fs::MetadataExt;+                if meta.file_attributes() & 0x400 != 0 {+                    return Err(invalid("destination reparse points are unsupported"));+                }+            }+            if !overwrite {+                return Err(error(+                    "destination_exists",+                    io::Error::new(io::ErrorKind::AlreadyExists, "destination exists"),+                ));+            }+            Ok(())+        }+        Err(e) if e.kind() == io::ErrorKind::NotFound => Ok(()),+        Err(e) => Err(error("inspect_destination", e)),+    }+}++struct Staging {+    directory: PathBuf,+    file: PathBuf,+}+impl Staging {+    fn create(parent: &Path) -> io::Result<Self> {+        for _ in 0..8 {+            let mut nonce = [0_u8; 16];+            getrandom::getrandom(&mut nonce).map_err(|e| io::Error::other(e.to_string()))?;+            let suffix = nonce.iter().map(|b| format!("{b:02x}")).collect::<String>();+            let directory = parent.join(format!(".adom-export-{suffix}"));+            #[cfg(unix)]+            let created = {+                use std::os::unix::fs::DirBuilderExt;+                let mut builder = fs::DirBuilder::new();+                builder.mode(0o700);+                builder.create(&directory)+            };+            #[cfg(windows)]+            let created = windows::create_private_directory(&directory);+            #[cfg(not(any(unix, windows)))]+            let created = Err(io::Error::new(+                io::ErrorKind::Unsupported,+                "private staging is unsupported on this platform",+            ));+            match created {+                Ok(()) => {+                    return Ok(Self {+                        file: directory.join("payload"),+                        directory,+                    })+                }+                Err(e) if e.kind() == io::ErrorKind::AlreadyExists => continue,+                Err(e) => return Err(e),+            }+        }+        Err(io::Error::new(+            io::ErrorKind::AlreadyExists,+            "staging reservation exhausted",+        ))+    }+    fn cleanup(&mut self) -> io::Result<()> {+        match fs::remove_file(&self.file) {+            Ok(()) => (),+            Err(e) if e.kind() == io::ErrorKind::NotFound => (),+            Err(e) => return Err(e),+        }+        // Never recursively delete an unexpected file created by another actor.+        match fs::remove_dir(&self.directory) {+            Ok(()) => Ok(()),+            Err(e) if e.kind() == io::ErrorKind::NotFound => Ok(()),+            Err(e) => Err(e),+        }+    }+}++#[cfg(test)]+mod tests;
native-rust/artifact-publication/src/tests.rsadded+335
@@ -0,0 +1,335 @@+use super::*;+use std::sync::{Arc, Barrier};++pub(super) struct Directory(pub(super) PathBuf);+impl Directory {+    pub(super) fn new() -> Self {+        let stage = Staging::create(&std::env::temp_dir()).unwrap();+        Self(stage.directory)+    }+    fn file(&self) -> PathBuf {+        self.0.join("bom.csv")+    }+    fn entries(&self) -> usize {+        fs::read_dir(&self.0).unwrap().count()+    }+}+impl Drop for Directory {+    fn drop(&mut self) {+        fs::remove_dir_all(&self.0).unwrap();+    }+}+fn injected() -> io::Error {+    io::Error::other("injected filesystem failure")+}++#[test]+fn new_csv_has_exact_bytes_size_hash_and_no_staging_left() {+    let dir = Directory::new();+    let bytes = b"part,quantity\r\nbolt,4\r\n";+    let result = publish_csv(&dir.file(), bytes, false).unwrap();+    assert!(result.published);+    assert!(!result.overwrite);+    assert_eq!(result.output_path, fs::canonicalize(&dir.file()).unwrap());+    assert_eq!(result.file_size, bytes.len());+    assert_eq!(result.sha256, format!("{:x}", Sha256::digest(bytes)));+    assert!(result.cleanup_warning.is_none());+    assert_eq!(fs::read(dir.file()).unwrap(), bytes);+    assert_eq!(dir.entries(), 1);+}++#[test]+fn existing_destination_requires_explicit_replace() {+    let dir = Directory::new();+    fs::write(dir.file(), b"original").unwrap();+    let err = publish_csv(&dir.file(), b"replacement", false).unwrap_err();+    assert_eq!(err.source.kind(), io::ErrorKind::AlreadyExists);+    assert_eq!(fs::read(dir.file()).unwrap(), b"original");+    assert_eq!(dir.entries(), 1);+    let result = publish_csv(&dir.file(), b"replacement", true).unwrap();+    assert!(result.published && result.overwrite);+    assert_eq!(fs::read(dir.file()).unwrap(), b"replacement");+    assert_eq!(dir.entries(), 1);+}++#[test]+fn replacement_does_not_mutate_another_hardlink_to_old_file() {+    let dir = Directory::new();+    fs::write(dir.file(), b"original").unwrap();+    let link = dir.0.join("old.csv");+    fs::hard_link(dir.file(), &link).unwrap();+    publish_csv(&dir.file(), b"replacement", true).unwrap();+    assert_eq!(fs::read(link).unwrap(), b"original");+    assert_eq!(fs::read(dir.file()).unwrap(), b"replacement");+}++#[test]+fn nonempty_and_size_bounds_apply_before_parent_creation() {+    let dir = Directory::new();+    let output = dir.0.join("absent/bom.csv");+    assert!(publish_csv(&output, b"", false).is_err());+    assert!(publish_csv(&output, &vec![b'x'; MAX_BYTES + 1], false).is_err());+    assert_eq!(dir.entries(), 0);+    publish_csv(&output, &vec![b'x'; MAX_BYTES], false).unwrap();+    assert_eq!(fs::metadata(output).unwrap().len(), MAX_BYTES as u64);+}++#[test]+fn csv_requires_utf8_and_matching_extension_without_filesystem_changes() {+    let dir = Directory::new();+    assert!(publish_csv(&dir.file(), &[0xff], false).is_err());+    assert!(publish_csv(&dir.0.join("part.step"), b"x", false).is_err());+    assert_eq!(dir.entries(), 0);+    publish_csv(+        &dir.0.join("pièce.CSV"),+        "名,数\r\n螺栓,3\r\n".as_bytes(),+        false,+    )+    .unwrap();+    assert_eq!(dir.entries(), 1);+}++#[test]+fn relative_directory_and_parent_traversal_destinations_are_refused() {+    let dir = Directory::new();+    assert!(publish_bytes(Path::new("bom.csv"), b"x", false).is_err());+    assert!(publish_bytes(&dir.0, b"x", true).is_err());+    assert!(publish_bytes(&dir.0.join("inner/../bom.csv"), b"x", true).is_err());+    assert_eq!(dir.entries(), 0);+}++#[test]+fn file_as_parent_is_refused_and_preserved() {+    let dir = Directory::new();+    let parent = dir.0.join("parent");+    fs::write(&parent, b"original").unwrap();+    assert!(publish_csv(&parent.join("bom.csv"), b"x", false).is_err());+    assert_eq!(fs::read(parent).unwrap(), b"original");+    assert_eq!(dir.entries(), 1);+}++#[test]+fn commit_errors_preserve_unknown_outcome_while_preflight_is_not_attempted() {+    let dir = Directory::new();+    let err = publish_with(&dir.file(), b"ours", false, |point, stage| {+        if point == Checkpoint::BeforeCommit {+            fs::remove_file(stage)?;+        }+        Ok(())+    })+    .unwrap_err();+    assert_eq!(err.stage, "commit_exclusive");+    assert_eq!(err.publication, PublicationState::Unknown);+    assert!(!dir.file().exists());+    assert_eq!(dir.entries(), 0);+    assert_eq!(+        publish_bytes(&dir.file(), b"", false)+            .unwrap_err()+            .publication,+        PublicationState::NotAttempted+    );+}++#[test]+fn concurrent_exclusive_writers_have_exactly_one_winner_and_whole_payload() {+    let dir = Directory::new();+    let gate = Arc::new(Barrier::new(8));+    let mut handles = vec![];+    for i in 0..8 {+        let output = dir.file();+        let gate = gate.clone();+        handles.push(std::thread::spawn(move || {+            let bytes = vec![b'0' + i; 65_537];+            let result = publish_with(&output, &bytes, false, |point, _| {+                if point == Checkpoint::BeforeCommit {+                    gate.wait();+                }+                Ok(())+            });+            (i, result)+        }));+    }+    let results = handles+        .into_iter()+        .map(|h| h.join().unwrap())+        .collect::<Vec<_>>();+    assert_eq!(results.iter().filter(|(_, r)| r.is_ok()).count(), 1);+    let winner = results.iter().find(|(_, r)| r.is_ok()).unwrap().0;+    assert_eq!(fs::read(dir.file()).unwrap(), vec![b'0' + winner; 65_537]);+    assert!(results+        .iter()+        .filter_map(|(_, r)| r.as_ref().err())+        .all(|e| e.source.kind() == io::ErrorKind::AlreadyExists));+    assert_eq!(dir.entries(), 1);+}++#[test]+fn late_destination_creation_cannot_be_overwritten_by_exclusive_publish() {+    let dir = Directory::new();+    let output = dir.file();+    let err = publish_with(&output, b"ours", false, |point, _| {+        if point == Checkpoint::BeforeCommit {+            fs::write(&output, b"other writer")?;+        }+        Ok(())+    })+    .unwrap_err();+    assert_eq!(err.source.kind(), io::ErrorKind::AlreadyExists);+    assert_eq!(fs::read(&output).unwrap(), b"other writer");+    assert_eq!(dir.entries(), 1);+}++#[test]+fn failure_before_write_or_after_full_staging_preserves_destination() {+    for fail_at in [Checkpoint::BeforeWrite, Checkpoint::BeforeCommit] {+        let dir = Directory::new();+        fs::write(dir.file(), b"original").unwrap();+        let error = publish_with(&dir.file(), b"ours", true, |point, _| {+            if point == fail_at {+                Err(injected())+            } else {+                Ok(())+            }+        })+        .unwrap_err();+        assert!(error.cleanup_warning.is_none());+        assert_eq!(fs::read(dir.file()).unwrap(), b"original");+        assert_eq!(dir.entries(), 1);+    }+}++#[test]+fn directory_created_at_destination_prevents_commit_and_is_not_removed() {+    let dir = Directory::new();+    let output = dir.file();+    assert!(publish_with(&output, b"ours", true, |point, _| {+        if point == Checkpoint::BeforeCommit {+            fs::create_dir(&output)?;+            fs::write(output.join("keep"), b"user")?;+        }+        Ok(())+    })+    .is_err());+    assert_eq!(fs::read(output.join("keep")).unwrap(), b"user");+    assert_eq!(dir.entries(), 1);+}++#[test]+fn post_commit_failure_is_success_with_warning_not_a_retryable_failure() {+    let dir = Directory::new();+    let result = publish_with(&dir.file(), b"committed", false, |point, _| {+        if point == Checkpoint::AfterCommit {+            Err(injected())+        } else {+            Ok(())+        }+    })+    .unwrap();+    assert!(result.published);+    assert!(result.cleanup_warning.unwrap().contains("injected"));+    assert_eq!(fs::read(dir.file()).unwrap(), b"committed");+    assert_eq!(dir.entries(), 1);+}++#[test]+fn unexpected_staging_child_is_retained_and_cannot_mask_success() {+    let dir = Directory::new();+    let mut other = None;+    let result = publish_with(&dir.file(), b"committed", false, |point, stage| {+        if point == Checkpoint::AfterCommit {+            let path = stage.parent().unwrap().join("unowned");+            fs::write(&path, b"keep")?;+            other = Some(path);+        }+        Ok(())+    })+    .unwrap();+    assert!(result.published && result.cleanup_warning.is_some());+    assert_eq!(fs::read(other.unwrap()).unwrap(), b"keep");+    assert_eq!(fs::read(dir.file()).unwrap(), b"committed");+}++#[test]+fn cleanup_failure_before_commit_is_reported_with_original_failure() {+    let dir = Directory::new();+    let mut other = None;+    let result = publish_with(&dir.file(), b"not committed", false, |point, stage| {+        if point == Checkpoint::BeforeCommit {+            let path = stage.parent().unwrap().join("unowned");+            fs::write(&path, b"keep")?;+            other = Some(path);+            return Err(injected());+        }+        Ok(())+    })+    .unwrap_err();+    assert_eq!(result.stage, "before_commit");+    assert!(result.cleanup_warning.is_some());+    assert!(!dir.file().exists());+    assert_eq!(fs::read(other.unwrap()).unwrap(), b"keep");+}++#[cfg(unix)]+#[test]+fn existing_and_dangling_symlinks_are_refused_without_following_them() {+    use std::os::unix::fs::symlink;+    let dir = Directory::new();+    let target = dir.0.join("target.csv");+    fs::write(&target, b"original").unwrap();+    symlink(&target, dir.file()).unwrap();+    assert!(publish_csv(&dir.file(), b"ours", true).is_err());+    assert_eq!(fs::read(&target).unwrap(), b"original");+    fs::remove_file(&target).unwrap();+    assert!(publish_csv(&dir.file(), b"ours", true).is_err());+    assert!(!target.exists());+    assert!(fs::symlink_metadata(dir.file()).unwrap().is_symlink());+}++#[cfg(windows)]+#[test]+fn windows_device_stream_and_ambiguous_names_are_refused_before_io() {+    for path in [+        r"C:\out\CON.csv",+        r"C:\out\NUL.csv",+        r"C:\out\COM1.csv",+        r"C:\out\CON .csv",+        r"C:\out\LPT1 .csv",+        r"C:\out\CONIN$",+        r"C:\out\CONOUT$",+        r"C:\out\LPT².csv",+        r"C:\out\file:stream.csv",+        r"C:\out\bom.csv.",+        r"\\?\C:\out\bom.csv",+        r"\\.\C:\out\bom.csv",+        r"C:\out\file?.csv",+        r"C:\out\file*.csv",+        r"C:\out\file|.csv",+        r"C:\out\file<.csv",+    ] {+        assert_eq!(+            publish_bytes(Path::new(path), b"x", false)+                .unwrap_err()+                .stage,+            "preflight",+            "{path}"+        );+    }+}++#[cfg(windows)]+#[test]+fn windows_readonly_destination_remains_intact_on_replace_failure() {+    let dir = Directory::new();+    fs::write(dir.file(), b"original").unwrap();+    let mut perms = fs::metadata(dir.file()).unwrap().permissions();+    perms.set_readonly(true);+    fs::set_permissions(dir.file(), perms).unwrap();+    let result = publish_csv(&dir.file(), b"ours", true);+    let actual = fs::read(dir.file()).unwrap();+    let mut perms = fs::metadata(dir.file()).unwrap().permissions();+    perms.set_readonly(false);+    fs::set_permissions(dir.file(), perms).unwrap();+    assert!(result.is_err());+    assert_eq!(actual, b"original");+    assert_eq!(dir.entries(), 1);+}
native-rust/artifact-publication/src/windows.rsadded+292
@@ -0,0 +1,292 @@+//! Atomically private Windows staging, adapted from the frozen r7 journal policy.+use std::ffi::c_void;+use std::fs::OpenOptions;+use std::io;+use std::mem::{size_of, zeroed};+use std::os::windows::{ffi::OsStrExt, fs::OpenOptionsExt, io::AsRawHandle};+use std::path::Path;+use std::ptr::null_mut;+use windows_sys::Win32::{+    Foundation::*,+    Security::{Authorization::*, *},+    Storage::FileSystem::*,+    System::Threading::*,+};+type Result<T> = io::Result<T>;+fn invalid(message: &str) -> io::Error {+    io::Error::new(io::ErrorKind::PermissionDenied, message)+}+fn unavailable(message: &str) -> io::Error {+    io::Error::new(io::ErrorKind::Unsupported, message)+}+fn last() -> io::Error {+    io::Error::last_os_error()+}+struct Local(*mut c_void);+impl Drop for Local {+    fn drop(&mut self) {+        unsafe {+            LocalFree(self.0);+        }+    }+}+struct Handle(HANDLE);+impl Drop for Handle {+    fn drop(&mut self) {+        unsafe {+            CloseHandle(self.0);+        }+    }+}++// TOKEN_USER contains an embedded SID pointer. usize storage gives its alignment+// and remains alive until every operation using that SID has finished.+struct User(Vec<usize>);+impl User {+    fn current() -> Result<Self> {+        unsafe {+            let mut thread_token = null_mut();+            if OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, 1, &mut thread_token) != 0 {+                let _token = Handle(thread_token);+                return Err(unavailable(+                    "Impersonating threads are unsupported for artifact staging.",+                ));+            }+            if GetLastError() != ERROR_NO_TOKEN {+                return Err(last());+            }+            let mut token = null_mut();+            if OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &mut token) == 0 {+                return Err(last());+            }+            let token = Handle(token);+            let mut needed = 0;+            GetTokenInformation(token.0, TokenUser, null_mut(), 0, &mut needed);+            if GetLastError() != ERROR_INSUFFICIENT_BUFFER+                || needed < size_of::<TOKEN_USER>() as u32+            {+                return Err(last());+            }+            let mut data = vec![0usize; (needed as usize).div_ceil(size_of::<usize>())];+            if GetTokenInformation(+                token.0,+                TokenUser,+                data.as_mut_ptr().cast(),+                needed,+                &mut needed,+            ) == 0+            {+                return Err(last());+            }+            let value = Self(data);+            if IsValidSid(value.sid()) == 0 {+                return Err(invalid("Process token user SID is invalid."));+            }+            // Rust creates the payload with the process default owner.+            // Reject alternate token owners (common in elevated tokens) rather+            // than changing the token, taking ownership, or repairing sidecars.+            let mut owner_needed = 0;+            GetTokenInformation(token.0, TokenOwner, null_mut(), 0, &mut owner_needed);+            if GetLastError() != ERROR_INSUFFICIENT_BUFFER+                || owner_needed < size_of::<TOKEN_OWNER>() as u32+            {+                return Err(last());+            }+            let mut owner_data = vec![0usize; (owner_needed as usize).div_ceil(size_of::<usize>())];+            if GetTokenInformation(+                token.0,+                TokenOwner,+                owner_data.as_mut_ptr().cast(),+                owner_needed,+                &mut owner_needed,+            ) == 0+            {+                return Err(last());+            }+            let owner = (*(owner_data.as_ptr().cast::<TOKEN_OWNER>())).Owner;+            if owner.is_null() || IsValidSid(owner) == 0 || EqualSid(owner, value.sid()) == 0 {+                return Err(unavailable("The process default object owner must be its current user; elevated alternate-owner tokens are unsupported."));+            }+            Ok(value)+        }+    }+    fn sid(&self) -> PSID {+        unsafe { (*(self.0.as_ptr().cast::<TOKEN_USER>())).User.Sid }+    }+    fn text(&self) -> Result<String> {+        let mut string = null_mut();+        unsafe {+            if ConvertSidToStringSidW(self.sid(), &mut string) == 0 {+                return Err(last());+            }+            let owned = Local(string.cast());+            let mut len = 0;+            while *string.add(len) != 0 {+                len += 1;+            }+            let result = String::from_utf16(std::slice::from_raw_parts(string, len))+                .map_err(|_| invalid("Process SID encoding is invalid."));+            drop(owned);+            result+        }+    }+}++fn descriptor(sddl: &str) -> Result<Local> {+    let sddl: Vec<u16> = sddl.encode_utf16().chain([0]).collect();+    let mut descriptor = null_mut();+    unsafe {+        if ConvertStringSecurityDescriptorToSecurityDescriptorW(+            sddl.as_ptr(),+            SDDL_REVISION_1,+            &mut descriptor,+            null_mut(),+        ) == 0+        {+            return Err(last());+        }+    }+    Ok(Local(descriptor))+}+fn private_descriptor(directory: bool) -> Result<Local> {+    let user = User::current()?.text()?;+    descriptor(&format!(+        "O:{user}D:P(A;{};FA;;;{user})",+        if directory { "OICI" } else { "" }+    ))+}+fn attributes(descriptor: &Local) -> SECURITY_ATTRIBUTES {+    SECURITY_ATTRIBUTES {+        nLength: size_of::<SECURITY_ATTRIBUTES>() as u32,+        lpSecurityDescriptor: descriptor.0,+        bInheritHandle: 0,+    }+}++pub(super) fn create_private_directory(path: &Path) -> Result<()> {+    let descriptor = private_descriptor(true)?;+    create_directory_with_descriptor(path, &descriptor)?;+    if let Err(e) = verify_private_directory(path) {+        // Only the just-created empty directory can be removed; never repair ACLs.+        return match std::fs::remove_dir(path) {+            Ok(()) => Err(e),+            Err(cleanup) => Err(io::Error::other(format!(+                "{e}; owned empty staging cleanup failed at {}: {cleanup}",+                path.display()+            ))),+        };+    }+    Ok(())+}+fn create_directory_with_descriptor(path: &Path, descriptor: &Local) -> Result<()> {+    let mut name = path.as_os_str().encode_wide().collect::<Vec<_>>();+    if name.contains(&0) {+        return Err(invalid("NUL in staging path"));+    }+    name.push(0);+    let security = attributes(descriptor);+    if unsafe { CreateDirectoryW(name.as_ptr(), &security) } == 0 {+        return Err(last());+    }+    Ok(())+}++pub(super) fn verify_private_directory(path: &Path) -> Result<()> {+    let file = OpenOptions::new()+        .access_mode(READ_CONTROL | FILE_READ_ATTRIBUTES)+        .share_mode(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE)+        .custom_flags(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS)+        .open(path)?;+    let mut info: BY_HANDLE_FILE_INFORMATION = unsafe { zeroed() };+    if unsafe { GetFileInformationByHandle(file.as_raw_handle(), &mut info) } == 0 {+        return Err(last());+    }+    if info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT != 0+        || info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == 0+    {+        return Err(invalid("staging must be a plain directory"));+    }+    let user = User::current()?;+    let mut owner = null_mut();+    let mut dacl = null_mut();+    let mut raw = null_mut();+    unsafe {+        let status = GetSecurityInfo(+            file.as_raw_handle(),+            SE_FILE_OBJECT,+            OWNER_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,+            &mut owner,+            null_mut(),+            &mut dacl,+            null_mut(),+            &mut raw,+        );+        if status != ERROR_SUCCESS {+            return Err(io::Error::from_raw_os_error(status as i32));+        }+        let descriptor = Local(raw);+        let mut control = 0;+        let mut revision = 0;+        if IsValidSecurityDescriptor(descriptor.0) == 0+            || GetSecurityDescriptorControl(descriptor.0, &mut control, &mut revision) == 0+            || owner.is_null()+            || IsValidSid(owner) == 0+            || EqualSid(owner, user.sid()) == 0+            || control & SE_DACL_PRESENT == 0+            || control & SE_DACL_PROTECTED == 0+            || dacl.is_null()+            || IsValidAcl(dacl) == 0+            || (*dacl).AceCount != 1+        {+            return Err(invalid(+                "staging requires a protected current-user-only DACL",+            ));+        }+        let mut pointer = null_mut();+        if GetAce(dacl, 0, &mut pointer) == 0 {+            return Err(last());+        }+        let header = &*pointer.cast::<ACE_HEADER>();+        if header.AceType != 0 || (header.AceSize as usize) < size_of::<ACCESS_ALLOWED_ACE>() {+            return Err(invalid("unsupported staging ACE"));+        }+        let allow = &*pointer.cast::<ACCESS_ALLOWED_ACE>();+        let sid: PSID = (&allow.SidStart as *const u32).cast_mut().cast();+        let sid_bytes = header.AceSize as usize - 8;+        if sid_bytes < 8+            || 8 + 4 * (*sid.cast::<u8>().add(1) as usize) > sid_bytes+            || IsValidSid(sid) == 0+            || EqualSid(sid, user.sid()) == 0+            || header.AceFlags != (OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE) as u8+            || allow.Mask != FILE_ALL_ACCESS+        {+            return Err(invalid(+                "staging ACE must give only the current user inheritable full control",+            ));+        }+    }+    Ok(())+}++#[cfg(test)]+#[test]+fn protected_staging_does_not_inherit_a_shared_parent_dacl() {+    let root = super::tests::Directory::new();+    let user = User::current().unwrap().text().unwrap();+    let shared = root.0.join("shared");+    let descriptor =+        descriptor(&format!("O:{user}D:P(A;OICI;FA;;;WD)(A;OICI;FA;;;{user})")).unwrap();+    create_directory_with_descriptor(&shared, &descriptor).unwrap();+    assert!(verify_private_directory(&shared).is_err());+    let mut private = super::Staging::create(&shared).unwrap();+    verify_private_directory(&private.directory).unwrap();+    std::fs::write(&private.file, b"private").unwrap();+    private.cleanup().unwrap();+    let output = shared.join("bom.csv");+    assert!(+        super::publish_csv(&output, b"part,quantity\r\nbolt,4\r\n", false)+            .unwrap()+            .published+    );+    assert_eq!(std::fs::read_dir(&shared).unwrap().count(), 1);+}
native-rust/bom-core/Cargo.tomladded+11
@@ -0,0 +1,11 @@+[package]+name = "fusion-bom-core"+version = "0.1.0"+edition = "2021"+license = "MIT"+description = "Pure Rust BOM calculation over an explicitly witnessed assembly snapshot"++[dependencies]+serde = { version = "1", features = ["derive"] }+serde_json = { version = "1", features = ["preserve_order", "float_roundtrip"] }+thiserror = "1"
native-rust/bom-core/PORT-MAPPING.mdadded+86
@@ -0,0 +1,86 @@+# Legacy-to-Rust BOM mapping++Legacy reference root:+`exploded-preview-preparation/runtime-dev9-build-r1/source/addin/AdomBridge/commands/mechanical/`++| Legacy source | SHA-256 |+|---|---|+| `bill_of_materials.py` | `960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0` |+| `assembly_state.py` | `eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e` |+| `configurations.py` | `f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0` |++The files were read as reference text; no legacy Python was executed.++| Legacy responsibility | Rust implementation | Status and boundary |+|---|---|---|+| `generate`: `parts` keyed by `identity(comp)` | `engine::Graph` canonical-ID/alias index and `Run::purchasing` | Implemented. SDK equality and alias proof remain native adapter duties. |+| Metadata JSON attributes | `model::Metadata::from_attributes` | Implemented for supplier, supplier part number, URL, file, SHA, purchase/exclude flags, raw attributes and material. |+| Purchasing recursion and root | `Run::purchasing` | Implemented, preserves pre-order, quantities, parent paths, depths, direct body/child counts and references. |+| Purchased collapse/explode | `Run::purchasing` | Implemented. A collapsed row requires explicit native subtree properties. |+| BOM exclusions | `Run::purchasing`, independent `physical_walk` | Implemented. Excluded descendants stay out of purchasing; physical mass remains. |+| Timeline/configuration suppression | `Run::suppression` | Implemented: timeline first; active effective suppression; entity ID plus optional context match. |+| Visibility | Stored on occurrence, deliberately not an inclusion filter | Preserved: hidden unsuppressed bodies remain in both applicable inventories. |+| Physical recursion | `Run::physical_walk` | Implemented using context-specific direct bodies, including root, independent of purchase flags/exclusions. |+| Shared 20,000 visits / depth 100 / ancestry cycle guard | `Limits`, `Run::visit` | Implemented; budget is shared between both traversals. Limits can only tighten defaults. |+| High native physical properties / cm³ conversion | `PhysicalProperties` and explicit body/subtree inputs | Arithmetic and validation implemented. Native measurements remain unimplemented adapter work. |+| Strict configuration snapshot | `ConfigurationWitness::validate` | Complete/source/scope checks and table address matrix checks implemented. Native table acquisition and complete numeric/property source validation remain adapter dependencies. |+| Configuration provenance | `ConfigurationProvenance` | Implemented; document/revision and active ordinary table/row preserved in CSV. |+| CSV flat/structured formatting | `csv_bytes` | Implemented. Exact column order, row meaning, quoting and CRLF preserved. |+| `bom` native handler and `target()` | None | Not ported/integrated by this crate. |+| `bom_export` destination checks / staging / `publish_staged` | None | Not ported. The API returns bytes only and performs no filesystem operation. |++## Deliberate hardening and representation differences++1. Inputs are typed graph data, not Fusion SDK objects. References retain the+   legacy token/path fields; tokens are opaque and never used to group definitions.+2. Recognized attribute types are strict strings/Booleans. Legacy `json.loads`+   could accept a malformed non-Boolean purchase flag and then use its truthiness.+   Rust rejects those values and rejects disagreement between decoded attributes+   and duplicated typed metadata fields.+3. Finite, nonnegative mass/volume and finite totals are required. Failed source+   or configuration reads cannot masquerade as `None` suppression or zero mass.+   `timeline_suppressed: None` specifically means a successfully observed absence+   of a timeline object.+4. The input graph requires unique occurrence IDs/paths, exactly one parent,+   complete reachability, matching reference targets/paths and direct-body counts.+   Malformed graph data is refused even in branches purchasing might collapse or+   exclude. These safeguards are stricter than the legacy on-demand traversal.+5. Additional limits: 20,000 definition/alias identities and occurrence nodes,+   20,000 direct bodies per definition, 200,000 physical body instances, 32 MiB+   serialized input/output and 16 MiB CSV. Repeated metadata is charged before+   cloning output rows; output size is also checked exactly after calculation.+   Conservative row overhead can reject before the exact byte ceiling.+6. Configuration tables require a complete, nonduplicated row×column cell matrix,+   matching kinds/scopes, a consistent ordinary active row, and at most one+   reserved test row. Configured inserted occurrences and generated configuration+   documents are still explicitly unsupported, even if `complete` was mislabeled.+   Parameter expressions are retained only as address witnesses; the adapter must+   separately validate the legacy full parameter numeric/unit readback contract.+   Occurrence suppression sources additionally reconcile exact SDK type,+   component owner scope, canonical owner identity, and observed entity/context+   witnesses. Proven owner aliases and absent-context fanout remain supported.+   Relabeling an observed occurrence identity as another SDK type is refused.+   Design-owned sources must be UserParameters of the distinct Design SDK+   identity in the source witness, not merely a matching document ID.+7. CSV prefixes formula-like textual cells with an apostrophe. In addition to+   legacy leading `=`, `+`, `-`, `@`, leading whitespace/BOM bypasses and leading+   control characters are neutralized. Numeric fields remain numbers; names with+   ordinary internal punctuation are unchanged. Float spelling follows Rust's+   shortest-roundtrip serializer and may differ from Python in exponent notation.+8. No string or object in a snapshot proves live SDK validity. The library does+   not establish native parity, archive roundtrip, dispatcher authorization,+   operation-journal semantics, successful publication or release readiness.++## Independent fixture arithmetic++The main fixture has root mass 1 kg, two purchased kits each containing a 2 kg+direct body plus two 1.5 kg bolts, an excluded housing of 4 kg containing another+1.5 kg bolt, one suppressed kit, and one hidden unsuppressed 1.5 kg bolt.++Physical mass is `1 + 2×(2 + 1.5 + 1.5) + (4 + 1.5) + 1.5 = 18 kg`, with ten+direct-body instances. Collapsed purchasing has root×1, kit×2, bolt×1. Exploded+purchasing has root×1, kit×2, bolt×5, with kit unit mass changing from 5 kg subtree+to 2 kg direct bodies. Both physical results remain 18 kg. Additional fixtures+separate equal metadata/tokens from definition identity, reuse proven aliases,+override physical properties per occurrence context, and exercise source and+configuration failure boundaries.
native-rust/bom-core/README.mdadded+88
@@ -0,0 +1,88 @@+# Rust BOM core++This standalone crate ports the BOM business logic into Rust. It calculates flat+and structured BOMs from a typed assembly snapshot and generates CSV bytes.+There is no Python, SDK call, host operation, screenshot, runtime integration, or+file publication. **This is a tested pure computation port, not a completed+native Fusion BOM feature or evidence of SDK parity.**++`generate(&AssemblySnapshot, Options)` returns both purchasing rows and structured+instances. `csv_bytes(&Bom, CsvMode)` returns bounded UTF-8 CSV. The caller supplies+an already-allocated trusted adapter snapshot; this is not an untrusted JSON/HTTP+endpoint. A future transport adapter must enforce its wire budget before parsing.++The standalone workspace resolves dependencies offline from the existing+`../../rust-native-migration-r7/vendor` directory. No r7 source or dependency was+changed. `Cargo.lock` fixes the selected versions.++```+/home/adom/.cargo/bin/cargo test --offline+/home/adom/.cargo/bin/cargo fmt --all --check+```++The source currently has 29 integration tests. Fixtures have hand-computed+expected quantities and masses, exact CSV expectations, and adversarial+identity/provenance/budget cases. See `PORT-MAPPING.md` for preserved behavior,+intentional hardening, and the native work still required.++## Input and identity contracts++Component IDs are canonical session-local identities supplied by the native+adapter after SDK object-equality checks. Optional aliases are additional wrapper+identities already proven equivalent by that adapter. The calculator never+infers equivalence from names, part numbers, metadata, or entity tokens. Two+definitions with the same token text and part number remain separate unless an+adapter has explicitly supplied a nonambiguous alias mapping.++Occurrence nodes describe actual physical instances with unique IDs and full+paths, one containment parent, and context-specific direct-body observations.+Definitions may be reused; occurrence nodes may not. Root bodies are supplied on+the root component. Per-part unit properties use definition bodies; complete+physical totals use each occurrence's actual direct bodies. These are deliberately+different quantities and need not equal `quantity * unitMass` when context data+differs. A collapsed purchased row requires the separately observed native+component-subtree physical properties; the calculator does not invent those by+summing purchasing rows.++Every entity reference and configuration witness must match the snapshot target+and revision. `complete`, read errors, accuracy and supported configuration scope+are checked. They remain **claims supplied by the trusted adapter**, not evidence+that the pure crate contacted Fusion or verified an SDK object. Output+`complete: true` means complete computation over the supplied validated snapshot.++## Included behavior++- Definition-based flat quantities and pre-order structured instance rows,+  including containers and the root.+- Purchased collapse and `explodePurchased`, with native subtree unit properties.+- BOM exclusions prune purchasing subtrees while physical totals still include+  their unsuppressed bodies.+- Timeline suppression and effective suppression in the current ordinary+  configuration row omit physical instances. Suppression source matching honors+  exact native entity and optional occurrence-context identity.+- Visibility does not suppress parts or physical mass. Inactive/test rows do not+  change the active BOM. Non-occurrence suppression sources are reported but do+  not become occurrence filters; their actual geometry effect must already be+  present in native body observations.+- Supplier/source-file/hash/material metadata, target and current-row provenance.+  Supplier metadata does not certify modeled material density.+- High-accuracy mass in kg and volume in mm³, including a checked cm³-to-mm³+  adapter conversion helper and rejection of invalid or overflowing totals.+- Exact legacy CSV column order, structured quantity `1`, Python-compatible+  Boolean spelling, CRLF records, quoting, Unicode and formula neutralization.++## Work required before runtime acceptance++The native Rust/C++ adapter still must collect fresh data on Fusion's main thread,+resolve wrappers by SDK equality, obtain accurate body and subtree properties,+validate configuration parameter units/value types and source ownership, and+enforce document/revision guards. Full configuration snapshot collection is not+implemented here. Generated single-configuration documents, externally configured+inserted occurrences, custom/theme tables and hierarchical rows remain refused+for complete BOM generation, matching the legacy supported scope.++The `bom`/`bom_export` dispatch handlers, live fixtures, McMaster import/provenance+handoff, durable export admission, filesystem destination rules, same-filesystem+staging, atomic publication, overwrite behavior, rollback and cleanup warnings+are not integrated. CSV bytes alone do not establish export success. None of the+29 tests is a live SDK, archive, bridge transport, or public-release test.
native-rust/bom-core/SOURCE-CHECKSUMS.sha256added+13
@@ -0,0 +1,13 @@+348e3dc7568cfb4cbf881bf3f0ccf686b37632495c773d4f0702407180a33c14  Cargo.toml+bb6a5e3001566063c4dad963a49fe585d4c66e131f37939986b6827eedba0882  Cargo.lock+db73996090de82f3006db0819263c99fdb2ae38d31afeea72f010aa414201a78  .cargo/config.toml+f7665b03dfbc651306482757b77308591a6a85a4a4363fc080cb2c86659f9e76  README.md+9b1beb410dab4b12100a5d9ab09709bbca0150e2224e8c3c0e02f8d42ff5293b  PORT-MAPPING.md+600314246e321b0af5d3084363b592f551b65ff21b10904980af35d08a4babc8  src/lib.rs+4b30580a7fc7dd9160ab54f6940efd530eef9c6cc61732407d4331bd2f75343b  src/model.rs+91363ffaa71324facf53920b35d5d59f3d9d3c842888ed9cd2af883e91e8fa6d  src/configuration.rs+b5b9173c80f1675a089dac56fe7dc733a64656c7cf6aec62f413cc84c92ead17  src/engine.rs+1d01f830d358ef7f4a33dfec2c37f0eac31a8248bd0e5b13c95743cb0da5aa6d  src/csv.rs+e10309eeecd1f1b7953e30a6a11a7f2983381b5f8e9dc8af2a9107ba9ed676d0  tests/bom.rs+8f9e37017154ffb5c0188240e4ff09283ef24fd98cd7291c5ebce1e57073c0eb  evidence/RESULTS.md+c7737336855cc3cdf42767132659a8a6b1c06b13df616f673b9a5a2ee13947ec  evidence/cargo-test-final.log
native-rust/bom-core/src/configuration.rsadded+283
@@ -0,0 +1,283 @@+use crate::{Error, Result, SourceLink, Target};+use serde::{Deserialize, Serialize};+use std::collections::{BTreeMap, BTreeSet};++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct ConfigurationWitness {+    pub target: Target,+    pub configured: bool,+    pub is_configuration: bool,+    pub configuration_row_id: Option<String>,+    pub complete: bool,+    pub unsupported: Vec<String>,+    pub read_errors: Vec<String>,+    /// Nonempty means externally configured inserted occurrences; unsupported+    /// in the legacy complete-BOM contract and deliberately still refused.+    pub configured_occurrences: Vec<ConfiguredOccurrence>,+    pub table: Option<ConfigurationTable>,+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct ConfiguredOccurrence {+    pub occurrence_id: String,+    pub path: String,+    pub table_id: String,+    pub row_id: String,+    pub row_name: String,+    pub source_file_id: String,+    pub source_version: u64,+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct ConfigurationTable {+    pub id: String,+    pub active_row_id: String,+    pub active_row_name: String,+    pub has_custom_columns: bool,+    pub theme_table_ids: Vec<String>,+    /// Includes the optional reserved test row; it cannot be the active row.+    pub rows: Vec<ConfigurationRow>,+    pub columns: Vec<ConfigurationColumn>,+    pub cells: Vec<ConfigurationCell>,+}++#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]+pub enum RowScope {+    #[serde(rename = "ordinary")]+    Ordinary,+    #[serde(rename = "test")]+    Test,+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct ConfigurationRow {+    pub id: String,+    pub name: String,+    pub scope: RowScope,+    pub parent_id: Option<String>,+    pub child_ids: Vec<String>,+}++#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]+pub enum ColumnKind {+    Parameter,+    Suppress,+    Visibility,+    Property,+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct ConfigurationColumn {+    pub id: String,+    pub kind: ColumnKind,+    pub source: Option<SourceLink>,+}++#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]+#[serde(tag = "type")]+pub enum CellValue {+    ConfigurationSuppressCell {+        #[serde(rename = "isSuppressed")]+        is_suppressed: bool,+        #[serde(rename = "isEffectivelySuppressed")]+        is_effectively_suppressed: bool,+    },+    ConfigurationVisibilityCell {+        #[serde(rename = "isVisible")]+        is_visible: bool,+    },+    /// The native adapter's complete configuration witness must separately+    /// validate parameter value types/units. BOM only needs its cell address.+    ConfigurationParameterCell {+        expression: String,+    },+    ConfigurationPropertyCell {+        value: String,+    },+}++impl CellValue {+    fn kind(&self) -> ColumnKind {+        match self {+            Self::ConfigurationSuppressCell { .. } => ColumnKind::Suppress,+            Self::ConfigurationVisibilityCell { .. } => ColumnKind::Visibility,+            Self::ConfigurationParameterCell { .. } => ColumnKind::Parameter,+            Self::ConfigurationPropertyCell { .. } => ColumnKind::Property,+        }+    }+}++#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]+#[serde(rename_all = "camelCase")]+pub struct ConfigurationCell {+    pub row_id: String,+    pub column_id: String,+    pub scope: RowScope,+    #[serde(flatten)]+    pub value: CellValue,+}++#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]+#[serde(rename_all = "camelCase")]+pub struct ConfigurationProvenance {+    pub configured: bool,+    pub is_configuration: bool,+    pub table_id: Option<String>,+    pub row_id: Option<String>,+    pub row_name: Option<String>,+    pub scope: String,+    pub graph_complete: bool,+}++pub(crate) struct ConfigurationContext<'a> {+    pub provenance: ConfigurationProvenance,+    pub suppression_cells: Vec<ConfigurationCell>,+    pub suppressed_sources: Vec<&'a SourceLink>,+}++impl ConfigurationWitness {+    pub(crate) fn validate(&self, target: &Target) -> Result<ConfigurationContext<'_>> {+        let unsupported = |message: &str| Error::new("configuration_scope_unsupported", message);+        let invalid = |message: &str| Error::new("configuration_read_failed", message);+        if &self.target != target {+            return Err(Error::new(+                "configuration_source_mismatch",+                "Configuration witness belongs to another target/revision",+            ));+        }+        if !self.complete+            || !self.unsupported.is_empty()+            || !self.read_errors.is_empty()+            || self.is_configuration+            || !self.configured_occurrences.is_empty()+        {+            return Err(unsupported(+                "A complete supported configuration witness is required for BOM generation",+            ));+        }+        if self+            .configuration_row_id+            .as_ref()+            .is_some_and(|id| !id.is_empty())+        {+            return Err(invalid("Native configuration flag and row ID disagree"));+        }+        if self.configured != self.table.is_some() {+            return Err(invalid(+                "Configured-design flag and table inventory disagree",+            ));+        }+        let mut context = ConfigurationContext {+            provenance: ConfigurationProvenance {+                configured: self.configured,+                is_configuration: false,+                table_id: None,+                row_id: None,+                row_name: None,+                scope: "current active configuration only".into(),+                graph_complete: true,+            },+            suppression_cells: Vec::new(),+            suppressed_sources: Vec::new(),+        };+        let Some(table) = &self.table else {+            return Ok(context);+        };+        if table.has_custom_columns || !table.theme_table_ids.is_empty() {+            return Err(unsupported(+                "Custom columns and theme-table contents remain unsupported",+            ));+        }+        if table.rows.is_empty()+            || table.rows.len() > 128+            || table.columns.len() > 128+            || table.rows.len().saturating_mul(table.columns.len()) > 4096+            || table.cells.len() > 4096+        {+            return Err(Error::new(+                "configuration_budget",+                "Configuration inventory exceeds its budget",+            ));+        }+        if table.id.is_empty() {+            return Err(invalid("Configuration table ID is missing"));+        }+        let mut rows = BTreeMap::new();+        for row in &table.rows {+            if row.id.is_empty() || rows.insert(row.id.as_str(), row).is_some() {+                return Err(invalid("Missing or duplicate configuration row IDs"));+            }+            if row.parent_id.is_some() || !row.child_ids.is_empty() {+                return Err(unsupported(+                    "Hierarchical configuration rows remain unsupported",+                ));+            }+        }+        if rows+            .values()+            .filter(|row| row.scope == RowScope::Test)+            .count()+            > 1+        {+            return Err(invalid("Multiple reserved test rows"));+        }+        let active = rows+            .get(table.active_row_id.as_str())+            .ok_or_else(|| invalid("Active row is outside ordinary rows"))?;+        if active.scope != RowScope::Ordinary || active.name != table.active_row_name {+            return Err(invalid("Active row identity/name is inconsistent"));+        }+        let mut columns = BTreeMap::new();+        for column in &table.columns {+            if column.id.is_empty() || columns.insert(column.id.as_str(), column).is_some() {+                return Err(invalid("Missing or duplicate configuration column IDs"));+            }+            if column.kind != ColumnKind::Property && column.source.is_none() {+                return Err(invalid(+                    "Configuration controlled-source witness is missing",+                ));+            }+        }+        let mut addresses = BTreeSet::new();+        for cell in &table.cells {+            let row = rows+                .get(cell.row_id.as_str())+                .ok_or_else(|| invalid("Cell row is outside table"))?;+            let column = columns+                .get(cell.column_id.as_str())+                .ok_or_else(|| invalid("Cell column is outside table"))?;+            if !addresses.insert((&cell.row_id, &cell.column_id))+                || cell.scope != row.scope+                || cell.value.kind() != column.kind+            {+                return Err(invalid("Cell address, scope, or type is inconsistent"));+            }+            if cell.row_id == table.active_row_id {+                if let CellValue::ConfigurationSuppressCell {+                    is_effectively_suppressed,+                    ..+                } = cell.value+                {+                    context.suppression_cells.push(cell.clone());+                    if is_effectively_suppressed {+                        context+                            .suppressed_sources+                            .push(column.source.as_ref().expect("source checked"));+                    }+                }+            }+        }+        if addresses.len() != rows.len() * columns.len() {+            return Err(invalid("Configuration cell inventory is incomplete"));+        }+        context.provenance.table_id = Some(table.id.clone());+        context.provenance.row_id = Some(table.active_row_id.clone());+        context.provenance.row_name = Some(table.active_row_name.clone());+        Ok(context)+    }+}
native-rust/bom-core/src/csv.rsadded+190
@@ -0,0 +1,190 @@+use crate::{Bom, Error, Metadata, Result, MAX_CSV_BYTES};++#[derive(Debug, Clone, Copy, PartialEq, Eq)]+pub enum CsvMode {+    Flat,+    Structured,+}++enum Cell<'a> {+    Text(&'a str),+    Number(String),+    Boolean(bool),+}++/// Produce bounded UTF-8 RFC-4180-style CSV bytes with CRLF records. No file is+/// opened or published. Destination checks/atomic publication belong to the+/// future Rust runtime adapter.+pub fn csv_bytes(bom: &Bom, mode: CsvMode) -> Result<Vec<u8>> {+    if !bom.complete || !bom.configuration.graph_complete {+        return Err(Error::new(+            "source_incomplete",+            "Cannot export an incomplete BOM",+        ));+    }+    let mut output = Vec::new();+    let mut keys = match mode {+        CsvMode::Flat => vec![+            "componentId",+            "partNumber",+            "name",+            "description",+            "quantity",+            "supplier",+            "supplierPartNumber",+            "sourceUrl",+            "sha256",+            "unitMass",+            "unitVolume",+            "scope",+        ],+        CsvMode::Structured => vec![+            "path",+            "parentPath",+            "depth",+            "componentId",+            "name",+            "partNumber",+            "description",+            "quantity",+            "bodyCount",+            "childCount",+            "asPurchased",+            "supplier",+            "supplierPartNumber",+            "sourceUrl",+            "sha256",+        ],+    };+    keys.extend([+        "documentId",+        "revision",+        "configurationTableId",+        "configurationRowId",+        "configurationRowName",+    ]);+    record(&mut output, keys.into_iter().map(Cell::Text).collect())?;+    let context = || {+        vec![+            Cell::Text(&bom.target.document_id),+            Cell::Text(&bom.target.revision),+            Cell::Text(bom.configuration.table_id.as_deref().unwrap_or("")),+            Cell::Text(bom.configuration.row_id.as_deref().unwrap_or("")),+            Cell::Text(bom.configuration.row_name.as_deref().unwrap_or("")),+        ]+    };+    fn supplier(metadata: &Metadata) -> Vec<Cell<'_>> {+        vec![+            Cell::Text(metadata.supplier.as_deref().unwrap_or("")),+            Cell::Text(metadata.supplier_part_number.as_deref().unwrap_or("")),+            Cell::Text(metadata.source_url.as_deref().unwrap_or("")),+            Cell::Text(metadata.sha256.as_deref().unwrap_or("")),+        ]+    }+    match mode {+        CsvMode::Flat => {+            for row in &bom.parts {+                if !row.unit_mass.is_finite()+                    || !row.unit_volume.is_finite()+                    || row.unit_mass < 0.0+                    || row.unit_volume < 0.0+                {+                    return Err(Error::new(+                        "invalid_physical_properties",+                        "CSV mass/volume must be finite and nonnegative",+                    ));+                }+                let mut cells = vec![+                    Cell::Text(&row.component_id),+                    Cell::Text(&row.metadata.part_number),+                    Cell::Text(&row.metadata.name),+                    Cell::Text(&row.metadata.description),+                    Cell::Number(row.quantity.to_string()),+                ];+                cells.extend(supplier(&row.metadata));+                cells.extend([+                    Cell::Number(serde_json::to_string(&row.unit_mass).expect("finite float")),+                    Cell::Number(serde_json::to_string(&row.unit_volume).expect("finite float")),+                    Cell::Text(&row.scope),+                ]);+                cells.extend(context());+                record(&mut output, cells)?;+            }+        }+        CsvMode::Structured => {+            for row in &bom.instances {+                let mut cells = vec![+                    Cell::Text(&row.path),+                    Cell::Text(row.parent_path.as_deref().unwrap_or("")),+                    Cell::Number(row.depth.to_string()),+                    Cell::Text(&row.component_id),+                    Cell::Text(&row.metadata.name),+                    Cell::Text(&row.metadata.part_number),+                    Cell::Text(&row.metadata.description),+                    Cell::Number("1".into()),+                    Cell::Number(row.body_count.to_string()),+                    Cell::Number(row.child_count.to_string()),+                    Cell::Boolean(row.as_purchased),+                ];+                cells.extend(supplier(&row.metadata));+                cells.extend(context());+                record(&mut output, cells)?;+            }+        }+    }+    Ok(output)+}++fn record(output: &mut Vec<u8>, cells: Vec<Cell<'_>>) -> Result<()> {+    for (index, cell) in cells.into_iter().enumerate() {+        if index > 0 {+            append(output, b",")?;+        }+        match cell {+            Cell::Text(value) => {+                // Legacy prefixes '=+-@'. Also neutralize whitespace/BOM+                // bypasses and leading tab/newline spreadsheet control cells.+                let trimmed = value.trim_start_matches(|character: char| {+                    character.is_whitespace() || character == '\u{feff}'+                });+                let formula = trimmed.starts_with(['=', '+', '-', '@'])+                    || value.starts_with(char::is_control);+                field(output, value, formula)?;+            }+            Cell::Number(value) => field(output, &value, false)?,+            Cell::Boolean(value) => field(output, if value { "True" } else { "False" }, false)?,+        }+    }+    append(output, b"\r\n")+}++fn field(output: &mut Vec<u8>, value: &str, prefix_apostrophe: bool) -> Result<()> {+    let quote = value+        .bytes()+        .any(|byte| [b',', b'"', b'\r', b'\n'].contains(&byte));+    if quote {+        append(output, b"\"")?;+    }+    if prefix_apostrophe {+        append(output, b"'")?;+    }+    let mut remainder = value;+    while let Some(index) = remainder.find('"') {+        append(output, &remainder.as_bytes()[..index])?;+        append(output, b"\"\"")?;+        remainder = &remainder[index + 1..];+    }+    append(output, remainder.as_bytes())?;+    if quote {+        append(output, b"\"")?;+    }+    Ok(())+}++fn append(output: &mut Vec<u8>, bytes: &[u8]) -> Result<()> {+    if bytes.len() > MAX_CSV_BYTES.saturating_sub(output.len()) {+        return Err(Error::new("bom_budget", "BOM CSV exceeds its byte budget"));+    }+    output.extend_from_slice(bytes);+    Ok(())+}
native-rust/bom-core/src/engine.rsadded+551
@@ -0,0 +1,551 @@+use crate::*;+use std::collections::{BTreeMap, BTreeSet, VecDeque};++pub fn generate(snapshot: &AssemblySnapshot, options: Options) -> Result<Bom> {+    generate_with_limits(snapshot, options, Limits::default())+}++pub fn generate_with_limits(+    snapshot: &AssemblySnapshot,+    options: Options,+    limits: Limits,+) -> Result<Bom> {+    let maximum = Limits::default();+    if limits.max_depth > maximum.max_depth+        || limits.max_component_visits == 0+        || limits.max_component_visits > maximum.max_component_visits+        || limits.max_physical_body_instances > maximum.max_physical_body_instances+    {+        return Err(Error::new(+            "invalid_limits",+            "BOM limits may only reduce the hard limits",+        ));+    }+    bounded_serialized(snapshot, MAX_SNAPSHOT_BYTES)?;+    if snapshot.target.document_id.is_empty()+        || snapshot.target.revision.is_empty()+        || snapshot.witness.session_id.is_empty()+        || snapshot.witness.design_id.is_empty()+        || snapshot.witness.target != snapshot.target+        || !snapshot.witness.complete+        || !snapshot.witness.read_errors.is_empty()+        || snapshot.witness.calculation_accuracy != CalculationAccuracy::High+    {+        return Err(Error::new(+            "source_incomplete",+            "A complete current-target high-accuracy source witness is required",+        ));+    }+    let config = snapshot.configuration.validate(&snapshot.target)?;+    let graph = Graph::new(snapshot)?;+    for column in snapshot+        .configuration+        .table+        .iter()+        .flat_map(|table| &table.columns)+    {+        if let Some(source) = &column.source {+            graph.validate_configuration_source(source)?;+        }+    }+    let mut run = Run {+        graph: &graph,+        options,+        limits,+        visited: 0,+        physical: PhysicalProperties::default(),+        body_instances: 0,+        parts: Vec::new(),+        part_indexes: BTreeMap::new(),+        instances: Vec::new(),+        excluded: Vec::new(),+        suppressed_sources: &config.suppressed_sources,+        output_budget: MAX_SNAPSHOT_BYTES,+    };+    run.purchasing(None, None, 0, &mut Vec::new())?;+    run.physical_walk(None, 0, &mut Vec::new())?;+    let total_purchasing_instances = run.parts.iter().map(|row| row.quantity).sum();+    let result = Bom {+        target: snapshot.target.clone(), complete: true,+        configuration: config.provenance, configuration_suppression: config.suppression_cells,+        part_count: run.parts.len(), total_purchasing_instances,+        parts: run.parts, instances: run.instances, excluded: run.excluded,+        physical: PhysicalTotals {+            mass: run.physical.mass_kg, volume: run.physical.volume_mm3, body_instances: run.body_instances,+            scope: "all unsuppressed direct-body instances; BOM exclusions do not remove physical mass".into(),+            material_basis: "Fusion assigned/default material; supplier provenance does not certify modeled material density".into(),+        },+        units: Units { mass: "kg".into(), volume: "mm3".into() },+        calculation_accuracy: "high".into(),+        identity_scope: "running add-in session; supplier metadata persists in native archives".into(),+    };+    bounded_serialized(&result, MAX_SNAPSHOT_BYTES)?;+    Ok(result)+}++struct Graph<'a> {+    source: &'a AssemblySnapshot,+    components: BTreeMap<&'a str, &'a Component>,+    occurrences: BTreeMap<&'a str, &'a Occurrence>,+}++impl<'a> Graph<'a> {+    fn new(source: &'a AssemblySnapshot) -> Result<Self> {+        if source.components.is_empty()+            || source.components.len() > MAX_GRAPH_ENTITIES+            || source.occurrences.len() > MAX_GRAPH_ENTITIES+        {+            return Err(Error::new(+                "bom_budget",+                "Assembly entity inventory exceeds budget",+            ));+        }+        let mut graph = Self {+            source,+            components: BTreeMap::new(),+            occurrences: BTreeMap::new(),+        };+        let mut paths = BTreeSet::new();+        let mut aliases = 0;+        for component in &source.components {+            component.metadata.validate()?;+            graph.validate_reference(&component.reference, "adsk::fusion::Component")?;+            if component.direct_bodies.len() > MAX_GRAPH_ENTITIES {+                return Err(Error::new(+                    "bom_budget",+                    "Component body inventory exceeds budget",+                ));+            }+            for properties in &component.direct_bodies {+                properties.validate()?;+            }+            if let Some(properties) = component.subtree_properties {+                properties.validate()?;+            }+            for id in std::iter::once(&component.id).chain(&component.aliases) {+                aliases += 1;+                if aliases > MAX_GRAPH_ENTITIES {+                    return Err(Error::new(+                        "bom_budget",+                        "Identity alias inventory exceeds budget",+                    ));+                }+                if id.is_empty() || graph.components.insert(id, component).is_some() {+                    return Err(Error::new(+                        "ambiguous_identity",+                        "Missing or ambiguous component definition identity",+                    ));+                }+            }+        }+        let root = graph.component(&source.root.component_id)?;+        if root+            .reference+            .root_component_id+            .as_deref()+            .and_then(|id| graph.components.get(id))+            .map(|component| component.id.as_str())+            != Some(root.id.as_str())+        {+            return Err(Error::new(+                "source_incomplete",+                "Root component reference lacks the matching session identity",+            ));+        }+        for occurrence in &source.occurrences {+            if occurrence.id.is_empty()+                || occurrence.path.is_empty()+                || occurrence.path == "<root>"+                || !paths.insert(&occurrence.path)+                || graph+                    .occurrences+                    .insert(&occurrence.id, occurrence)+                    .is_some()+            {+                return Err(Error::new(+                    "ambiguous_identity",+                    "Occurrence identities and full paths must be unique",+                ));+            }+            let component = graph.component(&occurrence.component_id)?;+            graph.validate_reference(&occurrence.reference, "adsk::fusion::Occurrence")?;+            if occurrence.reference.occurrence_path.as_deref() != Some(occurrence.path.as_str()) {+                return Err(Error::new(+                    "source_incomplete",+                    "Occurrence reference path does not match its instance",+                ));+            }+            graph.validate_source(&occurrence.source)?;+            if occurrence.source.object_type != "adsk::fusion::Occurrence"+                || occurrence.source.owner_scope != OwnerScope::Component+                || graph.component(&occurrence.source.owner_id)?.id != component.id+            {+                return Err(Error::new(+                    "configuration_source_mismatch",+                    "Occurrence source owner/type does not match its component",+                ));+            }+            if occurrence.direct_bodies.len() != component.direct_bodies.len() {+                return Err(Error::new(+                    "source_incomplete",+                    "Occurrence direct-body count differs from its definition",+                ));+            }+            for properties in &occurrence.direct_bodies {+                properties.validate()?;+            }+        }+        // Native occurrence instances form a tree, even though definitions are+        // reused. A shared occurrence node would otherwise double-count one body.+        let mut parents = BTreeMap::<&str, usize>::new();+        for child in source+            .root+            .children+            .iter()+            .chain(source.occurrences.iter().flat_map(|o| &o.children))+        {+            graph.occurrence(child)?;+            *parents.entry(child).or_default() += 1;+        }+        if graph+            .occurrences+            .keys()+            .any(|id| parents.get(id) != Some(&1))+        {+            return Err(Error::new(+                "invalid_assembly_graph",+                "Every occurrence must have exactly one containment parent",+            ));+        }+        let mut reached = BTreeSet::new();+        let mut queue: VecDeque<&str> = source.root.children.iter().map(String::as_str).collect();+        while let Some(id) = queue.pop_front() {+            if !reached.insert(id) {+                return Err(Error::new(+                    "cyclic_assembly",+                    "Occurrence containment is cyclic",+                ));+            }+            queue.extend(graph.occurrence(id)?.children.iter().map(String::as_str));+        }+        if reached.len() != graph.occurrences.len() {+            return Err(Error::new(+                "invalid_assembly_graph",+                "Occurrence inventory has unreachable nodes",+            ));+        }+        Ok(graph)+    }++    fn component(&self, id: &str) -> Result<&'a Component> {+        self.components.get(id).copied().ok_or_else(|| {+            Error::new(+                "source_incomplete",+                format!("Unknown component identity: {id}"),+            )+        })+    }+    fn occurrence(&self, id: &str) -> Result<&'a Occurrence> {+        self.occurrences.get(id).copied().ok_or_else(|| {+            Error::new(+                "source_incomplete",+                format!("Unknown occurrence identity: {id}"),+            )+        })+    }+    fn validate_reference(&self, reference: &EntityRef, object_type: &str) -> Result<()> {+        if reference.document_id != self.source.target.document_id+            || reference.revision != self.source.target.revision+            || reference.object_type != object_type+        {+            return Err(Error::new(+                "source_incomplete",+                "Entity reference has a foreign target/revision/type",+            ));+        }+        Ok(())+    }+    fn validate_source(&self, source: &SourceLink) -> Result<()> {+        if source.entity_id.is_empty()+            || source.owner_id.is_empty()+            || source.object_type.is_empty()+            || !(source.object_type.starts_with("adsk::fusion::")+                || source.object_type.starts_with("adsk::core::"))+            || (source.object_type.ends_with("::Occurrence")+                && source.object_type != "adsk::fusion::Occurrence")+            || source.occurrence_id.as_ref().is_some_and(String::is_empty)+        {+            return Err(Error::new(+                "configuration_source_mismatch",+                "Controlled-source identity is incomplete",+            ));+        }+        if source.owner_scope == OwnerScope::Component {+            self.component(&source.owner_id)?;+        } else if source.owner_id != self.source.witness.design_id+            || source.object_type != "adsk::fusion::UserParameter"+        {+            return Err(Error::new(+                "configuration_source_mismatch",+                "Design-owned source is not a user parameter of this Design",+            ));+        }+        Ok(())+    }++    fn validate_configuration_source(&self, source: &SourceLink) -> Result<()> {+        self.validate_source(source)?;+        if source.object_type != "adsk::fusion::Occurrence"+            && self+                .occurrences+                .values()+                .any(|occurrence| occurrence.source.entity_id == source.entity_id)+        {+            return Err(Error::new(+                "configuration_source_mismatch",+                "Controlled source type contradicts an observed occurrence identity",+            ));+        }+        if source.object_type == "adsk::fusion::Occurrence" {+            if source.owner_scope != OwnerScope::Component {+                return Err(Error::new(+                    "configuration_source_mismatch",+                    "Occurrence source must have component ownership",+                ));+            }+            let owner = self.component(&source.owner_id)?;+            let mut found = false;+            for occurrence in self.occurrences.values().filter(|occurrence| {+                occurrence.source.entity_id == source.entity_id+                    && (source.occurrence_id.is_none()+                        || source.occurrence_id == occurrence.source.occurrence_id)+            }) {+                found = true;+                if occurrence.source.object_type != source.object_type+                    || occurrence.source.owner_scope != source.owner_scope+                    || self.component(&occurrence.source.owner_id)?.id != owner.id+                {+                    return Err(Error::new(+                        "configuration_source_mismatch",+                        "Controlled occurrence source contradicts its observed owner/type",+                    ));+                }+            }+            if !found {+                return Err(Error::new(+                    "configuration_source_mismatch",+                    "Controlled occurrence source has no matching observed entity/context",+                ));+            }+        }+        Ok(())+    }+}++struct Run<'a, 'b> {+    graph: &'b Graph<'a>,+    options: Options,+    limits: Limits,+    visited: usize,+    physical: PhysicalProperties,+    body_instances: usize,+    parts: Vec<PartRow>,+    part_indexes: BTreeMap<&'a str, usize>,+    instances: Vec<InstanceRow>,+    excluded: Vec<Exclusion>,+    suppressed_sources: &'b [&'a SourceLink],+    output_budget: usize,+}++impl<'a> Run<'a, '_> {+    fn charge<T: serde::Serialize>(&mut self, value: &T) -> Result<()> {+        // Reserve bytes before cloning repeated metadata into output rows.+        // The fixed allowance covers field names, brackets and numeric values;+        // final exact serialization is checked as well.+        let bytes = serialized_len(value, self.output_budget)?.saturating_add(512);+        self.output_budget = self.output_budget.checked_sub(bytes).ok_or_else(|| {+            Error::new("bom_budget", "BOM materialization exceeds its byte budget")+        })?;+        Ok(())+    }+    fn node(+        &self,+        occurrence: Option<&'a Occurrence>,+    ) -> Result<(&'a Component, &'a [String], &'a str)> {+        match occurrence {+            Some(occurrence) => Ok((+                self.graph.component(&occurrence.component_id)?,+                &occurrence.children,+                &occurrence.path,+            )),+            None => Ok((+                self.graph.component(&self.graph.source.root.component_id)?,+                &self.graph.source.root.children,+                "<root>",+            )),+        }+    }+    fn visit(&mut self, component: &Component, depth: usize, ancestry: &[&str]) -> Result<()> {+        self.visited += 1;+        if depth > self.limits.max_depth || self.visited > self.limits.max_component_visits {+            return Err(Error::new(+                "bom_budget",+                "Assembly exceeds combined purchasing/physical traversal budget",+            ));+        }+        if ancestry.contains(&component.id.as_str()) {+            return Err(Error::new(+                "cyclic_assembly",+                "Assembly contains cyclic component containment",+            ));+        }+        Ok(())+    }+    fn suppression(&self, occurrence: &Occurrence) -> Option<&'static str> {+        if occurrence.timeline_suppressed == Some(true) {+            return Some("suppressed");+        }+        if self.suppressed_sources.iter().any(|source| {+            source.object_type == "adsk::fusion::Occurrence"+                && source.owner_scope == OwnerScope::Component+                && self+                    .graph+                    .components+                    .get(source.owner_id.as_str())+                    .map(|component| &component.id)+                    == self+                        .graph+                        .components+                        .get(occurrence.source.owner_id.as_str())+                        .map(|component| &component.id)+                && source.entity_id == occurrence.source.entity_id+                && (source.occurrence_id.is_none()+                    || source.occurrence_id == occurrence.source.occurrence_id)+        }) {+            return Some("configuration_suppressed");+        }+        None+    }+    fn purchasing(+        &mut self,+        occurrence: Option<&'a Occurrence>,+        parent_path: Option<&str>,+        depth: usize,+        ancestry: &mut Vec<&'a str>,+    ) -> Result<()> {+        let (component, children, path) = self.node(occurrence)?;+        self.visit(component, depth, ancestry)?;+        let reason = occurrence.and_then(|o| self.suppression(o)).or_else(|| {+            (component.metadata.exclude_from_bom == Some(true)).then_some("excludeFromBom")+        });+        if let Some(reason) = reason {+            self.charge(&(path, reason))?;+            self.excluded.push(Exclusion {+                path: path.into(),+                reason: reason.into(),+            });+            return Ok(());+        }+        let purchased =+            component.metadata.as_purchased == Some(true) && !self.options.explode_purchased;+        self.charge(&(+            path,+            parent_path,+            &component.id,+            &component.metadata,+            &component.reference,+            occurrence.map(|o| &o.reference),+        ))?;+        self.instances.push(InstanceRow {+            path: path.into(),+            parent_path: parent_path.map(str::to_owned),+            depth,+            component_id: component.id.clone(),+            metadata: component.metadata.clone(),+            body_count: component.direct_bodies.len(),+            child_count: children.len(),+            as_purchased: purchased,+            component_ref: component.reference.clone(),+            occurrence_ref: occurrence.map(|o| o.reference.clone()),+        });+        if !component.direct_bodies.is_empty() || purchased {+            let index = if let Some(index) = self.part_indexes.get(component.id.as_str()) {+                *index+            } else {+                let mut properties = PhysicalProperties::default();+                if purchased {+                    properties = component.subtree_properties.ok_or_else(|| Error::new("source_incomplete", "Collapsed purchased component lacks native subtree physical properties"))?;+                } else {+                    for body in &component.direct_bodies {+                        properties.add(*body)?;+                    }+                }+                self.charge(&(&component.id, &component.metadata))?;+                let index = self.parts.len();+                self.parts.push(PartRow {+                    component_id: component.id.clone(),+                    metadata: component.metadata.clone(),+                    quantity: 0,+                    occurrence_paths: Vec::new(),+                    scope: if purchased {+                        "component_subtree"+                    } else {+                        "direct_component_bodies"+                    }+                    .into(),+                    unit_mass: properties.mass_kg,+                    unit_volume: properties.volume_mm3,+                });+                self.part_indexes.insert(&component.id, index);+                index+            };+            self.charge(&path)?;+            self.parts[index].quantity += 1;+            self.parts[index].occurrence_paths.push(path.into());+        }+        if !purchased {+            ancestry.push(&component.id);+            for child in children {+                self.purchasing(+                    Some(self.graph.occurrence(child)?),+                    Some(path),+                    depth + 1,+                    ancestry,+                )?;+            }+            ancestry.pop();+        }+        Ok(())+    }+    fn physical_walk(+        &mut self,+        occurrence: Option<&'a Occurrence>,+        depth: usize,+        ancestry: &mut Vec<&'a str>,+    ) -> Result<()> {+        let (component, children, _) = self.node(occurrence)?;+        self.visit(component, depth, ancestry)?;+        let bodies = occurrence+            .map(|o| o.direct_bodies.as_slice())+            .unwrap_or(&component.direct_bodies);+        for body in bodies {+            self.body_instances += 1;+            if self.body_instances > self.limits.max_physical_body_instances {+                return Err(Error::new(+                    "bom_budget",+                    "Physical body-instance budget exceeded",+                ));+            }+            self.physical.add(*body)?;+        }+        ancestry.push(&component.id);+        for child in children {+            let child = self.graph.occurrence(child)?;+            if self.suppression(child).is_none() {+                self.physical_walk(Some(child), depth + 1, ancestry)?;+            }+        }+        ancestry.pop();+        Ok(())+    }+}
native-rust/bom-core/src/lib.rsadded+155
@@ -0,0 +1,155 @@+//! Pure graph-to-BOM business logic. Native collection, API identity equality,+//! target freshness, configuration inspection and file publication remain+//! adapter responsibilities. This crate never calls Fusion or Python.++pub mod configuration;+mod csv;+mod engine;+mod model;++pub use configuration::*;+pub use csv::{csv_bytes, CsvMode};+pub use engine::{generate, generate_with_limits};+pub use model::*;+use serde::Serialize;++#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]+#[error("{message}")]+pub struct Error {+    pub code: &'static str,+    pub message: String,+}+impl Error {+    pub(crate) fn new(code: &'static str, message: impl Into<String>) -> Self {+        Self {+            code,+            message: message.into(),+        }+    }+}+pub type Result<T> = std::result::Result<T, Error>;++pub const MAX_GRAPH_ENTITIES: usize = 20_000;+pub const MAX_SNAPSHOT_BYTES: usize = 32 * 1024 * 1024;+pub const MAX_CSV_BYTES: usize = 16 * 1024 * 1024;++#[derive(Debug, Clone, Copy, Default)]+pub struct Options {+    pub explode_purchased: bool,+}++#[derive(Debug, Clone, Copy)]+pub struct Limits {+    pub max_depth: usize,+    /// Shared purchasing and physical component-instance visit budget.+    pub max_component_visits: usize,+    pub max_physical_body_instances: usize,+}+impl Default for Limits {+    fn default() -> Self {+        Self {+            max_depth: 100,+            max_component_visits: 20_000,+            max_physical_body_instances: 200_000,+        }+    }+}++#[derive(Debug, Clone, PartialEq, Serialize)]+#[serde(rename_all = "camelCase")]+pub struct PartRow {+    pub component_id: String,+    #[serde(flatten)]+    pub metadata: Metadata,+    pub quantity: u64,+    pub occurrence_paths: Vec<String>,+    pub scope: String,+    pub unit_mass: f64,+    pub unit_volume: f64,+}++#[derive(Debug, Clone, PartialEq, Serialize)]+#[serde(rename_all = "camelCase")]+pub struct InstanceRow {+    pub path: String,+    pub parent_path: Option<String>,+    pub depth: usize,+    pub component_id: String,+    pub metadata: Metadata,+    pub body_count: usize,+    pub child_count: usize,+    pub as_purchased: bool,+    pub component_ref: EntityRef,+    pub occurrence_ref: Option<EntityRef>,+}++#[derive(Debug, Clone, PartialEq, Eq, Serialize)]+#[serde(rename_all = "camelCase")]+pub struct Exclusion {+    pub path: String,+    pub reason: String,+}++#[derive(Debug, Clone, PartialEq, Serialize)]+#[serde(rename_all = "camelCase")]+pub struct PhysicalTotals {+    pub mass: f64,+    pub volume: f64,+    pub body_instances: usize,+    pub scope: String,+    pub material_basis: String,+}++#[derive(Debug, Clone, PartialEq, Eq, Serialize)]+pub struct Units {+    pub mass: String,+    pub volume: String,+}++#[derive(Debug, Clone, Serialize)]+#[serde(rename_all = "camelCase")]+pub struct Bom {+    pub target: Target,+    /// Complete calculation over the supplied witness. This does not certify+    /// that a future native adapter captured the witness correctly.+    pub complete: bool,+    pub configuration: ConfigurationProvenance,+    pub configuration_suppression: Vec<ConfigurationCell>,+    pub parts: Vec<PartRow>,+    pub instances: Vec<InstanceRow>,+    pub excluded: Vec<Exclusion>,+    pub part_count: usize,+    pub total_purchasing_instances: u64,+    pub physical: PhysicalTotals,+    pub units: Units,+    pub calculation_accuracy: String,+    pub identity_scope: String,+}++pub(crate) fn bounded_serialized<T: Serialize>(value: &T, limit: usize) -> Result<()> {+    serialized_len(value, limit).map(|_| ())+}++pub(crate) fn serialized_len<T: Serialize>(value: &T, limit: usize) -> Result<usize> {+    struct Sink(usize);+    impl std::io::Write for Sink {+        fn write(&mut self, value: &[u8]) -> std::io::Result<usize> {+            if value.len() > self.0 {+                return Err(std::io::Error::other("byte budget exceeded"));+            }+            self.0 -= value.len();+            Ok(value.len())+        }+        fn flush(&mut self) -> std::io::Result<()> {+            Ok(())+        }+    }+    let mut sink = Sink(limit);+    serde_json::to_writer(&mut sink, value).map_err(|_| {+        Error::new(+            "bom_budget",+            "Serialized BOM input/output exceeds its byte budget",+        )+    })?;+    Ok(limit - sink.0)+}
native-rust/bom-core/src/model.rsadded+241
@@ -0,0 +1,241 @@+use crate::{Error, Result};+use serde::{Deserialize, Serialize};+use std::collections::BTreeMap;++#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct Target {+    pub document_id: String,+    pub revision: String,+}++/// Native entity tokens are opaque references, never definition identities.+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct EntityRef {+    pub document_id: String,+    pub revision: String,+    pub token: String,+    pub object_type: String,+    pub occurrence_token: Option<String>,+    pub occurrence_path: Option<String>,+    #[serde(skip_serializing_if = "Option::is_none")]+    pub root_component_id: Option<String>,+}++#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct Material {+    pub id: String,+    pub name: String,+}++#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct Metadata {+    pub name: String,+    pub part_number: String,+    pub description: String,+    pub attributes: BTreeMap<String, String>,+    pub material: Option<Material>,+    #[serde(skip_serializing_if = "Option::is_none")]+    pub supplier: Option<String>,+    #[serde(skip_serializing_if = "Option::is_none")]+    pub supplier_part_number: Option<String>,+    #[serde(skip_serializing_if = "Option::is_none")]+    pub source_url: Option<String>,+    #[serde(skip_serializing_if = "Option::is_none")]+    pub source_file: Option<String>,+    #[serde(skip_serializing_if = "Option::is_none")]+    pub sha256: Option<String>,+    #[serde(skip_serializing_if = "Option::is_none")]+    pub as_purchased: Option<bool>,+    #[serde(skip_serializing_if = "Option::is_none")]+    pub exclude_from_bom: Option<bool>,+}++impl Metadata {+    /// `attributes` contains only the native AdomMechanical group. Recognized+    /// attributes are JSON-encoded strings/booleans, as in the legacy add-in.+    pub fn from_attributes(+        name: String,+        part_number: String,+        description: String,+        attributes: BTreeMap<String, String>,+        material: Option<Material>,+    ) -> Result<Self> {+        fn read<T: serde::de::DeserializeOwned>(+            attrs: &BTreeMap<String, String>,+            key: &str,+        ) -> Result<Option<T>> {+            attrs+                .get(key)+                .map(|raw| {+                    serde_json::from_str(raw).map_err(|error| {+                        Error::new(+                            "invalid_metadata",+                            format!("Attribute {key} has an invalid type or JSON: {error}"),+                        )+                    })+                })+                .transpose()+        }+        Ok(Self {+            name,+            part_number,+            description,+            material,+            supplier: read(&attributes, "supplier")?,+            supplier_part_number: read(&attributes, "supplierPartNumber")?,+            source_url: read(&attributes, "sourceUrl")?,+            source_file: read(&attributes, "sourceFile")?,+            sha256: read(&attributes, "sha256")?,+            as_purchased: read(&attributes, "asPurchased")?,+            exclude_from_bom: read(&attributes, "excludeFromBom")?,+            attributes,+        })+    }++    pub(crate) fn validate(&self) -> Result<()> {+        let decoded = Self::from_attributes(+            self.name.clone(),+            self.part_number.clone(),+            self.description.clone(),+            self.attributes.clone(),+            self.material.clone(),+        )?;+        if &decoded != self {+            return Err(Error::new(+                "invalid_metadata",+                "Decoded metadata disagrees with native attribute values",+            ));+        }+        Ok(())+    }+}++#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, Default)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct PhysicalProperties {+    pub mass_kg: f64,+    pub volume_mm3: f64,+}++impl PhysicalProperties {+    pub fn from_fusion_units(mass_kg: f64, volume_cm3: f64) -> Result<Self> {+        let value = Self {+            mass_kg,+            volume_mm3: volume_cm3 * 1000.0,+        };+        value.validate()?;+        Ok(value)+    }++    pub(crate) fn validate(self) -> Result<()> {+        if !self.mass_kg.is_finite()+            || !self.volume_mm3.is_finite()+            || self.mass_kg < 0.0+            || self.volume_mm3 < 0.0+        {+            return Err(Error::new(+                "invalid_physical_properties",+                "Mass and volume must be finite and nonnegative",+            ));+        }+        Ok(())+    }++    pub(crate) fn add(&mut self, other: Self) -> Result<()> {+        self.mass_kg += other.mass_kg;+        self.volume_mm3 += other.volume_mm3;+        self.validate()+    }+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct Component {+    /// Session-local SDK equality identity, never a name, token or part number.+    pub id: String,+    /// Alternate wrapper identities already proven equal by the native adapter.+    pub aliases: Vec<String>,+    pub metadata: Metadata,+    pub reference: EntityRef,+    pub direct_bodies: Vec<PhysicalProperties>,+    /// Native component.getPhysicalProperties(High), required for a collapsed+    /// purchased row. This is not inferred from purchasing child rows.+    pub subtree_properties: Option<PhysicalProperties>,+}++#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct SourceLink {+    pub entity_id: String,+    pub object_type: String,+    pub owner_id: String,+    pub owner_scope: OwnerScope,+    pub occurrence_id: Option<String>,+}++#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]+#[serde(rename_all = "lowercase")]+pub enum OwnerScope {+    Component,+    Design,+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct Occurrence {+    pub id: String,+    pub path: String,+    pub component_id: String,+    pub reference: EntityRef,+    pub source: SourceLink,+    /// None means the adapter successfully observed there is no timeline object.+    /// A failed suppression read must instead make the witness incomplete.+    pub timeline_suppressed: Option<bool>,+    /// Visibility has no effect on purchasing or physical inclusion.+    pub visible: bool,+    /// Context-specific occurrence.bRepBodies physical observations.+    pub direct_bodies: Vec<PhysicalProperties>,+    pub children: Vec<String>,+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct Root {+    pub component_id: String,+    pub children: Vec<String>,+}++#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]+#[serde(rename_all = "lowercase")]+pub enum CalculationAccuracy {+    Low,+    Medium,+    High,+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct SnapshotWitness {+    pub session_id: String,+    /// SDK identity of the Design object, distinct from document identity.+    pub design_id: String,+    pub target: Target,+    pub complete: bool,+    pub read_errors: Vec<String>,+    pub calculation_accuracy: CalculationAccuracy,+}++#[derive(Debug, Clone, Serialize, Deserialize)]+#[serde(rename_all = "camelCase", deny_unknown_fields)]+pub struct AssemblySnapshot {+    pub target: Target,+    pub witness: SnapshotWitness,+    pub configuration: crate::configuration::ConfigurationWitness,+    pub root: Root,+    pub components: Vec<Component>,+    pub occurrences: Vec<Occurrence>,+}
native-rust/bom-core/tests/bom.rsadded+1070
@@ -0,0 +1,1070 @@+use fusion_bom_core::*;+use std::collections::BTreeMap;++fn target() -> Target {+    Target {+        document_id: "doc-1".into(),+        revision: "rev-1".into(),+    }+}+fn properties(mass: f64) -> PhysicalProperties {+    PhysicalProperties {+        mass_kg: mass,+        volume_mm3: mass * 1000.0,+    }+}+fn metadata(id: &str, purchased: bool, excluded: bool) -> Metadata {+    let mut attributes = BTreeMap::new();+    if purchased {+        attributes.insert("asPurchased".into(), "true".into());+    }+    if excluded {+        attributes.insert("excludeFromBom".into(), "true".into());+    }+    Metadata::from_attributes(+        id.into(),+        format!("PN-{id}"),+        String::new(),+        attributes,+        None,+    )+    .unwrap()+}+fn component(id: &str, masses: &[f64], purchased: bool, excluded: bool) -> Component {+    Component {+        id: id.into(),+        aliases: Vec::new(),+        metadata: metadata(id, purchased, excluded),+        reference: EntityRef {+            document_id: "doc-1".into(),+            revision: "rev-1".into(),+            token: format!("token-{id}"),+            object_type: "adsk::fusion::Component".into(),+            occurrence_token: None,+            occurrence_path: None,+            root_component_id: (id == "root").then(|| id.into()),+        },+        direct_bodies: masses.iter().copied().map(properties).collect(),+        subtree_properties: None,+    }+}+fn occurrence(id: &str, path: &str, component: &Component, children: &[&str]) -> Occurrence {+    Occurrence {+        id: id.into(),+        path: path.into(),+        component_id: component.id.clone(),+        reference: EntityRef {+            document_id: "doc-1".into(),+            revision: "rev-1".into(),+            token: format!("occ-token-{id}"),+            object_type: "adsk::fusion::Occurrence".into(),+            occurrence_token: None,+            occurrence_path: Some(path.into()),+            root_component_id: None,+        },+        source: SourceLink {+            entity_id: format!("source-{id}"),+            object_type: "adsk::fusion::Occurrence".into(),+            owner_id: component.id.clone(),+            owner_scope: OwnerScope::Component,+            occurrence_id: None,+        },+        timeline_suppressed: Some(false),+        visible: true,+        direct_bodies: component.direct_bodies.clone(),+        children: children.iter().map(|id| (*id).into()).collect(),+    }+}+fn snapshot(+    components: Vec<Component>,+    occurrences: Vec<Occurrence>,+    children: &[&str],+) -> AssemblySnapshot {+    AssemblySnapshot {+        target: target(),+        witness: SnapshotWitness {+            session_id: "native-session-1".into(),+            design_id: "design-1".into(),+            target: target(),+            complete: true,+            read_errors: Vec::new(),+            calculation_accuracy: CalculationAccuracy::High,+        },+        configuration: ConfigurationWitness {+            target: target(),+            configured: false,+            is_configuration: false,+            configuration_row_id: None,+            complete: true,+            unsupported: Vec::new(),+            read_errors: Vec::new(),+            configured_occurrences: Vec::new(),+            table: None,+        },+        root: Root {+            component_id: "root".into(),+            children: children.iter().map(|id| (*id).into()).collect(),+        },+        components,+        occurrences,+    }+}+fn simple() -> AssemblySnapshot {+    let root = component("root", &[], false, false);+    let part = component("part", &[1.5], false, false);+    let child = occurrence("part-1", "Part:1", &part, &[]);+    snapshot(vec![root, part], vec![child], &["part-1"])+}+fn purchasing_fixture() -> AssemblySnapshot {+    let root = component("root", &[1.0], false, false);+    let mut kit = component("kit", &[2.0], true, false);+    kit.subtree_properties = Some(properties(5.0));+    let bolt = component("bolt", &[1.5], false, false);+    let housing = component("housing", &[4.0], false, true);+    let mut suppressed = occurrence("kit-3", "Kit:3", &kit, &[]);+    suppressed.timeline_suppressed = Some(true);+    let mut hidden = occurrence("hidden", "Hidden:1", &bolt, &[]);+    hidden.visible = false;+    let occurrences = vec![+        occurrence("kit-1", "Kit:1", &kit, &["a", "b"]),+        occurrence("kit-2", "Kit:2", &kit, &["c", "d"]),+        occurrence("a", "Kit:1+Bolt:1", &bolt, &[]),+        occurrence("b", "Kit:1+Bolt:2", &bolt, &[]),+        occurrence("c", "Kit:2+Bolt:1", &bolt, &[]),+        occurrence("d", "Kit:2+Bolt:2", &bolt, &[]),+        occurrence("housing", "Housing:1", &housing, &["e"]),+        occurrence("e", "Housing:1+Bolt:1", &bolt, &[]),+        suppressed,+        hidden,+    ];+    snapshot(+        vec![root, kit, bolt, housing],+        occurrences,+        &["kit-1", "kit-2", "housing", "kit-3", "hidden"],+    )+}++#[test]+fn hand_computed_purchased_fixture_keeps_purchasing_and_physical_totals_distinct() {+    let bom = generate(&purchasing_fixture(), Options::default()).unwrap();+    // Root 1 + two kits (2 + 1.5 + 1.5) + excluded housing (4 + 1.5)+    // + hidden bolt 1.5 = 18 kg and ten direct-body instances.+    assert_eq!(+        (+            bom.physical.mass,+            bom.physical.volume,+            bom.physical.body_instances+        ),+        (18.0, 18_000.0, 10)+    );+    assert_eq!(+        (+            bom.part_count,+            bom.total_purchasing_instances,+            bom.instances.len()+        ),+        (3, 4, 4)+    );+    assert_eq!(+        bom.parts+            .iter()+            .map(|row| (row.component_id.as_str(), row.quantity, row.unit_mass))+            .collect::<Vec<_>>(),+        vec![("root", 1, 1.0), ("kit", 2, 5.0), ("bolt", 1, 1.5)]+    );+    assert_eq!(bom.parts[1].scope, "component_subtree");+    assert_eq!(bom.parts[1].occurrence_paths, vec!["Kit:1", "Kit:2"]);+    assert_eq!(+        bom.excluded,+        vec![+            Exclusion {+                path: "Housing:1".into(),+                reason: "excludeFromBom".into()+            },+            Exclusion {+                path: "Kit:3".into(),+                reason: "suppressed".into()+            }+        ]+    );+    assert_eq!(bom.instances[1].child_count, 2);+    assert_eq!(bom.instances[1].parent_path.as_deref(), Some("<root>"));+    assert!(bom.instances[0].occurrence_ref.is_none());+}++#[test]+fn exploding_purchased_parts_changes_quantity_scope_but_not_physical_mass() {+    let source = purchasing_fixture();+    let collapsed = generate(&source, Options::default()).unwrap();+    let exploded = generate(+        &source,+        Options {+            explode_purchased: true,+        },+    )+    .unwrap();+    assert_eq!(exploded.physical, collapsed.physical);+    assert_eq!(+        (+            exploded.part_count,+            exploded.total_purchasing_instances,+            exploded.instances.len()+        ),+        (3, 8, 8)+    );+    assert_eq!(+        exploded+            .parts+            .iter()+            .map(|row| (row.component_id.as_str(), row.quantity, row.unit_mass))+            .collect::<Vec<_>>(),+        vec![("root", 1, 1.0), ("kit", 2, 2.0), ("bolt", 5, 1.5)]+    );+    assert!(exploded+        .parts+        .iter()+        .all(|row| row.scope == "direct_component_bodies"));+    assert!(exploded.instances.iter().all(|row| !row.as_purchased));+    // Metadata still records the source purchasing flag, while the effective+    // structured-row flag correctly reflects explodePurchased.+    assert_eq!(exploded.instances[1].metadata.as_purchased, Some(true));+    assert!(!exploded.instances[1].as_purchased);+}++#[test]+fn reused_empty_assembly_definitions_repeat_children_without_adding_flat_parts() {+    let root = component("root", &[], false, false);+    let assembly = component("assembly", &[], false, false);+    let bolt = component("bolt", &[2.0], false, false);+    let children = vec![+        occurrence("a", "A:1", &assembly, &["a1", "a2"]),+        occurrence("b", "A:2", &assembly, &["b1", "b2"]),+        occurrence("a1", "A:1+B:1", &bolt, &[]),+        occurrence("a2", "A:1+B:2", &bolt, &[]),+        occurrence("b1", "A:2+B:1", &bolt, &[]),+        occurrence("b2", "A:2+B:2", &bolt, &[]),+    ];+    let bom = generate(+        &snapshot(vec![root, assembly, bolt], children, &["a", "b"]),+        Options::default(),+    )+    .unwrap();+    assert_eq!(+        (+            bom.part_count,+            bom.total_purchasing_instances,+            bom.instances.len()+        ),+        (1, 4, 7)+    );+    assert_eq!(bom.physical.mass, 8.0);+    assert_eq!(+        bom.parts[0].occurrence_paths,+        vec!["A:1+B:1", "A:1+B:2", "A:2+B:1", "A:2+B:2"]+    );+}++#[test]+fn root_bom_exclusion_prunes_all_purchasing_but_not_physical_inventory() {+    let mut source = purchasing_fixture();+    source.components[0].metadata = metadata("root", false, true);+    let bom = generate(&source, Options::default()).unwrap();+    assert!(bom.parts.is_empty() && bom.instances.is_empty());+    assert_eq!(+        bom.excluded,+        vec![Exclusion {+            path: "<root>".into(),+            reason: "excludeFromBom".into()+        }]+    );+    assert_eq!(bom.physical.mass, 18.0);+}++#[test]+fn purchasing_uses_definition_properties_while_physical_uses_each_context() {+    let mut source = simple();+    let mut second = occurrence("part-2", "Part:2", &source.components[1], &[]);+    second.direct_bodies[0] = properties(2.5);+    source.occurrences.push(second);+    source.root.children.push("part-2".into());+    let bom = generate(&source, Options::default()).unwrap();+    assert_eq!((bom.parts[0].quantity, bom.parts[0].unit_mass), (2, 1.5));+    assert_eq!(bom.physical.mass, 4.0);+}++#[test]+fn purchased_unit_mass_is_explicit_native_subtree_observation_not_flat_sum() {+    let mut source = purchasing_fixture();+    source.components[1].subtree_properties = Some(properties(6.25));+    let bom = generate(&source, Options::default()).unwrap();+    assert_eq!(bom.parts[1].unit_mass, 6.25);+    assert_eq!(bom.physical.mass, 18.0);+    source.components[1].subtree_properties = None;+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "source_incomplete"+    );+    assert!(generate(+        &source,+        Options {+            explode_purchased: true+        }+    )+    .is_ok());+}++#[test]+fn purchased_empty_container_is_a_flat_part() {+    let mut source = simple();+    source.components[0].metadata = metadata("root", true, false);+    source.components[0].subtree_properties = Some(properties(1.5));+    let bom = generate(&source, Options::default()).unwrap();+    assert_eq!(+        (+            bom.part_count,+            bom.parts[0].component_id.as_str(),+            bom.parts[0].quantity+        ),+        (1, "root", 1)+    );+    assert_eq!(bom.physical.mass, 1.5);+}++#[test]+fn proven_wrapper_aliases_aggregate_and_names_part_numbers_tokens_do_not() {+    let mut source = simple();+    source.components[1].aliases.push("wrapper-alias".into());+    let mut second = occurrence("part-2", "Part:2", &source.components[1], &[]);+    second.component_id = "wrapper-alias".into();+    second.source.owner_id = "wrapper-alias".into();+    source.occurrences.push(second);+    source.root.children.push("part-2".into());+    let mut different = source.components[1].clone();+    different.id = "different-definition".into();+    different.aliases.clear();+    // Same name, part number and token deliberately remain separate.+    let third = occurrence("part-3", "Part:3", &different, &[]);+    source.components.push(different);+    source.occurrences.push(third);+    source.root.children.push("part-3".into());+    let bom = generate(&source, Options::default()).unwrap();+    assert_eq!(+        bom.parts+            .iter()+            .map(|row| (row.component_id.as_str(), row.quantity))+            .collect::<Vec<_>>(),+        vec![("part", 2), ("different-definition", 1)]+    );+    assert_eq!(bom.physical.mass, 4.5);+}++#[test]+fn ambiguous_aliases_duplicate_paths_and_shared_instance_nodes_fail_closed() {+    let mut source = simple();+    source.components[1].aliases.push("root".into());+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "ambiguous_identity"+    );+    let mut source = simple();+    let mut duplicate = source.occurrences[0].clone();+    duplicate.id = "part-2".into();+    source.occurrences.push(duplicate);+    source.root.children.push("part-2".into());+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "ambiguous_identity"+    );+    let mut source = simple();+    source.root.children.push("part-1".into());+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "invalid_assembly_graph"+    );+}++#[test]+fn cyclic_component_containment_is_detected_before_suppression_return() {+    let mut root = component("root", &[], false, false);+    root.aliases.push("root-wrapper".into());+    let mut child = occurrence("cycle", "Cycle:1", &root, &[]);+    child.component_id = "root-wrapper".into();+    child.timeline_suppressed = Some(true);+    let source = snapshot(vec![root], vec![child], &["cycle"]);+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "cyclic_assembly"+    );+}++#[test]+fn combined_purchasing_physical_budget_is_not_reset_between_traversals() {+    let source = simple();+    let limits = Limits {+        max_component_visits: 4,+        ..Limits::default()+    };+    assert!(generate_with_limits(&source, Options::default(), limits).is_ok());+    let limits = Limits {+        max_component_visits: 3,+        ..limits+    };+    assert_eq!(+        generate_with_limits(&source, Options::default(), limits)+            .unwrap_err()+            .code,+        "bom_budget"+    );+    let limits = Limits {+        max_physical_body_instances: 0,+        ..Limits::default()+    };+    assert_eq!(+        generate_with_limits(&source, Options::default(), limits)+            .unwrap_err()+            .code,+        "bom_budget"+    );+    let limits = Limits {+        max_depth: 101,+        ..Limits::default()+    };+    assert_eq!(+        generate_with_limits(&source, Options::default(), limits)+            .unwrap_err()+            .code,+        "invalid_limits"+    );+}++#[test]+fn depth_100_is_allowed_and_101_is_refused() {+    fn chain(depth: usize) -> AssemblySnapshot {+        let mut components = vec![component("root", &[], false, false)];+        let mut occurrences = Vec::new();+        for level in 1..=depth {+            let comp = component(&format!("c{level}"), &[], false, false);+            let next = format!("o{}", level + 1);+            let children = if level < depth {+                vec![next.as_str()]+            } else {+                vec![]+            };+            occurrences.push(occurrence(+                &format!("o{level}"),+                &format!("level-{level}"),+                &comp,+                &children,+            ));+            components.push(comp);+        }+        snapshot(components, occurrences, &["o1"])+    }+    assert!(generate(&chain(100), Options::default()).is_ok());+    assert_eq!(+        generate(&chain(101), Options::default()).unwrap_err().code,+        "bom_budget"+    );+}++#[test]+fn invalid_nonfinite_negative_and_overflowing_physical_data_is_refused() {+    for value in [f64::NAN, f64::INFINITY, -1.0] {+        let mut source = simple();+        source.occurrences[0].direct_bodies[0].mass_kg = value;+        assert_eq!(+            generate(&source, Options::default()).unwrap_err().code,+            "invalid_physical_properties"+        );+    }+    let mut source = simple();+    source.components[1].direct_bodies = vec![+        PhysicalProperties {+            mass_kg: f64::MAX,+            volume_mm3: 1.0+        };+        2+    ];+    source.occurrences[0].direct_bodies = source.components[1].direct_bodies.clone();+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "invalid_physical_properties"+    );+    assert_eq!(+        PhysicalProperties::from_fusion_units(2.0, 3.0).unwrap(),+        PhysicalProperties {+            mass_kg: 2.0,+            volume_mm3: 3000.0+        }+    );+    assert!(PhysicalProperties::from_fusion_units(1.0, f64::MAX).is_err());+}++#[test]+fn source_witness_and_reference_completeness_are_not_inferred_from_partial_data() {+    let base = simple();+    let mut cases = Vec::new();+    let mut source = base.clone();+    source.witness.complete = false;+    cases.push(source);+    let mut source = base.clone();+    source+        .witness+        .read_errors+        .push("failed body properties".into());+    cases.push(source);+    let mut source = base.clone();+    source.witness.target.revision = "stale".into();+    cases.push(source);+    let mut source = base.clone();+    source.witness.session_id.clear();+    cases.push(source);+    let mut source = base.clone();+    source.witness.calculation_accuracy = CalculationAccuracy::Low;+    cases.push(source);+    let mut source = base.clone();+    source.components[1].reference.document_id = "foreign".into();+    cases.push(source);+    let mut source = base.clone();+    source.occurrences[0].direct_bodies.clear();+    cases.push(source);+    let mut source = base.clone();+    source.occurrences[0].reference.occurrence_path = Some("wrong".into());+    cases.push(source);+    let mut source = base.clone();+    source.root.children.push("missing".into());+    cases.push(source);+    for source in cases {+        assert_eq!(+            generate(&source, Options::default()).unwrap_err().code,+            "source_incomplete"+        );+    }+    let mut source = base;+    source.root.children.clear();+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "invalid_assembly_graph"+    );+}++#[test]+fn metadata_decodes_json_attributes_strictly_and_preserves_supplier_provenance() {+    let attrs = BTreeMap::from([+        ("supplier".into(), "\"McMaster-Carr\"".into()),+        ("supplierPartNumber".into(), "\"91290A115\"".into()),+        ("sourceFile".into(), "\"C:\\\\CAD\\\\part.step\"".into()),+        ("sha256".into(), "\"digest\"".into()),+        ("asPurchased".into(), "true".into()),+        ("unknownLegacyAttribute".into(), "not JSON".into()),+    ]);+    let data = Metadata::from_attributes(+        "Bolt".into(),+        "PN".into(),+        String::new(),+        attrs.clone(),+        None,+    )+    .unwrap();+    assert_eq!(data.supplier.as_deref(), Some("McMaster-Carr"));+    assert_eq!(data.supplier_part_number.as_deref(), Some("91290A115"));+    assert_eq!(data.source_file.as_deref(), Some("C:\\CAD\\part.step"));+    assert_eq!(data.attributes, attrs);+    for invalid in ["1", "\"true\"", "null", "{", "[]"] {+        let attrs = BTreeMap::from([("asPurchased".into(), invalid.into())]);+        assert_eq!(+            Metadata::from_attributes("Bolt".into(), "PN".into(), String::new(), attrs, None)+                .unwrap_err()+                .code,+            "invalid_metadata"+        );+    }+    let mut source = simple();+    source.components[1].metadata.as_purchased = Some(true);+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "invalid_metadata"+    );+}++fn configured_source() -> AssemblySnapshot {+    let mut source = simple();+    source.occurrences[0].source.entity_id = "same-native-occurrence".into();+    source.occurrences[0].source.occurrence_id = Some("context-a".into());+    let mut second = occurrence("part-2", "Part:2", &source.components[1], &[]);+    second.source.entity_id = "same-native-occurrence".into();+    second.source.occurrence_id = Some("context-b".into());+    second.visible = false;+    second.timeline_suppressed = None;+    source.occurrences.push(second);+    source.root.children.push("part-2".into());+    let suppress = source.occurrences[0].source.clone();+    let visibility = source.occurrences[1].source.clone();+    let rows = vec![+        ConfigurationRow {+            id: "active".into(),+            name: "Working".into(),+            scope: RowScope::Ordinary,+            parent_id: None,+            child_ids: vec![],+        },+        ConfigurationRow {+            id: "other".into(),+            name: "Other".into(),+            scope: RowScope::Ordinary,+            parent_id: None,+            child_ids: vec![],+        },+        ConfigurationRow {+            id: "test".into(),+            name: "Reserved".into(),+            scope: RowScope::Test,+            parent_id: None,+            child_ids: vec![],+        },+    ];+    let mut cells = Vec::new();+    for row in &rows {+        cells.push(ConfigurationCell {+            row_id: row.id.clone(),+            column_id: "suppress".into(),+            scope: row.scope,+            value: CellValue::ConfigurationSuppressCell {+                is_suppressed: false,+                is_effectively_suppressed: row.id != "other",+            },+        });+        cells.push(ConfigurationCell {+            row_id: row.id.clone(),+            column_id: "visible".into(),+            scope: row.scope,+            value: CellValue::ConfigurationVisibilityCell { is_visible: false },+        });+    }+    source.configuration.configured = true;+    source.configuration.table = Some(ConfigurationTable {+        id: "table-1".into(),+        active_row_id: "active".into(),+        active_row_name: "Working".into(),+        has_custom_columns: false,+        theme_table_ids: vec![],+        rows,+        columns: vec![+            ConfigurationColumn {+                id: "suppress".into(),+                kind: ColumnKind::Suppress,+                source: Some(suppress),+            },+            ConfigurationColumn {+                id: "visible".into(),+                kind: ColumnKind::Visibility,+                source: Some(visibility),+            },+        ],+        cells,+    });+    source+}++#[test]+fn active_configuration_effective_suppression_respects_exact_occurrence_context() {+    let source = configured_source();+    let bom = generate(&source, Options::default()).unwrap();+    assert_eq!((bom.parts[0].quantity, bom.physical.mass), (1, 1.5));+    assert_eq!(bom.parts[0].occurrence_paths, vec!["Part:2"]);+    assert_eq!(bom.excluded[0].reason, "configuration_suppressed");+    assert_eq!(bom.configuration_suppression.len(), 1);+    assert_eq!(bom.configuration_suppression[0].row_id, "active");+    assert_eq!(bom.configuration.row_id.as_deref(), Some("active"));+    assert_eq!(bom.configuration.table_id.as_deref(), Some("table-1"));+}++#[test]+fn configuration_without_context_suppresses_all_reused_native_instances() {+    let mut source = configured_source();+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .occurrence_id = None;+    let bom = generate(&source, Options::default()).unwrap();+    assert!(bom.parts.is_empty());+    assert_eq!(+        (+            bom.physical.mass,+            bom.physical.body_instances,+            bom.excluded.len()+        ),+        (0.0, 0, 2)+    );+}++#[test]+fn inactive_test_rows_and_visibility_never_suppress_a_bom_instance() {+    let mut source = configured_source();+    let table = source.configuration.table.as_mut().unwrap();+    table.active_row_id = "other".into();+    table.active_row_name = "Other".into();+    let bom = generate(&source, Options::default()).unwrap();+    assert_eq!((bom.parts[0].quantity, bom.physical.mass), (2, 3.0));+    assert!(bom.excluded.is_empty());+    assert_eq!(bom.configuration_suppression[0].row_id, "other");+}++#[test]+fn timeline_suppression_takes_precedence_and_non_occurrence_sources_are_not_instance_filters() {+    let mut source = configured_source();+    source.occurrences[0].timeline_suppressed = Some(true);+    assert_eq!(+        generate(&source, Options::default()).unwrap().excluded[0].reason,+        "suppressed"+    );+    let mut source = configured_source();+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .object_type = "adsk::fusion::ExtrudeFeature".into();+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .entity_id = "observed-feature-source".into();+    let bom = generate(&source, Options::default()).unwrap();+    assert_eq!(bom.parts[0].quantity, 2);+    assert_eq!(bom.physical.mass, 3.0);+}++#[test]+fn incomplete_unsupported_generated_and_external_configuration_scopes_are_refused() {+    let base = configured_source();+    let mut cases = Vec::new();+    let mut source = base.clone();+    source.configuration.complete = false;+    cases.push(source);+    let mut source = base.clone();+    source+        .configuration+        .unsupported+        .push("custom column".into());+    cases.push(source);+    let mut source = base.clone();+    source.configuration.read_errors.push("read failed".into());+    cases.push(source);+    let mut source = base.clone();+    source.configuration.is_configuration = true;+    cases.push(source);+    let mut source = base.clone();+    source+        .configuration+        .table+        .as_mut()+        .unwrap()+        .has_custom_columns = true;+    cases.push(source);+    let mut source = base.clone();+    source+        .configuration+        .table+        .as_mut()+        .unwrap()+        .theme_table_ids+        .push("materials".into());+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().rows[0]+        .child_ids+        .push("other".into());+    cases.push(source);+    let mut source = base;+    source+        .configuration+        .configured_occurrences+        .push(ConfiguredOccurrence {+            occurrence_id: "part-1".into(),+            path: "Part:1".into(),+            table_id: "foreign-table".into(),+            row_id: "row".into(),+            row_name: "Row".into(),+            source_file_id: "cloud-id".into(),+            source_version: 3,+        });+    cases.push(source);+    for source in cases {+        assert_eq!(+            generate(&source, Options::default()).unwrap_err().code,+            "configuration_scope_unsupported"+        );+    }+}++#[test]+fn configuration_matrix_addresses_types_flags_and_provenance_are_checked() {+    let base = configured_source();+    let mut cases = Vec::new();+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().cells.pop();+    cases.push(source);+    let mut source = base.clone();+    let table = source.configuration.table.as_mut().unwrap();+    table.cells[1] = table.cells[0].clone();+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().cells[0].scope = RowScope::Test;+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().cells[0].value =+        CellValue::ConfigurationVisibilityCell { is_visible: false };+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().columns[0].source = None;+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().active_row_name = "stale-name".into();+    cases.push(source);+    let mut source = base.clone();+    let table = source.configuration.table.as_mut().unwrap();+    table.active_row_id = "test".into();+    table.active_row_name = "Reserved".into();+    cases.push(source);+    let mut source = base.clone();+    source.configuration.configured = false;+    cases.push(source);+    for source in cases {+        assert_eq!(+            generate(&source, Options::default()).unwrap_err().code,+            "configuration_read_failed"+        );+    }+    let mut source = base;+    source.configuration.target.revision = "foreign-rev".into();+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "configuration_source_mismatch"+    );+}++#[test]+fn json_roundtrip_keeps_exact_float_observations_and_typed_booleans() {+    let mut source = simple();+    source.components[1].direct_bodies[0].mass_kg = f64::from_bits(0x402d_ffff_ffff_fffc);+    source.occurrences[0].direct_bodies = source.components[1].direct_bodies.clone();+    let bytes = serde_json::to_vec(&source).unwrap();+    let parsed: AssemblySnapshot = serde_json::from_slice(&bytes).unwrap();+    let bom = generate(&parsed, Options::default()).unwrap();+    assert_eq!(bom.physical.mass.to_bits(), 0x402d_ffff_ffff_fffc);+    let mut json = serde_json::to_value(source).unwrap();+    json["occurrences"][0]["timelineSuppressed"] = serde_json::json!(1);+    assert!(serde_json::from_value::<AssemblySnapshot>(json).is_err());+}++#[test]+fn flat_csv_has_exact_columns_context_and_basic_numeric_spelling() {+    let bom = generate(&simple(), Options::default()).unwrap();+    let csv = String::from_utf8(csv_bytes(&bom, CsvMode::Flat).unwrap()).unwrap();+    assert_eq!(csv, concat!(+        "componentId,partNumber,name,description,quantity,supplier,supplierPartNumber,sourceUrl,sha256,unitMass,unitVolume,scope,documentId,revision,configurationTableId,configurationRowId,configurationRowName\r\n",+        "part,PN-part,part,,1,,,,,1.5,1500.0,direct_component_bodies,doc-1,rev-1,,,\r\n"));+}++#[test]+fn structured_csv_has_containers_quantity_one_effective_purchase_flag_and_context() {+    let bom = generate(&configured_source(), Options::default()).unwrap();+    let csv = String::from_utf8(csv_bytes(&bom, CsvMode::Structured).unwrap()).unwrap();+    assert_eq!(csv, concat!(+        "path,parentPath,depth,componentId,name,partNumber,description,quantity,bodyCount,childCount,asPurchased,supplier,supplierPartNumber,sourceUrl,sha256,documentId,revision,configurationTableId,configurationRowId,configurationRowName\r\n",+        "<root>,,0,root,root,PN-root,,1,0,2,False,,,,,doc-1,rev-1,table-1,active,Working\r\n",+        "Part:2,<root>,1,part,part,PN-part,,1,1,0,False,,,,,doc-1,rev-1,table-1,active,Working\r\n"));+    let bom = generate(&purchasing_fixture(), Options::default()).unwrap();+    let collapsed = String::from_utf8(csv_bytes(&bom, CsvMode::Structured).unwrap()).unwrap();+    assert!(collapsed.contains("Kit:1,<root>,1,kit,kit,PN-kit,,1,1,2,True,"));+    let bom = generate(+        &purchasing_fixture(),+        Options {+            explode_purchased: true,+        },+    )+    .unwrap();+    let exploded = String::from_utf8(csv_bytes(&bom, CsvMode::Structured).unwrap()).unwrap();+    assert!(exploded.contains("Kit:1,<root>,1,kit,kit,PN-kit,,1,1,2,False,"));+}++#[test]+fn csv_escapes_quotes_commas_multiline_unicode_and_neutralizes_formulas() {+    let mut source = simple();+    let metadata = &mut source.components[1].metadata;+    metadata.name = "=HYPERLINK(\"bad\",\"Ö\")".into();+    metadata.part_number = "PN,7".into();+    metadata.description = "First\r\nSecond \"quoted\" 🦀".into();+    let bom = generate(&source, Options::default()).unwrap();+    let csv = String::from_utf8(csv_bytes(&bom, CsvMode::Flat).unwrap()).unwrap();+    assert!(csv.contains("part,\"PN,7\",\"'=HYPERLINK(\"\"bad\"\",\"\"Ö\"\")\",\"First\r\nSecond \"\"quoted\"\" 🦀\",1,"));+    for value in [+        "=1+1",+        "+1",+        "-123",+        "@SUM(A1)",+        "  =SUM(A1)",+        "\t=1",+        "\n@x",+        "\u{feff}=1",+    ] {+        let mut bom = bom.clone();+        bom.parts[0].metadata.name = value.into();+        let csv = String::from_utf8(csv_bytes(&bom, CsvMode::Flat).unwrap()).unwrap();+        assert!(+            csv.contains(&format!("'{value}")),+            "not neutralized: {value:?}"+        );+    }+}++#[test]+fn csv_does_not_rewrite_regular_text_and_refuses_invalid_or_oversized_output() {+    let bom = generate(&simple(), Options::default()).unwrap();+    let mut regular = bom.clone();+    regular.parts[0].metadata.name = "A-1 @ workshop".into();+    let csv = String::from_utf8(csv_bytes(&regular, CsvMode::Flat).unwrap()).unwrap();+    assert!(csv.contains(",A-1 @ workshop,"));+    let mut invalid = bom.clone();+    invalid.parts[0].unit_mass = f64::NAN;+    assert_eq!(+        csv_bytes(&invalid, CsvMode::Flat).unwrap_err().code,+        "invalid_physical_properties"+    );+    let mut incomplete = bom.clone();+    incomplete.complete = false;+    assert_eq!(+        csv_bytes(&incomplete, CsvMode::Flat).unwrap_err().code,+        "source_incomplete"+    );+    let mut large = bom;+    large.parts[0].metadata.name = "\"".repeat(MAX_CSV_BYTES / 2);+    assert_eq!(+        csv_bytes(&large, CsvMode::Flat).unwrap_err().code,+        "bom_budget"+    );+}++#[test]+fn repeated_large_metadata_is_bounded_before_result_materialization() {+    let mut source = simple();+    // The input contains this string once. A part plus its structured instance+    // would duplicate it past the 32 MiB output budget without the early charge.+    source.components[1].metadata.name = "x".repeat(17 * 1024 * 1024);+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "bom_budget"+    );+}++#[test]+fn configuration_parameter_sources_must_belong_to_the_observed_design() {+    let mut source = configured_source();+    let table = source.configuration.table.as_mut().unwrap();+    table.columns.push(ConfigurationColumn {+        id: "parameter".into(),+        kind: ColumnKind::Parameter,+        source: Some(SourceLink {+            entity_id: "parameter-id".into(),+            object_type: "adsk::fusion::UserParameter".into(),+            owner_id: "design-1".into(),+            owner_scope: OwnerScope::Design,+            occurrence_id: None,+        }),+    });+    for row in &table.rows {+        table.cells.push(ConfigurationCell {+            row_id: row.id.clone(),+            column_id: "parameter".into(),+            scope: row.scope,+            value: CellValue::ConfigurationParameterCell {+                expression: "12 mm".into(),+            },+        });+    }+    assert!(generate(&source, Options::default()).is_ok());+    source.configuration.table.as_mut().unwrap().columns[2]+        .source+        .as_mut()+        .unwrap()+        .owner_id = "foreign-design".into();+    assert_eq!(+        generate(&source, Options::default()).unwrap_err().code,+        "configuration_source_mismatch"+    );+}++#[test]+fn suppression_sources_reconcile_exact_type_and_canonical_owner_with_observed_instances() {+    let base = configured_source();+    let mut source = base.clone();+    source.components[1]+        .aliases+        .push("proven-owner-alias".into());+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .owner_id = "proven-owner-alias".into();+    let bom = generate(&source, Options::default()).unwrap();+    assert_eq!(bom.parts[0].occurrence_paths, vec!["Part:2"]);++    let mut cases = Vec::new();+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .owner_id = "root".into();+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .object_type = "fake::Occurrence".into();+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .object_type = "adsk::core::Occurrence".into();+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .object_type = "adsk::fusion::ExtrudeFeature".into();+    cases.push(source);+    let mut source = base.clone();+    let controlled = source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap();+    controlled.owner_scope = OwnerScope::Design;+    controlled.owner_id = "design-1".into();+    cases.push(source);+    let mut source = base.clone();+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .entity_id = "unobserved-entity".into();+    cases.push(source);+    let mut source = base;+    source.configuration.table.as_mut().unwrap().columns[0]+        .source+        .as_mut()+        .unwrap()+        .occurrence_id = Some("unobserved-context".into());+    cases.push(source);+    for source in cases {+        assert_eq!(+            generate(&source, Options::default()).unwrap_err().code,+            "configuration_source_mismatch"+        );+    }+}
native-rust/dispatch/Cargo.tomladded+7
@@ -0,0 +1,7 @@+[package]+name = "fusion-native-dispatch"+version.workspace = true+edition.workspace = true+license.workspace = true++[dependencies]
native-rust/dispatch/src/lib.rsadded+1169
@@ -0,0 +1,1169 @@+//! Bounded, in-process handoff from workers to Fusion's main thread.+//!+//! The native event is only a wake-up containing [`Epoch`]. Tasks and results+//! remain in Rust; neither event data nor this crate contains SDK handles.+//! This queue is not a durable journal or permission to mutate a document.+//! A timed-out running request is unknown, never retried or requeued.++use std::collections::{BTreeMap, VecDeque};+use std::fmt;+use std::io;+use std::marker::PhantomData;+use std::rc::Rc;+use std::str::FromStr;+use std::sync::{Arc, Condvar, Mutex, MutexGuard};+use std::thread::{self, ThreadId};+use std::time::Instant;++/// A random runtime identity, independent of IDs from any previous DLL load.+/// Epochs prevent stale wakes; they are not authentication credentials.+#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]+pub struct Epoch([u8; 16]);++impl Epoch {+    fn fresh() -> io::Result<Self> {+        let mut bytes = [0; 16];+        random_bytes(&mut bytes)?;+        Ok(Self(bytes))+    }+}++impl fmt::Display for Epoch {+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {+        for byte in self.0 {+            write!(f, "{byte:02x}")?;+        }+        Ok(())+    }+}++#[derive(Clone, Copy, Debug, Eq, PartialEq)]+pub struct InvalidEpoch;++impl fmt::Display for InvalidEpoch {+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {+        f.write_str("an epoch must contain exactly 32 hexadecimal ASCII characters")+    }+}++impl std::error::Error for InvalidEpoch {}++impl FromStr for Epoch {+    type Err = InvalidEpoch;++    fn from_str(input: &str) -> Result<Self, Self::Err> {+        let raw = input.as_bytes();+        if raw.len() != 32 || !raw.iter().all(u8::is_ascii_hexdigit) {+            return Err(InvalidEpoch);+        }+        let mut bytes = [0; 16];+        for (i, output) in bytes.iter_mut().enumerate() {+            // ASCII validation above also establishes valid UTF-8 boundaries.+            *output = u8::from_str_radix(&input[i * 2..i * 2 + 2], 16).map_err(|_| InvalidEpoch)?;+        }+        Ok(Self(bytes))+    }+}++#[cfg(unix)]+fn random_bytes(bytes: &mut [u8; 16]) -> io::Result<()> {+    use std::io::Read;+    std::fs::File::open("/dev/urandom")?.read_exact(bytes)+}++#[cfg(windows)]+fn random_bytes(bytes: &mut [u8; 16]) -> io::Result<()> {+    #[link(name = "bcrypt")]+    extern "system" {+        fn BCryptGenRandom(+            algorithm: *mut std::ffi::c_void,+            buffer: *mut u8,+            len: u32,+            flags: u32,+        ) -> i32;+    }+    // BCRYPT_USE_SYSTEM_PREFERRED_RNG; NTSTATUS success is nonnegative.+    let status = unsafe { BCryptGenRandom(std::ptr::null_mut(), bytes.as_mut_ptr(), 16, 2) };+    if status < 0 {+        Err(io::Error::other(format!(+            "BCryptGenRandom failed: {status:#x}"+        )))+    } else {+        Ok(())+    }+}++#[cfg(not(any(unix, windows)))]+fn random_bytes(_bytes: &mut [u8; 16]) -> io::Result<()> {+    Err(io::Error::new(+        io::ErrorKind::Unsupported,+        "no supported OS random source",+    ))+}++#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]+pub struct RequestId {+    epoch: Epoch,+    sequence: u64,+}++impl RequestId {+    pub fn epoch(self) -> Epoch {+        self.epoch+    }+    pub fn sequence(self) -> u64 {+        self.sequence+    }+}++impl fmt::Display for RequestId {+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {+        write!(f, "{}:{}", self.epoch, self.sequence)+    }+}++#[derive(Clone, Copy, Debug, Eq, PartialEq)]+pub enum SubmitError {+    Full,+    ShuttingDown,+    DeadlineElapsed,+    IdsExhausted,+}++#[derive(Clone, Copy, Debug, Eq, PartialEq)]+pub enum DrainError {+    StaleEpoch,+    WrongThread,+    ShuttingDown,+}++#[derive(Clone, Copy, Debug, Eq, PartialEq)]+pub enum CompleteError {+    ClaimMissing,+    ClaimNotExecuting,+}++macro_rules! debug_error {+    ($($name:ty),+ $(,)?) => {$ (+        impl fmt::Display for $name {+            fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{self:?}") }+        }+        impl std::error::Error for $name {}+    )+ };+}+debug_error!(SubmitError, DrainError, CompleteError);++#[derive(Clone, Copy, Debug, Eq, PartialEq)]+pub enum NotExecutedReason {+    DeadlineElapsed,+    Cancelled,+    Shutdown,+}++#[derive(Clone, Copy, Debug, Eq, PartialEq)]+pub enum UnknownReason {+    DeadlineWhileExecuting,+    CancelledWhileExecuting,+    ShutdownWhileExecuting,+    ExecutionAbandoned,+}++#[derive(Debug, Eq, PartialEq)]+pub enum Outcome<R> {+    Completed(R),+    NotExecuted(NotExecutedReason),+    Unknown(UnknownReason),+}++#[derive(Clone, Copy, Debug, Eq, PartialEq)]+pub enum Status {+    Queued,+    Executing,+    Finished,+}++#[derive(Clone, Copy, Debug, Eq, PartialEq)]+pub struct ShutdownSummary {+    pub cancelled_queued: usize,+    pub executing: usize,+}++enum Phase<R> {+    Queued,+    Executing,+    Finished(Outcome<R>),+}++struct Entry<T, R> {+    task: Option<T>,+    deadline: Instant,+    phase: Phase<R>,+    receiver_alive: bool,+}++struct Inner<T, R> {+    entries: BTreeMap<u64, Entry<T, R>>,+    queue: VecDeque<u64>,+    next_sequence: u64,+    stopped: bool,+}++pub struct Runtime<T, R> {+    epoch: Epoch,+    main_thread: ThreadId,+    capacity: usize,+    inner: Mutex<Inner<T, R>>,+    changed: Condvar,+}++impl<T, R> Runtime<T, R> {+    /// Call on the thread that will own all native SDK access. Admission and+    /// observation may happen on workers; draining is confined to this thread.+    pub fn new(capacity: usize) -> io::Result<Arc<Self>> {+        if capacity == 0 {+            return Err(io::Error::new(+                io::ErrorKind::InvalidInput,+                "queue capacity must be positive",+            ));+        }+        Ok(Arc::new(Self {+            epoch: Epoch::fresh()?,+            main_thread: thread::current().id(),+            capacity,+            inner: Mutex::new(Inner {+                entries: BTreeMap::new(),+                queue: VecDeque::new(),+                next_sequence: 1,+                stopped: false,+            }),+            changed: Condvar::new(),+        }))+    }++    // A poison event never makes work runnable again. There is no user callback+    // under this lock; recovery preserves the monotonic phase transitions.+    fn lock(&self) -> MutexGuard<'_, Inner<T, R>> {+        self.inner.lock().unwrap_or_else(|e| e.into_inner())+    }++    pub fn epoch(&self) -> Epoch {+        self.epoch+    }++    /// Includes unobserved completions and detached running work, so memory and+    /// outstanding execution remain bounded even if clients stop reading.+    pub fn outstanding(&self) -> usize {+        self.lock().entries.len()+    }++    pub fn is_shutdown(&self) -> bool {+        self.lock().stopped+    }++    /// Read-only wake decision. Completed/unobserved results and executing+    /// claims do not justify another callback. Never revives a stopped epoch.+    pub fn has_queued(&self) -> bool {+        let inner = self.lock();+        !inner.stopped+            && inner+                .entries+                .values()+                .any(|entry| matches!(entry.phase, Phase::Queued))+    }++    /// Earliest original deadline still awaiting a native claim. Expired queued+    /// entries remain visible until settled: a lost wake must not gain a later+    /// deadline merely because a newer request arrived.+    pub fn earliest_queued_deadline(&self) -> Option<Instant> {+        let inner = self.lock();+        if inner.stopped {+            return None;+        }+        inner+            .entries+            .values()+            .filter(|entry| matches!(entry.phase, Phase::Queued))+            .map(|entry| entry.deadline)+            .min()+    }++    pub fn status(&self, id: RequestId) -> Option<Status> {+        if id.epoch != self.epoch {+            return None;+        }+        self.lock()+            .entries+            .get(&id.sequence)+            .map(|entry| match entry.phase {+                Phase::Queued => Status::Queued,+                Phase::Executing => Status::Executing,+                Phase::Finished(_) => Status::Finished,+            })+    }++    pub fn submit(+        self: &Arc<Self>,+        task: T,+        deadline: Instant,+    ) -> Result<Pending<T, R>, SubmitError> {+        let mut inner = self.lock();+        if inner.stopped {+            return Err(SubmitError::ShuttingDown);+        }+        if deadline <= Instant::now() {+            return Err(SubmitError::DeadlineElapsed);+        }+        if inner.entries.len() >= self.capacity {+            return Err(SubmitError::Full);+        }+        // Refuse rather than wrap and accidentally alias any previous request.+        let sequence = inner.next_sequence;+        inner.next_sequence = sequence.checked_add(1).ok_or(SubmitError::IdsExhausted)?;+        inner.entries.insert(+            sequence,+            Entry {+                task: Some(task),+                deadline,+                phase: Phase::Queued,+                receiver_alive: true,+            },+        );+        inner.queue.push_back(sequence);+        Ok(Pending {+            runtime: Arc::clone(self),+            id: RequestId {+                epoch: self.epoch,+                sequence,+            },+            attached: true,+        })+    }++    /// Claim at most one task. Expired queued requests are settled as not+    /// executed. Extra or repeated native wake events cannot duplicate claims.+    pub fn take_next(self: &Arc<Self>, epoch: Epoch) -> Result<Option<Claim<T, R>>, DrainError> {+        if epoch != self.epoch {+            return Err(DrainError::StaleEpoch);+        }+        if thread::current().id() != self.main_thread {+            return Err(DrainError::WrongThread);+        }+        let mut inner = self.lock();+        if inner.stopped {+            return Err(DrainError::ShuttingDown);+        }+        let mut expired_tasks = Vec::new();+        while let Some(sequence) = inner.queue.pop_front() {+            let entry = inner+                .entries+                .get_mut(&sequence)+                .expect("queued entry exists");+            if entry.deadline <= Instant::now() {+                entry.phase =+                    Phase::Finished(Outcome::NotExecuted(NotExecutedReason::DeadlineElapsed));+                expired_tasks.push(entry.task.take());+                self.changed.notify_all();+                continue;+            }+            entry.phase = Phase::Executing;+            let task = entry.task.take().expect("queued entry owns task");+            let claim = Claim {+                runtime: Arc::clone(self),+                id: RequestId {+                    epoch: self.epoch,+                    sequence,+                },+                task,+                completed: false,+                main_thread_only: PhantomData,+            };+            drop(inner);+            drop(expired_tasks);+            return Ok(Some(claim));+        }+        drop(inner);+        drop(expired_tasks);+        Ok(None)+    }++    /// Stops admission and unstarted work, wakes observers immediately, and+    /// never revokes a running main-thread claim. Safe from any Rust thread.+    pub fn shutdown(&self, epoch: Epoch) -> Result<ShutdownSummary, DrainError> {+        if epoch != self.epoch {+            return Err(DrainError::StaleEpoch);+        }+        let mut inner = self.lock();+        inner.stopped = true;+        let queued: Vec<_> = inner.queue.drain(..).collect();+        let cancelled_queued = queued.len();+        let mut cancelled_tasks = Vec::new();+        for sequence in queued {+            let entry = inner+                .entries+                .get_mut(&sequence)+                .expect("queued entry exists");+            entry.phase = Phase::Finished(Outcome::NotExecuted(NotExecutedReason::Shutdown));+            cancelled_tasks.push(entry.task.take());+        }+        let executing = inner+            .entries+            .values()+            .filter(|e| matches!(e.phase, Phase::Executing))+            .count();+        self.changed.notify_all();+        drop(inner);+        drop(cancelled_tasks);+        Ok(ShutdownSummary {+            cancelled_queued,+            executing,+        })+    }++    fn finish(&self, id: RequestId, outcome: Outcome<R>) -> Result<(), CompleteError> {+        let mut inner = self.lock();+        let entry = inner+            .entries+            .get_mut(&id.sequence)+            .ok_or(CompleteError::ClaimMissing)?;+        if !matches!(entry.phase, Phase::Executing) {+            return Err(CompleteError::ClaimNotExecuting);+        }+        if entry.receiver_alive {+            entry.phase = Phase::Finished(outcome);+        } else {+            inner.entries.remove(&id.sequence);+        }+        self.changed.notify_all();+        Ok(())+    }+}++/// Unique observation handle. Dropping it cancels queued work but only detaches+/// from running work. It never duplicates, revokes, or retries native execution.+pub struct Pending<T, R> {+    runtime: Arc<Runtime<T, R>>,+    id: RequestId,+    attached: bool,+}++impl<T, R> Pending<T, R> {+    pub fn id(&self) -> RequestId {+        self.id+    }++    pub fn wait(self) -> Outcome<R> {+        self.wait_inner(false)+    }++    /// Owned execution coordinators must retain observation of claimed effects+    /// after the HTTP observer deadline or queue shutdown. Queued work still+    /// expires normally. A claimed task settles only on complete or Claim drop.+    /// The owner must arrange callback settlement before joining this waiter.+    pub fn wait_settled(self) -> Outcome<R> {+        self.wait_inner(true)+    }++    fn wait_inner(mut self, retain_executing: bool) -> Outcome<R> {+        let mut inner = self.runtime.lock();+        loop {+            let entry = inner+                .entries+                .get(&self.id.sequence)+                .expect("attached receiver has entry");+            if matches!(entry.phase, Phase::Finished(_)) {+                let entry = inner+                    .entries+                    .remove(&self.id.sequence)+                    .expect("finished entry exists");+                self.attached = false;+                if let Phase::Finished(outcome) = entry.phase {+                    return outcome;+                }+                unreachable!();+            }+            if retain_executing && matches!(entry.phase, Phase::Executing) {+                inner = self+                    .runtime+                    .changed+                    .wait(inner)+                    .unwrap_or_else(|e| e.into_inner());+                continue;+            }+            if inner.stopped {+                self.attached = false;+                let (outcome, task) = detach(+                    &mut inner,+                    self.id.sequence,+                    NotExecutedReason::Shutdown,+                    UnknownReason::ShutdownWhileExecuting,+                );+                drop(inner);+                drop(task);+                return outcome;+            }+            let now = Instant::now();+            if now >= entry.deadline {+                self.attached = false;+                let (outcome, task) = detach(+                    &mut inner,+                    self.id.sequence,+                    NotExecutedReason::DeadlineElapsed,+                    UnknownReason::DeadlineWhileExecuting,+                );+                drop(inner);+                drop(task);+                return outcome;+            }+            let duration = entry.deadline.saturating_duration_since(now);+            inner = self+                .runtime+                .changed+                .wait_timeout(inner, duration)+                .unwrap_or_else(|e| e.into_inner())+                .0;+        }+    }++    pub fn cancel(mut self) -> Outcome<R> {+        let mut inner = self.runtime.lock();+        self.attached = false;+        let (outcome, task) = detach(+            &mut inner,+            self.id.sequence,+            NotExecutedReason::Cancelled,+            UnknownReason::CancelledWhileExecuting,+        );+        drop(inner);+        drop(task);+        outcome+    }+}++fn detach<T, R>(+    inner: &mut Inner<T, R>,+    sequence: u64,+    queued_reason: NotExecutedReason,+    executing_reason: UnknownReason,+) -> (Outcome<R>, Option<T>) {+    let entry = inner+        .entries+        .get_mut(&sequence)+        .expect("attached receiver has entry");+    match entry.phase {+        Phase::Queued => {+            inner.queue.retain(|id| *id != sequence);+            let entry = inner+                .entries+                .remove(&sequence)+                .expect("queued entry exists");+            (Outcome::NotExecuted(queued_reason), entry.task)+        }+        Phase::Executing => {+            entry.receiver_alive = false;+            (Outcome::Unknown(executing_reason), None)+        }+        Phase::Finished(_) => {+            let entry = inner+                .entries+                .remove(&sequence)+                .expect("finished entry exists");+            if let Phase::Finished(outcome) = entry.phase {+                (outcome, None)+            } else {+                unreachable!()+            }+        }+    }+}++impl<T, R> Drop for Pending<T, R> {+    fn drop(&mut self) {+        if self.attached {+            let mut inner = self.runtime.lock();+            let detached = detach(+                &mut inner,+                self.id.sequence,+                NotExecutedReason::Cancelled,+                UnknownReason::CancelledWhileExecuting,+            );+            drop(inner);+            drop(detached);+        }+    }+}++/// A unique main-thread execution claim. This guard is deliberately `!Send` and+/// `!Sync`, and contains no SDK handle. Dropping it without completing settles+/// the observation as unknown; the task is never made runnable again.+///+/// Completing twice is rejected by ownership:+/// ```compile_fail+/// use fusion_native_dispatch::Runtime;+/// use std::time::{Instant, Duration};+/// let queue = Runtime::<(), ()>::new(1).unwrap();+/// let pending = queue.submit((), Instant::now() + Duration::from_secs(1)).unwrap();+/// let claim = queue.take_next(queue.epoch()).unwrap().unwrap();+/// claim.complete(()).unwrap();+/// claim.complete(()).unwrap();+/// ```+/// A claim cannot cross to a worker thread:+/// ```compile_fail+/// use fusion_native_dispatch::Runtime;+/// use std::time::{Instant, Duration};+/// let queue = Runtime::<(), ()>::new(1).unwrap();+/// let pending = queue.submit((), Instant::now() + Duration::from_secs(1)).unwrap();+/// let claim = queue.take_next(queue.epoch()).unwrap().unwrap();+/// std::thread::spawn(move || claim.complete(()));+/// ```+pub struct Claim<T, R> {+    runtime: Arc<Runtime<T, R>>,+    id: RequestId,+    task: T,+    completed: bool,+    main_thread_only: PhantomData<Rc<()>>,+}++impl<T, R> Claim<T, R> {+    pub fn id(&self) -> RequestId {+        self.id+    }+    pub fn task(&self) -> &T {+        &self.task+    }++    /// Move non-cloneable task data out through an Option without transferring+    /// this main-thread-only claim or any permission to complete it twice.+    pub fn task_mut(&mut self) -> &mut T {+        &mut self.task+    }++    pub fn complete(mut self, result: R) -> Result<(), CompleteError> {+        let result = self.runtime.finish(self.id, Outcome::Completed(result));+        self.completed = true;+        result+    }+}++impl<T, R> Drop for Claim<T, R> {+    fn drop(&mut self) {+        if !self.completed {+            let _ = self+                .runtime+                .finish(self.id, Outcome::Unknown(UnknownReason::ExecutionAbandoned));+        }+    }+}++#[cfg(test)]+mod tests {+    use super::*;+    use std::collections::BTreeSet;+    #[test]+    fn owned_waiter_keeps_claimed_result_after_deadline_and_shutdown() {+        let runtime = Runtime::<(), u32>::new(1).unwrap();+        let pending = runtime+            .submit((), Instant::now() + Duration::from_millis(20))+            .unwrap();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        let (sender, receiver) = std::sync::mpsc::channel();+        let waiter = std::thread::spawn(move || sender.send(pending.wait_settled()).unwrap());+        std::thread::sleep(Duration::from_millis(30));+        runtime.shutdown(runtime.epoch()).unwrap();+        assert!(receiver.recv_timeout(Duration::from_millis(20)).is_err());+        claim.complete(17).unwrap();+        assert_eq!(+            receiver.recv_timeout(Duration::from_secs(1)).unwrap(),+            Outcome::Completed(17)+        );+        waiter.join().unwrap();+        assert_eq!(runtime.outstanding(), 0);+    }+    #[test]+    fn owned_waiter_still_expires_unclaimed_work_and_observes_abandonment() {+        let runtime = Runtime::<(), u32>::new(1).unwrap();+        let pending = runtime+            .submit((), Instant::now() + Duration::from_millis(5))+            .unwrap();+        assert_eq!(+            pending.wait_settled(),+            Outcome::NotExecuted(NotExecutedReason::DeadlineElapsed)+        );+        let pending = runtime+            .submit((), Instant::now() + Duration::from_secs(1))+            .unwrap();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        drop(claim);+        assert_eq!(+            pending.wait_settled(),+            Outcome::Unknown(UnknownReason::ExecutionAbandoned)+        );+    }+    use std::sync::{mpsc, Barrier, Weak};+    use std::time::Duration;++    fn future() -> Instant {+        Instant::now() + Duration::from_secs(30)+    }++    fn expire<T, R>(runtime: &Runtime<T, R>, id: RequestId) {+        runtime+            .lock()+            .entries+            .get_mut(&id.sequence)+            .unwrap()+            .deadline = Instant::now();+        runtime.changed.notify_all();+    }++    #[test]+    fn epochs_are_fresh_and_only_accept_exact_hex_wakes() {+        let a = Runtime::<(), ()>::new(1).unwrap();+        let b = Runtime::<(), ()>::new(1).unwrap();+        assert_ne!(a.epoch(), b.epoch());+        assert_eq!(a.epoch().to_string().parse::<Epoch>().unwrap(), a.epoch());+        for bad in [+            "",+            "a",+            "gggggggggggggggggggggggggggggggg",+            "00000000000000000000000000000000extra",+            "éééééééééééééééé",+        ] {+            assert_eq!(bad.parse::<Epoch>(), Err(InvalidEpoch));+        }+        assert!(matches!(+            a.take_next(b.epoch()),+            Err(DrainError::StaleEpoch)+        ));+        assert_eq!(a.shutdown(b.epoch()), Err(DrainError::StaleEpoch));+        assert!(!a.is_shutdown());+    }++    #[test]+    fn empty_and_repeated_wakes_never_duplicate_claims() {+        let runtime = Runtime::new(2).unwrap();+        assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+        let pending = runtime.submit("snapshot", future()).unwrap();+        let id = pending.id();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        assert_eq!(claim.id(), id);+        assert_eq!(*claim.task(), "snapshot");+        assert_eq!(runtime.status(id), Some(Status::Executing));+        for _ in 0..10 {+            assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+        }+        claim.complete("result").unwrap();+        assert_eq!(runtime.status(id), Some(Status::Finished));+        assert_eq!(pending.wait(), Outcome::Completed("result"));+        assert_eq!(runtime.status(id), None);+        assert_eq!(runtime.outstanding(), 0);+    }++    #[test]+    fn worker_thread_cannot_take_sdk_claim() {+        let runtime = Runtime::<(), ()>::new(1).unwrap();+        let pending = runtime.submit((), future()).unwrap();+        let worker = Arc::clone(&runtime);+        let error = thread::spawn(move || worker.take_next(worker.epoch()).err())+            .join()+            .unwrap();+        assert_eq!(error, Some(DrainError::WrongThread));+        assert_eq!(runtime.status(pending.id()), Some(Status::Queued));+    }++    #[test]+    fn capacity_includes_unread_completion_and_no_wrapped_request_ids() {+        assert!(Runtime::<(), ()>::new(0).is_err());+        let runtime = Runtime::new(1).unwrap();+        let pending = runtime.submit(1, future()).unwrap();+        let first_id = pending.id();+        assert!(matches!(+            runtime.submit(2, future()),+            Err(SubmitError::Full)+        ));+        runtime+            .take_next(runtime.epoch())+            .unwrap()+            .unwrap()+            .complete(7)+            .unwrap();+        assert!(matches!(+            runtime.submit(3, future()),+            Err(SubmitError::Full)+        ));+        assert_eq!(pending.wait(), Outcome::Completed(7));+        let next = runtime.submit(4, future()).unwrap();+        assert_eq!(next.id().sequence(), first_id.sequence() + 1);+        drop(next);+        runtime.lock().next_sequence = u64::MAX;+        for _ in 0..2 {+            assert!(matches!(+                runtime.submit(5, future()),+                Err(SubmitError::IdsExhausted)+            ));+        }+        assert_eq!(runtime.outstanding(), 0);+    }++    #[test]+    fn deadline_before_admission_has_no_id_or_queued_effect() {+        let runtime = Runtime::<(), ()>::new(1).unwrap();+        assert!(matches!(+            runtime.submit((), Instant::now()),+            Err(SubmitError::DeadlineElapsed)+        ));+        assert_eq!(runtime.outstanding(), 0);+        assert_eq!(runtime.submit((), future()).unwrap().id().sequence(), 1);+    }++    #[test]+    fn expired_queued_task_cannot_execute_from_a_late_wake() {+        let runtime = Runtime::<(), ()>::new(2).unwrap();+        let expired = runtime.submit((), future()).unwrap();+        expire(&runtime, expired.id());+        let next = runtime.submit((), future()).unwrap();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        assert_eq!(claim.id(), next.id());+        assert_eq!(+            expired.wait(),+            Outcome::NotExecuted(NotExecutedReason::DeadlineElapsed)+        );+        claim.complete(()).unwrap();+        assert_eq!(next.wait(), Outcome::Completed(()));+    }++    #[test]+    fn queued_wait_timeout_and_cancellation_release_queue_and_capacity() {+        let runtime = Runtime::<(), ()>::new(1).unwrap();+        let pending = runtime.submit((), future()).unwrap();+        expire(&runtime, pending.id());+        assert_eq!(+            pending.wait(),+            Outcome::NotExecuted(NotExecutedReason::DeadlineElapsed)+        );+        assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+        let pending = runtime.submit((), future()).unwrap();+        assert_eq!(+            pending.cancel(),+            Outcome::NotExecuted(NotExecutedReason::Cancelled)+        );+        assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+        assert_eq!(runtime.outstanding(), 0);+        assert_eq!(runtime.lock().queue.len(), 0);+    }++    #[test]+    fn executing_timeout_is_unknown_and_retains_capacity_until_completion() {+        let runtime = Runtime::new(1).unwrap();+        let pending = runtime.submit((), future()).unwrap();+        let id = pending.id();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        expire(&runtime, id);+        assert_eq!(+            pending.wait(),+            Outcome::Unknown(UnknownReason::DeadlineWhileExecuting)+        );+        assert_eq!(runtime.status(id), Some(Status::Executing));+        assert!(matches!(+            runtime.submit((), future()),+            Err(SubmitError::Full)+        ));+        assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+        claim.complete("late known result").unwrap();+        assert_eq!(runtime.status(id), None);+        assert_eq!(runtime.outstanding(), 0);+        assert!(runtime.submit((), future()).is_ok());+    }++    #[test]+    fn published_completion_wins_over_late_observer_deadline_or_cancel() {+        let runtime = Runtime::new(1).unwrap();+        let pending = runtime.submit((), future()).unwrap();+        let id = pending.id();+        runtime+            .take_next(runtime.epoch())+            .unwrap()+            .unwrap()+            .complete(42)+            .unwrap();+        expire(&runtime, id);+        assert_eq!(pending.wait(), Outcome::Completed(42));+        let pending = runtime.submit((), future()).unwrap();+        runtime+            .take_next(runtime.epoch())+            .unwrap()+            .unwrap()+            .complete(43)+            .unwrap();+        assert_eq!(pending.cancel(), Outcome::Completed(43));+    }++    #[test]+    fn abandoned_claim_is_unknown_and_never_requeued() {+        let runtime = Runtime::<(), ()>::new(1).unwrap();+        let pending = runtime.submit((), future()).unwrap();+        drop(runtime.take_next(runtime.epoch()).unwrap().unwrap());+        assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+        assert_eq!(+            pending.wait(),+            Outcome::Unknown(UnknownReason::ExecutionAbandoned)+        );+        assert_eq!(runtime.outstanding(), 0);+    }++    #[test]+    fn dropped_receiver_cancels_queued_and_detaches_executing_work() {+        let runtime = Runtime::<(), ()>::new(1).unwrap();+        for _ in 0..100 {+            drop(runtime.submit((), future()).unwrap());+        }+        assert_eq!(runtime.outstanding(), 0);+        assert!(runtime.lock().queue.is_empty());+        let pending = runtime.submit((), future()).unwrap();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        drop(pending);+        assert_eq!(runtime.outstanding(), 1);+        drop(claim);+        assert_eq!(runtime.outstanding(), 0);+    }++    #[test]+    fn shutdown_wakes_waiters_immediately_without_stealing_running_claim() {+        let runtime = Runtime::<(), ()>::new(2).unwrap();+        let running = runtime.submit((), future()).unwrap();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        let queued = runtime.submit((), future()).unwrap();+        let (tx, rx) = mpsc::channel();+        let tx2 = tx.clone();+        let running_waiter = thread::spawn(move || tx.send(running.wait()).unwrap());+        let queued_waiter = thread::spawn(move || tx2.send(queued.wait()).unwrap());+        assert_eq!(+            runtime.shutdown(runtime.epoch()).unwrap(),+            ShutdownSummary {+                cancelled_queued: 1,+                executing: 1+            }+        );+        let outcomes = [+            rx.recv_timeout(Duration::from_secs(2)).unwrap(),+            rx.recv_timeout(Duration::from_secs(2)).unwrap(),+        ];+        assert!(outcomes.contains(&Outcome::NotExecuted(NotExecutedReason::Shutdown)));+        assert!(outcomes.contains(&Outcome::Unknown(UnknownReason::ShutdownWhileExecuting)));+        assert_eq!(runtime.outstanding(), 1);+        assert!(matches!(+            runtime.take_next(runtime.epoch()),+            Err(DrainError::ShuttingDown)+        ));+        assert!(matches!(+            runtime.submit((), future()),+            Err(SubmitError::ShuttingDown)+        ));+        claim.complete(()).unwrap();+        assert_eq!(runtime.outstanding(), 0);+        assert_eq!(+            runtime.shutdown(runtime.epoch()).unwrap(),+            ShutdownSummary {+                cancelled_queued: 0,+                executing: 0+            }+        );+        running_waiter.join().unwrap();+        queued_waiter.join().unwrap();+    }++    #[test]+    fn condvar_deadline_and_completion_wake_real_waiters() {+        let runtime = Runtime::<(), u32>::new(1).unwrap();+        let pending = runtime+            .submit((), Instant::now() + Duration::from_secs(1))+            .unwrap();+        let (tx, rx) = mpsc::channel();+        let waiter = thread::spawn(move || tx.send(pending.wait()).unwrap());+        assert_eq!(+            rx.recv_timeout(Duration::from_secs(2)).unwrap(),+            Outcome::NotExecuted(NotExecutedReason::DeadlineElapsed)+        );+        waiter.join().unwrap();+        assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+        let pending = runtime.submit((), future()).unwrap();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        let (tx, rx) = mpsc::channel();+        let waiter = thread::spawn(move || tx.send(pending.wait()).unwrap());+        claim.complete(123).unwrap();+        assert_eq!(+            rx.recv_timeout(Duration::from_secs(2)).unwrap(),+            Outcome::Completed(123)+        );+        waiter.join().unwrap();+        assert_eq!(runtime.outstanding(), 0);+    }++    #[test]+    fn shutdown_admission_race_either_refuses_or_settles_not_executed() {+        let runtime = Runtime::<(), ()>::new(16).unwrap();+        let barrier = Arc::new(Barrier::new(17));+        let mut workers = Vec::new();+        for _ in 0..16 {+            let barrier = Arc::clone(&barrier);+            let runtime = Arc::clone(&runtime);+            workers.push(thread::spawn(move || {+                barrier.wait();+                match runtime.submit((), future()) {+                    Ok(pending) => Some(pending.wait()),+                    Err(error) => {+                        assert_eq!(error, SubmitError::ShuttingDown);+                        None+                    }+                }+            }));+        }+        barrier.wait();+        runtime.shutdown(runtime.epoch()).unwrap();+        for worker in workers {+            if let Some(outcome) = worker.join().unwrap() {+                assert_eq!(outcome, Outcome::NotExecuted(NotExecutedReason::Shutdown));+            }+        }+        assert_eq!(runtime.outstanding(), 0);+        assert!(matches!(+            runtime.submit((), future()),+            Err(SubmitError::ShuttingDown)+        ));+    }++    #[test]+    fn cancellation_race_has_exactly_one_owner_and_never_retries() {+        let runtime = Runtime::<(), ()>::new(1).unwrap();+        for _ in 0..128 {+            let pending = runtime.submit((), future()).unwrap();+            let barrier = Arc::new(Barrier::new(2));+            let worker_barrier = Arc::clone(&barrier);+            let worker = thread::spawn(move || {+                worker_barrier.wait();+                pending.cancel()+            });+            barrier.wait();+            let claim = runtime.take_next(runtime.epoch()).unwrap();+            let outcome = worker.join().unwrap();+            match claim {+                None => assert_eq!(outcome, Outcome::NotExecuted(NotExecutedReason::Cancelled)),+                Some(claim) => {+                    assert_eq!(+                        outcome,+                        Outcome::Unknown(UnknownReason::CancelledWhileExecuting)+                    );+                    assert_eq!(runtime.outstanding(), 1);+                    claim.complete(()).unwrap();+                }+            }+            assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+            assert_eq!(runtime.outstanding(), 0);+        }+    }++    #[test]+    fn concurrent_admission_produces_unique_ids_and_fifo_claims() {+        let runtime = Runtime::<usize, usize>::new(128).unwrap();+        let (tx, rx) = mpsc::channel();+        let mut workers = Vec::new();+        for worker_id in 0..16 {+            let runtime = Arc::clone(&runtime);+            let tx = tx.clone();+            workers.push(thread::spawn(move || {+                for item in 0..8 {+                    tx.send(runtime.submit(worker_id * 8 + item, future()).unwrap())+                        .unwrap();+                }+            }));+        }+        drop(tx);+        let pending: Vec<_> = rx.into_iter().collect();+        for worker in workers {+            worker.join().unwrap();+        }+        assert_eq!(pending.len(), 128);+        let ids: BTreeSet<_> = pending.iter().map(|p| p.id().sequence()).collect();+        assert_eq!(ids, (1..=128).collect());+        let mut tasks = BTreeSet::new();+        for sequence in 1..=128 {+            let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+            assert_eq!(claim.id().sequence(), sequence);+            let task = *claim.task();+            assert!(tasks.insert(task));+            claim.complete(task).unwrap();+        }+        for pending in pending {+            assert!(matches!(pending.wait(), Outcome::Completed(_)));+        }+        assert_eq!(tasks, (0..128).collect());+        assert_eq!(runtime.outstanding(), 0);+    }++    #[test]+    fn task_destructors_run_outside_internal_mutex() {+        struct ReentrantTask {+            runtime: Weak<Runtime<ReentrantTask, ()>>,+        }+        impl Drop for ReentrantTask {+            fn drop(&mut self) {+                if let Some(runtime) = self.runtime.upgrade() {+                    assert!(+                        runtime.inner.try_lock().is_ok(),+                        "task destructor held queue lock"+                    );+                }+            }+        }+        let runtime = Runtime::new(2).unwrap();+        let make = || ReentrantTask {+            runtime: Arc::downgrade(&runtime),+        };+        drop(runtime.submit(make(), future()).unwrap());+        let pending = runtime.submit(make(), future()).unwrap();+        pending.cancel();+        let pending = runtime.submit(make(), future()).unwrap();+        expire(&runtime, pending.id());+        pending.wait();+        let pending = runtime.submit(make(), future()).unwrap();+        expire(&runtime, pending.id());+        assert!(runtime.take_next(runtime.epoch()).unwrap().is_none());+        pending.wait();+        let pending = runtime.submit(make(), future()).unwrap();+        runtime.shutdown(runtime.epoch()).unwrap();+        pending.wait();+    }++    #[test]+    fn unread_and_detached_result_destructors_run_outside_mutex() {+        struct ReentrantResult {+            runtime: Weak<Runtime<(), ReentrantResult>>,+        }+        impl Drop for ReentrantResult {+            fn drop(&mut self) {+                if let Some(runtime) = self.runtime.upgrade() {+                    assert!(+                        runtime.inner.try_lock().is_ok(),+                        "result destructor held queue lock"+                    );+                }+            }+        }+        let runtime = Runtime::new(1).unwrap();+        let make = || ReentrantResult {+            runtime: Arc::downgrade(&runtime),+        };+        let pending = runtime.submit((), future()).unwrap();+        runtime+            .take_next(runtime.epoch())+            .unwrap()+            .unwrap()+            .complete(make())+            .unwrap();+        drop(pending);+        let pending = runtime.submit((), future()).unwrap();+        let claim = runtime.take_next(runtime.epoch()).unwrap().unwrap();+        drop(pending);+        claim.complete(make()).unwrap();+        assert_eq!(runtime.outstanding(), 0);+    }+}
native-rust/docs/EXACT-SKETCH-ENTITIES.mdadded+50
@@ -0,0 +1,50 @@+# Exact returned sketch entities++R13 adds one read helper, `native_sketch_entities`, under the explicit+`native-sketch-entities-v1` header. All earlier headers/operations remain+supported; prior geometry operation responses are unchanged. No constraints or+dimensions are implemented by this slice, and it makes no complete solver graph+or legacy parity claim.++The helper requires the current document ID and retained sketch ID, after a+native geometry operation completed all of its SDK success checks. Only lease+indices from that known native result are stored. Actual SDK references remain+in the original sketch holder and retain the existing child-release fence.+Unknown prefixes cannot publish IDs. There is no collection lookup by a public+entity selector, entity-token fallback, name adoption or coordinate matching.++Each read obtains two complete bounded captures: exact parent/validity/current+membership, geometry, construction/reference flags, sketch frame/counts/health+and the complete equality matrix for these explicit returned objects. Equality+uses one typed SDK observation per capture and a bounded64-by64 matrix; Rust+validates and canonicalizes the relation. Multiple SDK leases of one actual+object share one public ID. Separate objects with equal coordinates retain+different IDs. Subsequent identity changes or failed/panicking observations+retire entity publication for that sketch; these IDs are never rebound.++The new projection includes geometry coordinates and has its own revision+prefix. Geometry edits can change that revision while preserving exact object+identity. A stale request refuses without retiring otherwise valid IDs or+publishing new IDs. The response includes a separate existing sketchTarget for+operations that require sketch-projection-v1. References are scoped to the+runtime/document/sketch and are not portable across reloads or restarts.++Bounds are64 explicit entities,512 stored points,128 points per fitted spline+and128KiB of revision projection. Repeated reads acquire no additional SDK+holders. Implicit endpoints/centers/origin, fixed/linked flags, constraints,+dimensions and full spline shape remain outside the scope (`complete:false`).+They require later typed readers before general constrained editing.++Regression coverage includes identical coordinates with distinct SDK objects,+actual aliases, alias split/merge, changing coordinates without a changed SDK+revision, stale/foreign selectors, missing members, malformed flags/nonfinite+values, getter panic, unknown creation prefixes, repeated reads, maximum entity+and point bounds, HTTP header parsing and capability/schema compatibility.+An inherited observer-deadline test exposed a150ms admission race under full+workspace load. It now claims the actual effect first, waits for the real+observer deadline, then verifies durable late completion without sleeping for+an assumed scheduling interval. This is a test synchronization correction, not+an execution behavior change.++Linux/Windows/source evidence and actual Fusion acceptance are tracked+separately. This source candidate has not been loaded, installed or published.
native-rust/docs/MATERIAL-CATALOG.mdadded+11
@@ -0,0 +1,11 @@+# Native material lookup++R14 ports the read-only `material_list` operation to Rust with typed Autodesk C++ getter glue. It lists loaded library IDs/names/material counts and the selected source's material IDs/names. Omitted or empty `libraryId` reads document materials; a nonempty ID must uniquely identify one loaded library. Display names are never selectors. Unicode lowercase substring search, a default limit of 100 (1–1000), full matching count and truthful completeness preserve the existing lookup behavior within the stated bounds.++The explicit `native-material-catalog-v1` header is required. All earlier headers remain accepted for their earlier operations; the new header also supports those operations. The normal exact runtime/document registry handles targeting. The optional revision is `material-catalog-projection-v1`: it covers the exact document ID, selected source, every loaded library row and every selected-source material row before filtering. Search and pagination limits do not redefine the revision. This is not the legacy full-model revision.++Rust captures the complete bounded catalog twice and requires equality. IDs must be nonempty and unique within their catalog; same names remain distinct rows. Missing libraries, failed SDK getters, changed counts/data, invalid strings or bounds refuse the whole response. There is no partial SDK success. Limits are 64 loaded libraries, 20,000 selected-source materials, 4096 bytes per ID/name, 1024 query bytes and 1 MiB for the full encoded projection/result. Collections larger than these bounds are refused, even if the requested page is small.++All catalog SDK references are temporary typed locals released on the SDK thread within their getter call. No material/library holder survives a request. The adapter uses no load, copy, add, assign or name-based lookup API. Material physical properties, appearances and material assignment are outside this port. The response explicitly says `assignmentSupported:false`; no full legacy parity is claimed.++Validation includes document/library selection, duplicate IDs and duplicate display names, Unicode queries, empty catalogs and searches, revision changes outside a query, stale/foreign targets, every backend getter failure, a changing second capture, collection/string/encoded-byte bounds, the accepted 64-library/20,000-material maximum, protocol header parsing and earlier capability preservation. Full source/Linux/GNU/SDK compilation evidence and Windows/runtime acceptance are recorded separately. This candidate is not installed or publicly released.
native-rust/docs/NATIVE-LIFECYCLE-PLAN.mdadded+95
@@ -0,0 +1,95 @@+# Native document lifecycle port++Status: design audit, 2026-10-14. Product source is unchanged by this document. The next useful slice is native blank-design creation with exact identity adoption, explicit owned-scratch discard, and exact-ID activation. Optional box construction, transaction probing, general document close/save, and full legacy inspection remain separate qualification obligations. A small isolated Rust test-fixture add-in can qualify SDK lifecycle behavior before exposing these product operations.++## Source and contract audit++Legacy paths below are relative to `../exploded-preview-preparation/runtime-dev9-build-r1/source/addin/AdomBridge/`.++| Source | Actual behavior and port consequence |+| --- | --- |+| `commands/mechanical/operations.py:97` | `new_design` validates a requested label (default `Adom mechanical`, 1–120 characters) and optional positive finite width/height/depth in mm. It retains the previous active object, calls `documents.add(FusionDesignDocumentType)`, resolves that document's Design product, and sets parametric design type. |+| Same function | If the session transaction backend is unverified, creation runs the mutation/abort/commit/recovery probe in the new design. Optional box creates three driving user parameters, a dimensioned XY rectangle, and an extrusion. It recomputes/checks health and returns full legacy inspection. Blank creation alone does not implement these semantics. |+| Same function | Requested label is an `AdomMechanical/requestedName` root attribute, not `Document.name`. Failure cleanup checks the retained document is unsaved and starts with `Untitled`, invokes `close(False)` without checking its Boolean, then tests validity. Previous-document activation ignores its Boolean and identity readback. Preserve the useful naming precaution; replace these weak outcome checks. |+| `commands/close_document.py:16,82` | General close selects the first exact name or the active document; it attempts to terminate/abort an active command, executes SelectCommand and pumps events. For a modified cloud document it may save a new version even when `save=false`, then ignores the close Boolean. Do not carry those hidden effects into owned-scratch cleanup. |+| `commands/close_document.py:176` | Bulk close snapshots the original list because Fusion may create a replacement Untitled when the last document closes. It has independent skip/force/save rules. The native scratch operation closes exactly one retained object and never loops on document count. |+| `commands/document_info.py:176` | Activation accepts substring name/type/data-file filters, favors exact names, and may try another matching candidate after failure. Its final verification compares active names; a failed active-name getter can leave verification incomplete. Native activation uses one current registry ID and SDK object equality, with one invocation. |+| `commands/mechanical/exploded_preview.py:94,146` | Preview adoption requires a coherent current-session succeeded `new_design` journal receipt with matching request digest/target and unsaved state, plus exact live retained object, active state, blank-model witness, and an exclusive session lease. History never reconstructs native ownership after reload. Preserve this separation of durable creation evidence from a live capability. |+| `mechanical/schema.json:/new_design` | Promises an unnamed unsaved parametric hybrid design and optional parameter-driven box. New native capabilities must describe their implemented subset and keep `legacyParity:false` until the missing paths are qualified. |++Installed SDK headers were read under `C:/Users/drew/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/CPP/include`. The following official references were checked on 2026-10-14:++- [Documents.add](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_Documents_add.htm): creation returns the created document, currently requires visible creation, and is unsupported within Command-related events/transactions. The [official creation sample](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/DocumentCreation_Sample.htm) says default creation is hybrid; verify actual `Design.designIntent` rather than inventing `NamedValues` option keys.+- [Document.close](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_Document_close.htm): close has the same Command restriction, returns a Boolean, and `saveChanges=true` can prompt. `false` is the documented discard choice. Legacy comments and the local no-modal skill record narrower empirical prompt hazards for named unsaved documents; those are local qualification constraints, not an extra official API guarantee.+- [Document.activate](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_Document_activate.htm): changes the active document and returns a Boolean. The result requires exact active-object readback.+- [UserInterface.activeCommand](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/core_UserInterface_activeCommand.htm) exposes a command ID. No documented global “transaction open” getter was found in the examined headers. A custom event reaching the main thread is not proof that create/close is allowed.+- `Core/Application/Document.h:50–76,148–157`: names may be changed before first save; `creationId`, names and saved/modified flags are observations, not unique ownership capabilities. Copies may share creation metadata.+- `Fusion/Fusion/Design.h:72–79,333–348`: design type and design intent are distinct. Changing an existing parametric design to direct destroys history. Set type only on the exact newly returned design and read it back.+- `Fusion/Components/Component.h:295–298`: component revision changes with component changes. It is not a documented whole-Design revision; the current `parameters-v1` projection is explicitly scoped and cannot be relabeled a complete document-content guard.++Apply [fusion-no-modal-dialogs](/home/adom/.codex/skills/fusion-no-modal-dialogs/SKILL.md): retain the untouched native scratch name, never silently save to make close possible, refuse an unknown command or prompt-prone target before invocation. Do not add dialog sweeping, automatic command termination, event pumping, or screenshot loops.++## Small implementation slices++1. **Isolated lifecycle fixture, not a product capability.** A manually loaded Rust test DLL creates one blank unsaved parametric hybrid design, retains exact created/prior SDK references, records immutable receipts and closes only its own fixture under strict guards. This replaces Python bootstrap for parameter qualification without claiming `new_design` parity. No startup autoload or network endpoint.+2. **Native blank `new_design`.** Validate request and bounds, reserve journal/result/identity capacity, then create once outside Command events under a checked neutral-command guard. Adopt the exact returned reference, verify parent/product/type/intent/unsaved state, and retain requested-name metadata without renaming. Unsupported `box` must refuse before admission; transaction capability remains unqualified until ported. Expose the narrower versioned native contract.+3. **Owned discard and exact-ID activation.** Separate explicit journaled operations; no active/name fallback and no bulk close. A live non-transferable ownership receipt is required for discard. Activation accepts exact current identity and a checked expected active identity. Restoring the previous active document is an explicit bounded step whose failure cannot obscure successful close.+4. **Legacy completion.** Port transaction probe and bounded recovery witness, box construction and complete inspection; then independently qualify general save/close semantics. Do not block useful blank/native parameter tests on this larger parity step.++## Ownership and identity changes++`identity::Registry::with_document` currently verifies that a leased member remains valid after its closure. It is suitable for parameter work and activation, but successful close deliberately invalidates its target. Do not bypass this check or close through that API and treat the resulting registry fault as success. Add dedicated owner-thread creation/adoption and retirement transitions with the same exclusive reentrancy guard.++Proposed internal types, not committed API:++- `CreationReservation`: non-Clone, bound to registry allocation and epoch; reserves one serial/member slot, one owned-scratch entry, and bounded receipt storage before any SDK effect. If the 256-document registry or smaller scratch limit is full, fail before `add`. Abandoning a pre-effect reservation can release capacity; post-effect uncertainty cannot evict it.+- `CreationAttempt`: reports whether invocation began, call acknowledgement, and an optional retained exact SDK lease separately from inspection errors. Preallocate the C++ lease holder before `add`. If a valid handle is returned, store it before fallible JSON/string/readback work; never let a plain `Result<Handle>` discard the only ownership proof on later failure.+- `OwnedScratch`: private live authority bound to registry epoch, journal session/create operation/request digest, exact adopted ID and retained SDK reference, original native name, initial saved/data-file observations, and supported cleanup-profile witness. Serialized receipts expose evidence, never a reconstructible native handle or authority.+- `CloseAttempt`: consumes one effect permission, invokes exact-object `close(false)` at most once, then verifies invalidity and absence in a bounded complete roster. Successful retirement removes that ID permanently. Ambiguity retains a quarantined ownership entry and forbids another close invocation under that attempt.++Creation's returned reference must match exactly one member of a complete stable post-create roster by SDK equality. Never adopt the current active object, a same-name object, a matching `creationId`, or the only list difference. Reserve the serial before invocation; keep returned references quarantined if membership/metadata verification fails. A partial roster is not evidence of absence. Nested callbacks, allocation failures, serial overflow, duplicates and release failures retain conservative fault behavior; no SDK handle crosses to the worker thread.++Public scratch acquisition requires both a coherent durable current-session successful creation receipt and the live ownership entry. A failed/unknown creation may retain a private recovery lease for diagnosis; it does not become a normal public scratch capability. Across restart, history remains readable but old scratch ownership expires. A fresh runtime must not re-adopt or close old documents using journal contents or attributes alone.++## Guards and outcomes++Before both preflight and actual create/close, check owner thread, SDK validity, bounded complete roster, and command state. Dispatch from a non-Command callback; accept only an empirically qualified exact neutral command ID, initially `SelectCommand`, with a successful getter. Unknown/empty IDs need separate qualification rather than being silently mapped to idle. If launch from Scripts Manager reports another command, refuse. A command-start event fence may strengthen this guard later, but event tracking cannot retroactively prove an already-running transaction absent. No automatic abort, `doEvents`, Undo, or `PTransaction` around lifecycle calls.++Owned discard requires exact live ownership, exact active object, unchanged original unnamed native name, `isSaved=false`, null `dataFile` with successful getter, and a supported expected-content witness. `creationId` is an additional consistency check only. A renamed/saved/replaced object or failed getter refuses before `close`. Never select a sibling object when a guard fails. If closing the last document creates a replacement Untitled, record that distinct unowned identity and leave it alone.++The first cleanup profile should be deliberately small: one component, no geometry/sketches/occurrences/features/derived or external resources, no other live preview lease, and bounded numeric user parameters. The product cleanup witness must combine root revision, complete supported parameter state/default units, and explicit empty-model/resource checks, recorded after each owned mutation. Refuse unknown or unsupported state. The r7 parameter digest alone does not prove that arbitrary user modeling work is absent; if coverage cannot be established, leave edited scratch discard unavailable instead of pretending the digest is complete. The isolated test fixture permits the expressly authorized parameter edits and clearly reports its narrower cleanup profile.++| Observation | Report and next action |+| --- | --- |+| Guard/deadline/capacity refusal before SDK invocation | Not executed; no document effect. |+| `add` invoked but throws/returns null, or identity cannot be retained | Unknown; retain available evidence, stop creation admission, never create again automatically. |+| Exact created reference retained but readback/adoption fails | Unknown with private quarantined lease; no normal public ownership claim and no guessed rollback. |+| Creation fully observed, terminal persistence/clock fails | Observed nondurable result; keep exact lease and evidence, reconciliation required. No replay. |+| Close returns true and exact object is invalid and absent in a complete roster | Observed closed; retire ID, retain close receipt, then attempt any separately authorized exact prior activation. |+| Close returns false/throws or contradicts readback | Unknown, including a false acknowledgement with apparent absence; retain raw acknowledgement and actual observation, no second close. |+| Activation returns true and actual active object equals requested exact reference | Observed activation success. Same-name equality is insufficient. |+| Activation is declined, throws, or readback fails | Report ambiguous/refused activation separately; do not try another object or conceal an already-observed create/close. |++Restoration must not steal focus from a document the user activated meanwhile: restore only if the currently active identity still matches the workflow's expected state and the retained prior object is still a unique current member. If that condition changed, leave the user's active document alone and report restoration skipped. Never re-open a closed previous document.++## Journal and shutdown integration++Retain the current coordinator sequence: bounded canonical request → durable admission/dispatch → read-only preflight → durable start → second owner-thread execution with guards repeated → observe result before terminal persistence. Reserve worst-case result bytes before effects. Creation has no pre-existing target; its start record must honestly contain operation kind, baseline/current active identity and reservation evidence, rather than inventing a target document. All owned data returned to the worker is bounded and `Send`.++Creation, close and activation have separate operation identities. Repeated same-ID/same-digest requests read status; conflicts refuse, and neither grants a new effect permission. The observer survives HTTP timeout. Use retained unknown handling for post-invocation ambiguity; do not persist an ordinary failed terminal that implies a known outcome. Durable terminal records remain authoritative. Old-session nonterminal records stay interrupted/unknown, and process-local ownership cannot be reconstructed from them. Retention/SQLite failure prevents new effects, without silently discarding already-observed receipts.++SDK lease release is not `Document.close`. Runtime stop must not close all owned or user documents implicitly. Complete explicit scratch cleanup while the service/SDK dispatcher is alive, or report the fixture as still open. Preserve existing shutdown order and uncertainty rules: stop admission, settle/cancel queue work safely, join owned workers without a main-thread callback dependency, unregister the custom event once, release all registry leases once on the owner thread, then close the SDK context. In-flight/reentrant callbacks must refuse unsafe stop. If event removal or reference release is unconfirmed, retain code/callback storage and report reconciliation; do not unload underneath retained SDK pointers or retry uncertain deletion. Add owned-resource counts/disposition to stop receipts without conflating “references released” with “documents discarded.”++## Concrete qualification cases++| Layer | Required behavioral cases |+| --- | --- |+| Pure Rust lifecycle decisions | Reject wrong thread/command/epoch/receipt, saved/renamed/replaced targets, missing prior document, active identity drift, stale witness, nonempty/unsupported model; parameter-only allowed profile; bounds and reservation exhaustion before effect. |+| Instrumented SDK backend | Exact returned-object adoption among duplicate names/creation IDs; add changes active document unexpectedly; null/throw after effect; post-create enumeration failure; nested callbacks; serial overflow; close false/throw with both still-open and actually-closed outcomes; false activation with same-name sibling active. Count each mutator invocation and each lease release. |+| Journal/fault boundary | Failure before admission/start produces zero SDK mutations; failed terminal write/clock retains created/closed observation; lost acknowledgement never retries; duplicate/conflicting operation IDs; HTTP deadline followed by late SDK result; fresh-session historical records cannot claim ownership. |+| Cleanup witness | User adds geometry, component, sketch, custom graphics, external/derived resources, saves, renames, changes a parameter, or switches active document between the two SDK hops: unsafe close is absent from call log. Parameter test fixture cleanup accepts only its documented bounded profile. |+| Independent Rust verifier | Drive public lifecycle contract, compare before/after exact object sets, retain all unrelated documents, verify same-name decoys untouched, preserve immutable receipt bytes on repeated start/stop, and verify no extra document after duplicate creation request. Product builder tests alone are insufficient. |+| Windows SDK fixture | Manually load exact frozen DLL; create one never-saved unnamed fixture; verify type/intent/parent/identity and unchanged original documents; run the parameter campaign; close the retained fixture once and verify absence; restore exact prior active object. No rename/cloud save/command cancellation/capture. Unknown command/refusal stops the run. |+| Stop/unload | Pending-before-claim cancellation, in-flight observation settlement, nested stop refusal, uncertain close/resource release, stopped HTTP admission, exact event removal, all owner-thread references released, no automatic document deletion, fresh runtime cannot reuse receipt authority. |++Release evidence must distinguish offline model tests, Windows typed SDK compilation, isolated fixture execution, product lifecycle execution, and complete legacy parity. The fixture is temporary qualification tooling; it does not count as a released `new_design`, general close, or animation/presentation lifecycle feature.
native-rust/docs/NATIVE-MCMASTER-DISCOVERY.mdadded+23
@@ -0,0 +1,23 @@+# Native McMaster discovery and read-target classification++R15 is based on the exact frozen R14 product manifest in `BASELINE-R14-PRODUCT-FREEZE1.txt` (SHA256 `01f0c503e58894d36c12b4de94e2acbbf3cc2e6aa6938d15283fbfb908139864`). Prior checkpoints are unchanged. This slice adds Rust read-only command discovery and typed document-selector refusal. It does not add supplier command execution, downloads, purchased-part insertion, material assignment, or full legacy parity.++Send `POST /v1/mechanical` with authenticated current transport epoch and `X-Adom-Mechanical-Contract: native-purchased-discovery-v1`:++```json+{"op":"mcmaster_discover","sessionId":"<current 32-hex runtime epoch>","target":{"documentId":"<current opaque d:... ID>"}}+```++The optional `target.revision` must match a prior discovery result. Target keys are limited to `documentId` and `revision`; active-document/name/index fallback is unavailable. `sessionId` is required even though this is a read. The operation takes no journal claim and creates no operation-history record. Existing operations still accept their original headers; the new header also accepts them. `mcmaster_open` and `cad_import` remain unsupported before queue/journal admission.++Rust requests two complete equal typed observations. The adapter reads the exact target's `Design.designIntent()` and looks up only `InsertMcMasterCarrComponentCommand` through `Application.userInterface().commandDefinitions().itemById(...)`. If present, its ID must equal that literal and `isNative()` must be true; its name must have at most4096 UTF-8 bytes and no NUL. Unknown intent values are refused. Registration can be absent without being an SDK error. No enumeration of all command definitions, execute call, GUI interaction, download, design conversion, activation, network request or material access occurs.++The result includes `target`, `revisionScope`, `commandId`, `available`, nullable `name`/`definitionIsNative`, `designIntent` (`part`, `assembly`, `hybrid`), `designIntentCode`, and `hybridTarget`. `available` means registered native command definition only. It never means the command applies to this target or the supplier is online. Explicit execution/download/applicability/online flags remain false. Requirements report hybrid design, supplier access and interactive selection. The revision is a SHA256 projection over current epoch, exact opaque document ID, intent and registration fields; it is not a model/geometry revision or durable command identity. A changed two-read projection fails; there is no stabilization retry.++The legacy reference is `exploded-preview-preparation/runtime-dev9-build-r1/source/addin/AdomBridge/commands/mechanical/purchased.py` functions `mcmaster_discover` and `mcmaster_open`. This port preserves the exact legacy command ID while distinguishing discovery from launch. Installed SDK headers used for the typed adapter: `Core/UserInterface/CommandDefinitions.h` (`itemById` returns null if missing), `CommandDefinition.h` (`id`, `name`, `isNative`), and `Fusion/Fusion/Design.h`/`Fusion/FusionTypeDefs.h` (`designIntent`, preview values0/1/2). The hidden applicability getter is intentionally not used. Immediate SDK errors are observed once with bounded ABI stage/code/text; no error reset is introduced. The adapter retains that diagnostic in its internal error, while the existing HTTP unknown-read path returns the generic `native_inspection_unavailable` response. Publishing richer bounded HTTP diagnostics remains a separate improvement.++Read-only target selection now distinguishes proven malformed IDs, foreign runtime epochs, never-published IDs and retired IDs. Error codes are `native_document_target_malformed`, `native_document_target_foreign_epoch`, `native_document_target_not_registered` and `native_document_target_retired`. Their HTTP400 result includes `readTargetRefused:true`, `readBackendInvoked:false`, `nativeExecutionStarted:false`, and `reconciliationRequired:false`; it does not invent an operation terminal or `not_executed` history record. Malformed/foreign/cached-absent IDs require no SDK call. A current ID removed during a successful full registry refresh is also refused before the operation backend, although that refresh necessarily performed registry SDK reads. Failed/incomplete refresh and backend errors remain unavailable/unknown rather than being relabeled as retirement. Write/effect paths still use their existing guarded `with_document` flow.++Meaningful checks cover bounded command registration, absent commands/all intents, two-pass changes and both failure positions, stale and document/epoch-bound revisions, pre-backend argument refusals, zero SDK/material-backend calls for known selectors, newly observed retirement, fault preservation, and actual authenticated loopback routing. The socket test proves old-header and unsupported-launch refusal before wake/queue, read-only task admission with the new header, and no operation journal record. Unit fixtures are not independent proof that the installed McMaster command is registered or available in a live Fusion build; actual Windows SDK build and read-only app qualification are still required.++Freeze2 now includes the separately reviewed M12-fix2 profile-getter ordering correction through exact copies and narrow merges. Parent authorized source integration/build work while actual-app qualification remains pending; the propagation receipt binds its source and preserved newer capabilities. Existing unknown operations remain untouched. The read-only client cannot qualify extrusion effects.
native-rust/docs/NATIVE-ROOT-PHYSICAL.mdadded+65
@@ -0,0 +1,65 @@+# Native root physical-property projection++R16 adds the read-only `assembly_properties` subset under+`X-Adom-Mechanical-Contract: native-root-physical-v1`. It requires current+`sessionId` and an exact published current-document ID. `target.revision` is+optional initially and may guard the returned `root-physical-projection-v1:...`.+Explicit `entity` (including null), unknown target fields and mismatched sessions+are refused before queue/backend work. The inherited typed selector gate refuses+malformed, foreign, never-published and retired IDs before this backend. Existing+R15 headers and all previous operation behaviors remain; the new header is also+accepted for those operations.++Example body (substitute actual runtime values):++```json+{"op":"assembly_properties","sessionId":"<epoch>","target":{"documentId":"<exact opaque document ID>"}}+```++Finite scope is a hybrid, unconfigured Design's exact local root component with+no occurrences, mesh bodies, non-solid/transient/proxy bodies or arbitrary entity+selection. Each typed owner-thread call retains at most128 native bodies in a+fixed local array, verifies exact parents, uniqueness, full ordered membership+and validity, counts at most20000 total faces, and only then asks the root for+HighCalculationAccuracy properties. No SDK pointer crosses the ABI or worker+boundary and no lasting SDK holder is added. Every retained body and root is+rechecked against fresh exact document/design/root membership after calculation;+counts, solid/native/parent facts and design scope are rechecked. Root revision+is sampled before all those reads and after the final check.++Rust requires stable nonempty root revisions and two equal full observations.+It validates numeric finiteness/signs and checked conversion before JSON output:+mass kg, volume cm3×1000→mm3, area cm2×100→mm2, center cm×10→mm. Average density is+observed mass divided by converted volume (kg/mm3); it is null only for observed+zero volume. The empty root is not fabricated: SDK failure/null physical results+remain failures. Nonempty roots require positive volume/area. Supplier labels or+BOM provenance do not establish actual assigned/default material density.++Returned data contains target/revision, revisionScope, mass, volume, area,+centerOfMass, averageDensity, units, bodyCount, calculationAccuracy, sdkAccuracyCode,+materialBasis, and explicit assemblyOccurrencesSupported:false,+arbitraryEntitySelectionSupported:false, legacyParity:false. This is not full+assembly-property parity. The revision is this bounded physical projection, not+a whole-document geometry/material change token. It does not qualify unsupported+features, configurations, occurrence transforms or per-entity references.++The installed SDK documents high accuracy as enum2 and +/-0.1% error; repeat+floating-point equality is a conservative consistency gate, not proof of exact+analytic geometry or repeatability on every model. No tolerance relaxation,+calculation retry, material setter, command execution or geometry edit is used.+Unknown SDK/bounds/membership/calculation errors retain unavailable/unknown read+semantics (including immediate SDK status/stage/code/bounded diagnostic text).+A known stale returned projection revision produces400. Earlier shared document+SDK helpers can report only their original status; the adapter does not invent+missing diagnostic data or reset/read errors again. No journal write/admission or+effect permission arises from this read. Existing mutation dispatch is unchanged.++Official references, cross-checked against installed C++ declarations:++- [PhysicalProperties](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_PhysicalProperties.htm) defines mass kg, volume cm3 and area cm2.+- [Component.getPhysicalProperties](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Component_getPhysicalProperties.htm) takes an explicit calculation accuracy.+- [PhysicalProperties.centerOfMass](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_PhysicalProperties_centerOfMass.htm) returns the actual center point; SDK geometry lengths use internal centimeters.++Linux policy/socket tests and binding/syntax checks do not qualify the actual+SDK's empty-root, material-mass or two-pass behavior. Root's Windows/actual-app+qualification and independent numeric/material observer are still required.
native-rust/docs/NATIVE-SKETCH-LINE-STATE.mdadded+63
@@ -0,0 +1,63 @@+# Exact isolated line-state prerequisite++POST `/v1/mechanical` with `X-Adom-Mechanical-Contract: native-sketch-line-state-v1`:++```json+{"op":"native_sketch_line_state","sessionId":"<current epoch>","target":{"documentId":"<exact current document>","revision":"<optional sketch-line-state-projection-v1 SHA256>"},"sketchId":"<retained native sketch>","entityId":"<already published exact line ID>"}+```++Obtain the entity ID through `native_sketch_entities` after one fully confirmed+`sketch_geometry` containing exactly one ordinary line. Native root-origin sketch+creation, successful geometry and exact entity publication must all belong to the+current runtime/document. No name/token/coordinate/collection-index adoption or+implicit active-document target is accepted. Shape/session/header refusals occur+before dispatch; unpublished, foreign and guessed line selectors are rejected+before line-backend access.++Finite scope requires an active parametric hybrid unconfigured design, exactly+one root sketch and its single final timeline item, one nonconstruction native+line, exactly two distinct nonorigin endpoints plus the exact origin point, no+profiles, text, attributes, constraints or dimensions. Root bodies/features/+occurrences/meshes must be zero and the design must contain only its root component.+Each endpoint's connectedEntities list must contain exactly the retained line;+the origin must have no connections. Line/endpoints must not be referenced or+have a referenced entity. All four entities' parent, validity, native context,+relationship/dimension lists and attributes are inspected. The origin's special+reference/fixed state is observed rather than fabricated.++Fixed/fully-constrained flags are returned: `unfixedLineAndEndpoints:false` is a+useful observation, not permission to force/unfix anything. Units are centimeters.+Coordinates must be finite, within10000cm and lie on sketch Z=0; endpoints must+remain distinct from origin and each other with at least1e-5cm separation. The+complete actual points collection is matched by SDK object equality, not position.+Only three fixed-capacity endpoint/origin references can be retained beneath the+existing sketch holder. Repeated reads must match them and never replace them;+release uses the existing child-before-parent uncertainty fence.++Two complete captures agree, including the root/sketch summaries, actual line+geometry, all bounded flags and points; additional summaries bracket each capture.+A SHA256 `sketch-line-state-projection-v1` binds exact document/sketch/entity ID and+observed state. Graph-only/fixed-state changes alter this revision even if an SDK+revision is unchanged. A stale expected revision refuses without retiring a valid+identity. Failed/changed captures retire published entity access rather than+silently rebound to another endpoint with equal coordinates.++Response includes exact target/sketch/entity IDs, root and sketch summaries,+`lineState`, `isolatedInventoryComplete:true`, `constraintMutationSupported:false`,+`legacyParity:false` and the scope string. Completeness applies only to this finite+zero-relationship inventory, not arbitrary sketches or a general solver graph.+No endpoint IDs are published. Existing partial `native_sketch_entities` semantics+remain unchanged.++SDK read failure/panic/unstable capture remains an unavailable/unknown read (503),+with numeric stage/error and bounded diagnostic text when captured by the new+adapter. No journal record or CAD write is issued. Shared inherited sketch guards+can fail before the new diagnostic getter sequence; their original error remains,+but full per-getter diagnostics for those inherited guards are not claimed.+No tolerance, automatic retry, API-error reset or success substitution is added.++Installed headers checked: SketchEntity parentSketch/isFixed/isReference/+referencedEntity/isFullyConstrained/is2D/geometricConstraints/sketchDimensions;+SketchPoint connectedEntities; SketchLine startSketchPoint/endSketchPoint;+GeometricConstraints addHorizontal/addVertical; HorizontalConstraint/VerticalConstraint+line. Mutation getters are documented for the continuation only and are not called.
native-rust/docs/NATIVE-SKETCH-RELATIONS.mdadded+100
@@ -0,0 +1,100 @@+# Finite horizontal/vertical constraint contract++Use `X-Adom-Mechanical-Contract: native-sketch-relations-v1`. All older headers+remain accepted for their existing operations; this new header is required for+the two new capabilities. The shared legacy operation name does not imply full+legacy constraint parity. `coincident`, parallel, tangent, dimensions, fix/unfix,+multiple entities, existing constraints and arbitrary graph adoption are refused.++First create one native root-origin sketch and insert one nonconstruction sloped+line, away from the axes and origin. Publish its exact returned ID through+`native_sketch_entities`, then obtain `native_sketch_line_state`. Its complete+finite projection must show no constraints, dimensions, reference links, text,+attributes, other geometry, root features/bodies/occurrences/meshes or additional+components. The line and both endpoints must be unfixed and not fully constrained.+Only this single sketch's final timeline item may exist. XY/XZ/YZ are supported+in sketch coordinates; no model-space substitution or plane inference is used.++```json+{+  "op":"sketch_constraint", "sessionId":"<current epoch>", "operationId":"<new id>",+  "target":{"documentId":"<doc>","revision":"<line-state revision>"},+  "sketch":{"documentId":"<doc>","revision":"<same revision>","objectType":"Sketch","sketchId":"<id>"},+  "type":"horizontal",+  "entities":[{"documentId":"<doc>","revision":"<same revision>","objectType":"SketchLine","sketchId":"<same id>","entityId":"<published exact line id>"}]+}+```++Use `vertical` for the other supported direction. Revision is the exact+`sketch-line-state-projection-v1:<sha256>` value, not a sketch summary/entity+projection or SDK revision alone. Target/ref identities and revisions must agree.+Argument/type/arity/header failures occur before journal admission. Preflight+checks two complete projections and neutral command state. The serialized worker+reserves result capacity and durably records Executing before the owner-thread+execute repeats the complete projection, then invokes exactly one SDK add method.++Before invocation the existing sketch holder has fixed typed horizontal/vertical+slots and a generic relationship view; the attempt latch is set once. The exact+typed SDK return is stored before generic conversion, diagnostics or readback.+No allocation of a new registry slot follows the effect. Readback checks both+typed and generic returned relationships, exact parent sketch/native context,+exact linked retained line, complete whole-sketch constraint membership and+per-line/endpoint relationships. Endpoints and origin retain exact typed SDK+objects; origin has no relationships/connections. Each endpoint's relationship+list may contain zero or one reference to this exact returned constraint; no+other object is accepted. Repeated reads do not add holders. All these child+references remain beneath the existing sketch/document lifetime and release fence.++Postconditions require one requested relationship, healthy nondeferred sketch,+unchanged plane/frame/name/counts and out-of-scope resources, unchanged origin,+finite nondegenerate line and the requested alignment. Coordinates are bounded+by10000cm, length at least1e-5cm; alignment residual at most1e-8cm. Initial dx/dy+and each endpoint's distance from each axis are at least1e-4cm. Endpoints may move+according to the solver. Length and endpoint placement are deliberately not+specified by a single orientation constraint. No approximation is used for SDK+identity or the repeated projection equality.++Neutral-command checks and exact parent revision bracket repeated post-effect+relationship/geometry observations, with the final root comparison last. Success+returns `data.target`, `data.root`, `data.sketch`, and `data.relationState` with+`kind` 0=none,1=horizontal,2=vertical and the full `line` inventory in centimeters.+Its revision is `sketch-relations-projection-v1:<sha256>`. No public constraint ID+or endpoint ID is introduced. The old line ID still refers to its exact original+object; its observed geometry may now differ. Existing partial entity inspection+can publish the new geometry projection without adopting a new object.++Read the result again with:++```json+{"op":"native_sketch_relations","sessionId":"<epoch>","target":{"documentId":"<doc>","revision":"<optional relation revision>"},"sketchId":"<id>","entityId":"<exact line id>"}+```++This read accepts zero constraints or the one exact relationship returned by this+runtime, never an externally added equivalent relation. Failed/changed reads+retire entity access. Stale guards refuse without retirement. The older R17+line-state read remains zero-constraint only: its `constraintMutationSupported:false`+is scoped to that older contract; use the new capabilities/header to mutate.+Calling that older read after adding a relation is outside its supported inventory+and may retire its entity access. Use the relation read after mutation.++Any error/null/panic after add invocation remains unknown and poisons the sketch+book. A confirmed first observation is retained if a later read/command check+fails. If no add was invoked, the result is known not-executed. Exact duplicate+operation IDs return the existing journal result; differing requests conflict.+Terminal storage loss retains the process-local observed result without granting+replay. An HTTP deadline does not discard a claimed operation's later completion.+No automatic relation deletion, rollback, solver retry or success substitution.++Tests cover instrumented both-direction behavior, wrong/extra graph, fixed/axis/+aligned input, origin movement, changed reads, command/getter panics, unknown add,+precise selector/stale bounds, real HTTP contract gates and no journal for reads,+file-backed durable start/replay/conflict/DB disappearance and late completion.+They do not establish actual Fusion solver behavior. Real host qualification+needs fresh independently owned isolated sloped lines and a relation-aware cleanup+fixture; existing geometry fixtures do not authorize this mutation.++SDK semantics checked against installed `GeometricConstraints.h`,+`HorizontalConstraint.h`, `VerticalConstraint.h`, `SketchEntity.h`,+`GeometricConstraint.h`, `SketchPoint.h` and+[Autodesk's constraints reference](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_GeometricConstraints.htm)+and [typed horizontal line getter](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/HorizontalConstraint_line.htm).
native-rust/docs/NEXT-HORIZONTAL-VERTICAL.mdadded+66
@@ -0,0 +1,66 @@+# Prepared finite mutation continuation++The R17 line-state read is the prerequisite, not a completed constraint port.+Implement the next slice separately without weakening R17's zero-constraint read+contract or existing headers. All solver placement is observed, never promised+unique. No downstream bodies/dimensions/foreign graph, implicit origin mutation,+projection imports, rollback or retry.++Use a new explicit native-sketch-relations-v1 contract. Accept only legacy+sketch_constraint type horizontal or vertical, one exact published SketchLine,+matching target/sketch/entity document+revision+IDs and current session/operation.+Require the current sketch-line-state projection, one unfixed/nonreference line+and unfixed endpoints, no existing relationship or dimension, complete isolated+root scope. Initially require a sloped line away from both axes/origin and a+bounded nondegenerate span; redundant/already-aligned input refuses before effect.+Prevalidate arity/type/ref fields before journal admission. Preflight obtains the+complete R17 projection; retain result capacity, durably dispatch/start through+the existing journal coordinator, then exact revalidation on the owner thread.++New SDK ABI needs one `Ptr<GeometricConstraint>` slot below AfSketchRef and a+once-only attempted latch reserved before calling addHorizontal/addVertical.+Assign the return directly into that slot before checking the acknowledgement.+A null return, exception or failed SDK status after invocation is unknown; no+retry, deletion or fake rollback. Stop/release must preserve the existing child+uncertainty fence.++The post-effect reader must be a separate relation-aware typed projection: exact+returned relationship remains valid/current, parentSketch and assemblyContext+match, and typed HorizontalConstraint.line/VerticalConstraint.line equal the+original retained line. Enumerate the complete sketch constraint collection,+requiring precisely that one object. For line/endpoint per-entity lists allow+only that exact returned relationship and reject every other object; independently+observe which endpoint lists include it (do not assume they all do). Origin must+still have zero connections/relationships. Dimensions/foreign resources remain+absent; exact start/end/origin SDK objects and complete point membership persist.++Report final coordinates and typed relationship evidence. Verify the requested+horizontal residual dy=0 or vertical residual dx=0, finite sketch-plane geometry+and nonzero span; no unchanged endpoint placement or length claim without a+separate length constraint. Origin and every out-of-scope resource remain unchanged.+Require healthy nondeferred sketch and two final agreeing full relation captures,+with root revision baseline after acknowledged solver creation, and final root+comparison last. A single successful pointer, health or fullyConstrained flag+alone is insufficient. Preserve all confirmed add/readback stages if a later+getter, clock, terminal commit or callback fails; retained unknown never authorizes+replay. Journal replay/conflict/storage-loss/deadline paths must use actual existing+coordinator tests, not only isolated policy fakes.++Expose a distinct read-only native_sketch_relations route/revision for this finite+0-or-owned-1 relationship graph. R17 line-state remains zero-relationship only,+so clients should not call that older scope after successful mutation. Keep current+line entity IDs as exact ownership references, with updated relation revision; no+new endpoints or arbitrary graph adoption. Avoid broadening old contract silently.++Concrete tests: false healthy geometry; wrong returned relationship/parent/line;+endpoint replacement with identical coordinates; unrelated origin motion; extra+constraint; solver return-null/ack error; post-add panic and final-read disagreement;+capacity before call; foreign/stale/arity/ref/current-session refusal before SDK;+late completion retained; durable replay/conflict no duplicate add; failed commit+retains observed relation without replay. Real Fusion needs fresh independently+owned sloped lines on XY/XZ/YZ for both directions and relationship-aware cleanup+fixtures. Existing geometry fixtures do not authorize constraint mutation.++R18 continuation note: this prepared plan is now implemented within the finite+scope in `docs/NATIVE-SKETCH-RELATIONS.md`. The original R17 source remains frozen.+Actual SDK/solver qualification remains a separate gate.
native-rust/docs/PORTING-LEDGER.jsonadded+9116
@@ -0,0 +1,9116 @@+{+  "schemaVersion": 1,+  "asOf": "2026-10-14",+  "scope": "r7 starting parity ledger, frozen r6 qualification baseline; in-progress r7 implementations require later source-bound evidence promotion",+  "independence": "Verifier previously authored native document identity and Windows storage hardening; not r7 mechanical or HTTP effect implementation. Reused structural role, no fresh-context/model-diversity claim.",+  "sourceRoots": {+    "legacy": "/home/adom/project/research/fusion-roadmap-build-2026-10-02/exploded-preview-preparation/runtime-dev9-build-r1/source",+    "rust": "/home/adom/project/research/fusion-roadmap-build-2026-10-02/rust-native-migration-r7",+    "baseline": "/home/adom/project/research/fusion-roadmap-build-2026-10-02/rust-native-migration-r6"+  },+  "inputs": {+    "rustSchema": {+      "path": "mechanical/schema.json",+      "sha256": "6f704e05de031fa8ef329dc7be0b02d3a2b167eeb2fbc44ec6c2d933af4f7b48",+      "bytes": 185782+    },+    "legacySchema": {+      "path": "addin/AdomBridge/commands/mechanical/schema.json",+      "sha256": "6f704e05de031fa8ef329dc7be0b02d3a2b167eeb2fbc44ec6c2d933af4f7b48",+      "bytes": 185782+    },+    "legacyDispatcher": {+      "path": "addin/AdomBridge/commands/mechanical/__init__.py",+      "sha256": "79c9b3b0ae2e73ce6149b17242c60d68a0ed34d03e4eb04caddeeb85e71b325a",+      "bytes": 10874+    },+    "legacyHostCatalog": {+      "path": "contracts/describe.json",+      "sha256": "70f3e2d8f2d4ffb6603c8a62478f149593f6ca19aa9a910dc26a02b607d0b7ba",+      "bytes": 665236+    },+    "r6Status": {+      "path": "RUST-STATUS.md",+      "sha256": "2faa6ee5d056b4f269bdf3d358a483dbcde1f68bfabcfdc6bf15acd11ab709be",+      "bytes": 9463+    },+    "operationMap": {+      "path": "verification/native-operations/operation-map.tsv",+      "sha256": "7966bbe24b4889df724e2359d5fefbc045795a059488c42aa72079d21bccc45d",+      "bytes": 9128+    },+    "hostRetirementMap": {+      "path": "verification/native-operations/host-retirement.json",+      "sha256": "8a1067f97ceba8fc549dffe6106baf3abdc8892fcebe4730c9ddc6742bb16377",+      "bytes": 6969+    }+  },+  "counts": {+    "mechanicalContracts": 61,+    "unconditionalWrites": 46,+    "reads": 14,+    "conditionalHealth": 1,+    "pythonFiles": 60,+    "currentPythonAddinFiles": 47,+    "embeddedPythonRuntimeFiles": 10,+    "retiredHostReferenceFiles": 1,+    "pythonAuthoringPackagingFiles": 2,+    "retiredMissingHostImports": 9,+    "pythonCategories": {+      "addin_runtime_lifecycle": 2,+      "contract_authoring_tool": 1,+      "development_packaging": 1,+      "dynamic_python_execution": 1,+      "embedded_runtime_python": 10,+      "mechanical_runtime": 23,+      "mechanical_runtime_backend": 1,+      "nonmechanical_addin_runtime": 20,+      "retired_host_reference_optional_fallback": 1+    },+    "addinDispatcherEntries": 65,+    "hostPythonDispatcherEntries": 50,+    "hostCatalogVerbs": 179,+    "mechanicalNativeHandlersQualifiedAtR6": 0,+    "publicNativeReleases": 0+  },+  "statusRules": [+    "Schema/contract validation does not implement or authorize a handler.",+    "Source handler presence does not prove legacy runtime or SDK behavior was reexecuted in this audit.",+    "Group-level contract tests do not prove each handler or every variant.",+    "Native unit, external protocol, Windows SDK build, actual Fusion and public release are separate gates.",+    "r6 live document inventory/status delivery does not qualify mechanical inspect or CAD effects.",+    "A narrower supported subset must remain explicit; never promote entire schema from one successful variant.",+    "No Python-free claim while dynamic code, embedded templates, optional sidecar/dependencies or installer/bootstrap paths remain."+  ],+  "mechanicalOperations": [+    {+      "name": "assembly_properties",+      "family": "assembly",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "assembly_properties",+        "line": 395,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Assembly physical properties and native units/readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/assembly_properties",+        "required": [+          "op",+          "target"+        ],+        "properties": [+          "entity"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "bom",+      "family": "purchased_bom",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/bill_of_materials.py",+        "function": "bom",+        "line": 98,+        "sha256": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0",+        "behavior": "Definition identity, nested instance quantities, configuration suppression and purchased collapse; physical totals remain independent of purchasing exclusions."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/bom",+        "required": [+          "op",+          "target"+        ],+        "properties": [+          "explodePurchased"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "bom_export",+      "family": "purchased_bom",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/bill_of_materials.py",+        "function": "bom_export",+        "line": 103,+        "sha256": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0",+        "behavior": "Flat or structured CSV, configuration provenance, spreadsheet formula neutralization and staged publication; file effect is not model rollback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/bom_export",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "filename"+        ],+        "properties": [+          "filename",+          "overwrite",+          "explodePurchased",+          "mode"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/mode",+            "values": [+              "flat",+              "structured"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "cad_import",+      "family": "purchased_bom",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/purchased.py",+        "function": "cad_import",+        "line": 40,+        "sha256": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1",+        "behavior": "Bounded local STEP/SAT import into a wrapper component, hash/provenance validation, body and document-set readback; no download or cloud upload."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/cad_import",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "filename",+          "provenance"+        ],+        "properties": [+          "filename",+          "sha256",+          "name",+          "parent",+          "transform",+          "provenance",+          "asPurchased"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "component_create",+      "family": "assembly",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "component_create",+        "line": 131,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Create component occurrence with metadata and verified placement/context."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/component_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "name"+        ],+        "properties": [+          "parent",+          "name",+          "transform",+          "metadata"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "component_metadata",+      "family": "assembly",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "component_metadata",+        "line": 204,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Edit component definition purchasing/identity metadata with readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/component_metadata",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "changes"+        ],+        "properties": [+          "component",+          "changes"+        ],+        "description": "Update component-definition name/part number/description and persistent supplier or BOM attributes. Shared occurrences all see this metadata.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "configuration_inspect",+      "family": "configuration",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/configurations.py",+        "function": "inspect",+        "line": 320,+        "sha256": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0",+        "behavior": "Read configuration table, active row, typed cells, source links and explicit completeness; no configuration activation or editing."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/configuration_inspect",+        "required": [+          "op",+          "target"+        ],+        "properties": [],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "construction_axis",+      "family": "geometry",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/geometry.py",+        "function": "construction_axis",+        "line": 250,+        "sha256": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939",+        "behavior": "Create supported construction axis with guarded source geometry and readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/construction_axis",+        "required": [+          "op",+          "target",+          "sessionId",+          "operationId",+          "type",+          "entities"+        ],+        "properties": [+          "component",+          "type",+          "entities",+          "creationOccurrence",+          "name"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/type",+            "values": [+              "edge",+              "circular_face",+              "two_planes",+              "two_points"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "entity_delete",+      "family": "geometry",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/features.py",+        "function": "entity_delete",+        "line": 198,+        "sha256": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d",+        "behavior": "Delete an allowed sketch/curve/point/plane/feature reference with transaction handling; not arbitrary object deletion."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/entity_delete",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "entity"+        ],+        "properties": [+          "entity"+        ],+        "description": "Delete sketch geometry or independently deletable timeline features. Model transaction and semantic recovery cover downstream failures; document and external file deletion are excluded.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "exploded_preview_create",+      "family": "presentation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/exploded_preview.py",+        "function": "create",+        "line": 463,+        "sha256": "a85a26e5dba4e3107155410723791a50a4f9c63e1c3928770325f0cfe37b6ade",+        "behavior": "Reserve finite session-owned custom graphics in an owned blank presentation design from a source-bound plan and durable creation proof."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/exploded_preview_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "sourceTarget",+          "creationOperationId",+          "expectedPlanId",+          "planner"+        ],+        "properties": [+          "sessionId",+          "target",+          "sourceTarget",+          "creationOperationId",+          "expectedPlanId",+          "planner"+        ],+        "description": "Create finite copied solid-BRep presentation graphics in the exact active blank unsaved Design proven by a committed current-session new_design result. Regenerates the guarded source plan; leaves source active. Exclusive session lease, no source moves/visibility writes, no model transaction, automatic document close, render or capture. Live capability and native backend qualification are separate from durable operation receipts.",+        "enumVariants": [+          {+            "path": "/properties/planner/properties/unit",+            "values": [+              "mm"+            ]+          },+          {+            "path": "/properties/planner/properties/steps/items/properties/moves/items/properties/frame",+            "values": [+              "world",+              "parent",+              "local"+            ]+          },+          {+            "path": "/properties/planner/properties/playback",+            "values": [+              "explode",+              "assemble"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "exploded_preview_dispose",+      "family": "presentation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/exploded_preview.py",+        "function": "dispose",+        "line": 475,+        "sha256": "a85a26e5dba4e3107155410723791a50a4f9c63e1c3928770325f0cfe37b6ade",+        "behavior": "Dispose only the controller's owned graphics/lease; history does not authorize adopting live resources after restart."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/exploded_preview_dispose",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "previewId",+          "expectedGeneration"+        ],+        "properties": [+          "sessionId",+          "target",+          "previewId",+          "expectedGeneration"+        ],+        "description": "Delete only the exact retained graphics tree and leave the blank document open for caller. Supports a narrowly proven cleanup after unresolved terminal storage without rewriting that history; no global Undo or close. Requires the current controller capability, presentation target, generation and a durable operation ID. Old-session native resources are never rebound.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "exploded_preview_inspect",+      "family": "presentation",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/exploded_preview.py",+        "function": "inspect",+        "line": 479,+        "sha256": "a85a26e5dba4e3107155410723791a50a4f9c63e1c3928770325f0cfe37b6ade",+        "behavior": "Inspect the current controller capability, ownership and live resources; not reconstructed from terminal history."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/exploded_preview_inspect",+        "required": [+          "op",+          "sessionId",+          "previewId"+        ],+        "properties": [+          "sessionId",+          "previewId"+        ],+        "description": "Main-thread live preview ownership/geometry/history observation. Cached operation receipts do not establish current graphics liveness. Old-session history remains separately readable through mech_operation_status; no native reference adoption or lifecycle repair is provided here.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "exploded_preview_sample",+      "family": "presentation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/exploded_preview.py",+        "function": "sample",+        "line": 467,+        "sha256": "a85a26e5dba4e3107155410723791a50a4f9c63e1c3928770325f0cfe37b6ade",+        "behavior": "Apply a finite sampled pose to owned presentation graphics; source model is not moved."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/exploded_preview_sample",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "previewId",+          "expectedGeneration",+          "sampleIndex"+        ],+        "properties": [+          "sessionId",+          "target",+          "previewId",+          "expectedGeneration",+          "sampleIndex"+        ],+        "description": "Apply one server-stored absolute sample to exact-owned graphics; preserve active document. Source must remain unchanged. Requires the current controller capability, presentation target, generation and a durable operation ID. Old-session native resources are never rebound.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "exploded_preview_show",+      "family": "presentation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/exploded_preview.py",+        "function": "show",+        "line": 471,+        "sha256": "a85a26e5dba4e3107155410723791a50a4f9c63e1c3928770325f0cfe37b6ade",+        "behavior": "Show owned presentation resources with controller ownership checks; no unbounded playback timer."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/exploded_preview_show",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "previewId",+          "expectedGeneration"+        ],+        "properties": [+          "sessionId",+          "target",+          "previewId",+          "expectedGeneration"+        ],+        "description": "Explicitly activate the exact-owned presentation in Fusion; refuse an intervening foreign active document. No OS foreground, camera change or capture. Requires the current controller capability, presentation target, generation and a durable operation ID. Old-session native resources are never rebound.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "exploded_view_plan",+      "family": "presentation",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/exploded_view.py",+        "function": "exploded_view_plan",+        "line": 184,+        "sha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f",+        "behavior": "Read-only bounded translation plan with exact instance hierarchy, local/parent/world frames and source/configuration binding; no native object movement."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/exploded_view_plan",+        "required": [+          "op",+          "sessionId",+          "target",+          "unit",+          "steps"+        ],+        "properties": [+          "sessionId",+          "target",+          "unit",+          "steps",+          "sampleTimes",+          "playback"+        ],+        "description": "Read-only source-bound exploded assembly plan. Normalized translation directions in immutable home world/parent/local axes; simultaneous moves within ordered steps. Descendants inherit ancestor translations once, plus own moves. Bounded deterministic sample matrices and exact home reverse endpoint. No native moves, graphics, BOM quantity changes, render/video or storyboard creation. Complete configuration identity required.",+        "enumVariants": [+          {+            "path": "/properties/unit",+            "values": [+              "mm"+            ]+          },+          {+            "path": "/properties/steps/items/properties/moves/items/properties/frame",+            "values": [+              "world",+              "parent",+              "local"+            ]+          },+          {+            "path": "/properties/playback",+            "values": [+              "explode",+              "assemble"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "export",+      "family": "export",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/operations.py",+        "function": "export",+        "line": 226,+        "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd",+        "behavior": "Guarded model export delegated to exporting.py with staged file publication and explicit format support."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/export",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "outputPath"+        ],+        "properties": [+          "format",+          "outputPath",+          "overwrite",+          "refinement"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/format",+            "values": [+              "step",+              "stl",+              "3mf",+              "f3d",+              "iges",+              "sat",+              "smt",+              "usdz",+              "fbx",+              "skp"+            ]+          },+          {+            "path": "/properties/refinement",+            "values": [+              "low",+              "medium",+              "high"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "feature_create",+      "family": "features",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/features.py",+        "function": "feature_create",+        "line": 43,+        "sha256": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d",+        "behavior": "Extrude, revolve, fillet, chamfer, shell, hole, loft, sweep, combine, split, move, mirror, rectangular/circular pattern, draft and thread variants."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/feature_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "type"+        ],+        "properties": [+          "type",+          "component",+          "name",+          "profiles",+          "distance",+          "direction",+          "taper",+          "bodies",+          "operation",+          "axis",+          "angle",+          "edges",+          "radius",+          "tangentChain",+          "faces",+          "thickness",+          "points",+          "diameter",+          "depth",+          "path",+          "body",+          "tools",+          "keepTools",+          "plane",+          "extend",+          "translation",+          "origin",+          "count",+          "spacing",+          "axis2",+          "count2",+          "spacing2",+          "internal",+          "threadType",+          "designation",+          "threadClass",+          "modeled"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/type",+            "values": [+              "extrude",+              "revolve",+              "fillet",+              "chamfer",+              "shell",+              "hole",+              "loft",+              "sweep",+              "combine",+              "split",+              "move",+              "mirror",+              "rectangular_pattern",+              "circular_pattern",+              "draft",+              "thread"+            ]+          },+          {+            "path": "/oneOf/0/properties/type",+            "values": [+              "extrude"+            ]+          },+          {+            "path": "/oneOf/0/properties/direction",+            "values": [+              "positive",+              "negative",+              "symmetric"+            ]+          },+          {+            "path": "/oneOf/0/properties/operation",+            "values": [+              "new_body",+              "join",+              "cut",+              "intersect"+            ]+          },+          {+            "path": "/oneOf/1/properties/type",+            "values": [+              "revolve"+            ]+          },+          {+            "path": "/oneOf/1/properties/axis/oneOf/0",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/1/properties/operation",+            "values": [+              "new_body",+              "join",+              "cut",+              "intersect"+            ]+          },+          {+            "path": "/oneOf/2/properties/type",+            "values": [+              "fillet"+            ]+          },+          {+            "path": "/oneOf/3/properties/type",+            "values": [+              "chamfer"+            ]+          },+          {+            "path": "/oneOf/4/properties/type",+            "values": [+              "shell"+            ]+          },+          {+            "path": "/oneOf/5/properties/type",+            "values": [+              "hole"+            ]+          },+          {+            "path": "/oneOf/6/properties/type",+            "values": [+              "loft"+            ]+          },+          {+            "path": "/oneOf/6/properties/operation",+            "values": [+              "new_body",+              "join",+              "cut",+              "intersect"+            ]+          },+          {+            "path": "/oneOf/7/properties/type",+            "values": [+              "sweep"+            ]+          },+          {+            "path": "/oneOf/7/properties/operation",+            "values": [+              "new_body",+              "join",+              "cut",+              "intersect"+            ]+          },+          {+            "path": "/oneOf/8/properties/type",+            "values": [+              "combine"+            ]+          },+          {+            "path": "/oneOf/8/properties/operation",+            "values": [+              "join",+              "cut",+              "intersect"+            ]+          },+          {+            "path": "/oneOf/9/properties/type",+            "values": [+              "split"+            ]+          },+          {+            "path": "/oneOf/9/properties/plane/oneOf/0",+            "values": [+              "xy",+              "xz",+              "yz"+            ]+          },+          {+            "path": "/oneOf/10/properties/type",+            "values": [+              "move"+            ]+          },+          {+            "path": "/oneOf/11/properties/type",+            "values": [+              "mirror"+            ]+          },+          {+            "path": "/oneOf/11/properties/plane/oneOf/0",+            "values": [+              "xy",+              "xz",+              "yz"+            ]+          },+          {+            "path": "/oneOf/12/properties/type",+            "values": [+              "rectangular_pattern"+            ]+          },+          {+            "path": "/oneOf/12/properties/axis/oneOf/0",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/12/properties/axis2/oneOf/0",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/13/properties/type",+            "values": [+              "circular_pattern"+            ]+          },+          {+            "path": "/oneOf/13/properties/axis/oneOf/0",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/14/properties/type",+            "values": [+              "draft"+            ]+          },+          {+            "path": "/oneOf/14/properties/plane/oneOf/0",+            "values": [+              "xy",+              "xz",+              "yz"+            ]+          },+          {+            "path": "/oneOf/15/properties/type",+            "values": [+              "thread"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "feature_edit",+      "family": "features",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/features.py",+        "function": "feature_edit",+        "line": 181,+        "sha256": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d",+        "behavior": "Edit supported existing feature parameters/properties and verify health/readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/feature_edit",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "feature"+        ],+        "properties": [+          "feature",+          "name",+          "suppressed",+          "parameters"+        ],+        "description": "Rename/suppress a feature or change expressions of model parameters whose createdBy is that exact feature; read health and abort on downstream errors.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "geometry_query",+      "family": "geometry",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/geometry.py",+        "function": "geometry_query",+        "line": 195,+        "sha256": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939",+        "behavior": "Query faces/edges/vertices using typed filters and explicit coordinate contexts; no guessed name targeting."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/geometry_query",+        "required": [+          "op",+          "target",+          "body",+          "kind",+          "space"+        ],+        "properties": [+          "body",+          "kind",+          "space",+          "selection",+          "filters",+          "maxResults"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/kind",+            "values": [+              "faces",+              "edges",+              "vertices"+            ]+          },+          {+            "path": "/properties/space",+            "values": [+              "root",+              "component"+            ]+          },+          {+            "path": "/properties/selection",+            "values": [+              "one",+              "many"+            ]+          },+          {+            "path": "/properties/filters/properties/type",+            "values": [+              "Plane",+              "Cylinder",+              "Cone",+              "Sphere",+              "Torus",+              "NurbsSurface",+              "Line3D",+              "Arc3D",+              "Circle3D",+              "Ellipse3D",+              "EllipticalArc3D",+              "NurbsCurve3D",+              "Point3D",+              "degenerate"+            ]+          },+          {+            "path": "/properties/filters/properties/direction/properties/orientation",+            "values": [+              "same",+              "parallel"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "health",+      "family": "foundation",+      "access": "read_or_recompute_write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/operations.py",+        "function": "check_health",+        "line": 220,+        "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd",+        "behavior": "Read feature health; recompute:true is a journaled write and requires current target/session/operation identity."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/health",+        "required": [+          "op",+          "target"+        ],+        "properties": [+          "recompute"+        ],+        "description": "Read timeline warnings/errors. recompute:true also requires current target revision, sessionId and operationId.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "inspect",+      "family": "foundation",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/operations.py",+        "function": "inspect",+        "line": 13,+        "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd",+        "behavior": "Inspect active Design entities, parameters, transforms, health, joints and configuration; r6 document-list inventory is not this operation."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/inspect",+        "required": [+          "op"+        ],+        "properties": [],+        "description": "Inspect the active Design without mutation. Returns target identity/revision, native component-space bodies and occurrence transforms, parameters and feature health.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "first_slice_in_progress_unqualified",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "inspect_entity",+      "family": "geometry",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/operations.py",+        "function": "inspect_entity",+        "line": 58,+        "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd",+        "behavior": "Exact guarded entity resolution with type-specific readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/inspect_entity",+        "required": [+          "op",+          "target",+          "entity"+        ],+        "properties": [+          "entity"+        ],+        "description": null,+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "interference",+      "family": "assembly",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "interference",+        "line": 410,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Native assembly interference query with validated entity context."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/interference",+        "required": [+          "op",+          "target",+          "entities"+        ],+        "properties": [+          "entities",+          "includeTouching",+          "volumeTolerance"+        ],+        "description": "Analyze root-context occurrences/body proxies; returns overlap volume mm3 or touching. Does not create interference bodies.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "joint_create",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "joint_create",+        "line": 320,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Create supported as-built joint, motion/limits and attachment readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/joint_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "type",+          "occurrenceOne",+          "occurrenceTwo"+        ],+        "properties": [+          "type",+          "occurrenceOne",+          "occurrenceTwo",+          "geometry",+          "axis",+          "name",+          "suppressed",+          "rotationLimits",+          "slideLimits",+          "rotationValue",+          "slideValue",+          "primarySlideLimits",+          "primarySlideValue",+          "secondarySlideLimits",+          "secondarySlideValue",+          "pitchLimits",+          "pitchValue",+          "rollLimits",+          "rollValue",+          "yawLimits",+          "yawValue",+          "slideAxis"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/type",+            "values": [+              "rigid",+              "revolute",+              "slider",+              "cylindrical",+              "pin_slot",+              "planar",+              "ball"+            ]+          },+          {+            "path": "/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/properties/axis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/properties/slideAxis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/0/properties/type",+            "values": [+              "rigid"+            ]+          },+          {+            "path": "/oneOf/1/properties/type",+            "values": [+              "revolute"+            ]+          },+          {+            "path": "/oneOf/1/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/oneOf/1/properties/axis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/2/properties/type",+            "values": [+              "slider"+            ]+          },+          {+            "path": "/oneOf/2/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/oneOf/2/properties/axis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/3/properties/type",+            "values": [+              "cylindrical"+            ]+          },+          {+            "path": "/oneOf/3/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/oneOf/3/properties/axis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/4/properties/type",+            "values": [+              "pin_slot"+            ]+          },+          {+            "path": "/oneOf/4/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/oneOf/4/properties/axis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/4/properties/slideAxis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/5/properties/type",+            "values": [+              "planar"+            ]+          },+          {+            "path": "/oneOf/5/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/oneOf/5/properties/axis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/6/properties/type",+            "values": [+              "ball"+            ]+          },+          {+            "path": "/oneOf/6/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "joint_delete",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "joint_delete",+        "line": 357,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Delete exact joint reference with transaction handling."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/joint_delete",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "joint"+        ],+        "properties": [+          "joint"+        ],+        "description": "Delete one selected Joint or AsBuiltJoint with recovery verification.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "joint_edit",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "joint_edit",+        "line": 346,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Edit as-built joint motion/limits and verify resulting state."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/joint_edit",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "joint"+        ],+        "properties": [+          "joint",+          "name",+          "suppressed",+          "rotationLimits",+          "slideLimits",+          "rotationValue",+          "slideValue",+          "primarySlideLimits",+          "primarySlideValue",+          "secondarySlideLimits",+          "secondarySlideValue",+          "pitchLimits",+          "pitchValue",+          "rollLimits",+          "rollValue",+          "yawLimits",+          "yawValue"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "joint_origin_create",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/regular_joints.py",+        "function": "joint_origin_create",+        "line": 438,+        "sha256": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434",+        "behavior": "Create joint origin with guarded attachment/frame selectors and parameter readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/joint_origin_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "geometry"+        ],+        "properties": [+          "component",+          "name",+          "geometry",+          "flipped",+          "xAxisEntity",+          "zAxisEntity",+          "angle",+          "offsetX",+          "offsetY",+          "offsetZ"+        ],+        "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).",+        "enumVariants": [+          {+            "path": "/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "joint_origin_delete",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/regular_joints.py",+        "function": "joint_origin_delete",+        "line": 480,+        "sha256": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434",+        "behavior": "Delete exact joint-origin reference."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/joint_origin_delete",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "origin"+        ],+        "properties": [+          "origin"+        ],+        "description": "Delete a native joint origin; unhealthy downstream joints cause transaction rollback.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "joint_origin_edit",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/regular_joints.py",+        "function": "joint_origin_edit",+        "line": 457,+        "sha256": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434",+        "behavior": "Edit joint-origin attachment/axes/parameters and verify."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/joint_origin_edit",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "origin"+        ],+        "properties": [+          "origin",+          "name",+          "geometry",+          "flipped",+          "xAxisEntity",+          "zAxisEntity",+          "angle",+          "offsetX",+          "offsetY",+          "offsetZ"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/geometry/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "material_assign",+      "family": "purchased_bom",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/purchased.py",+        "function": "material_assign",+        "line": 116,+        "sha256": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1",+        "behavior": "Assign exact material ID from selected library/design to native component/body definition; verify ID, not display name."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/material_assign",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "entity",+          "materialId"+        ],+        "properties": [+          "entity",+          "libraryId",+          "materialId"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "material_list",+      "family": "purchased_bom",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/purchased.py",+        "function": "material_list",+        "line": 101,+        "sha256": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1",+        "behavior": "Bounded material/library discovery with query, matching count and completeness."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/material_list",+        "required": [+          "op",+          "target"+        ],+        "properties": [+          "libraryId",+          "query",+          "limit"+        ],+        "description": "List loaded material libraries and matching materials by stable library/material IDs. Omit libraryId for document materials.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "mcmaster_discover",+      "family": "purchased_bom",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/purchased.py",+        "function": "mcmaster_discover",+        "line": 81,+        "sha256": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1",+        "behavior": "Discover Fusion's InsertMcMasterCarrComponentCommand and requirements; not supplier search or purchasing."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/mcmaster_discover",+        "required": [+          "op"+        ],+        "properties": [],+        "description": "Discover Fusion native Insert McMaster-Carr command and requirements in the active design.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "mcmaster_open",+      "family": "purchased_bom",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/purchased.py",+        "function": "mcmaster_open",+        "line": 90,+        "sha256": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1",+        "behavior": "Launch native interactive McMaster command in a guarded hybrid design; launch acknowledgment is not insertion completion, transaction or unattended download."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/mcmaster_open",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target"+        ],+        "properties": [],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "measure",+      "family": "geometry",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/geometry.py",+        "function": "measure",+        "line": 107,+        "sha256": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939",+        "behavior": "Native distance/angle measurement with supported geometry and witness points/contexts."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/measure",+        "required": [+          "op",+          "target",+          "type",+          "space",+          "entities"+        ],+        "properties": [+          "type",+          "space",+          "entities"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/type",+            "values": [+              "distance",+              "angle"+            ]+          },+          {+            "path": "/properties/space",+            "values": [+              "root"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "motion_link_create",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/motion_links.py",+        "function": "motion_link_create",+        "line": 98,+        "sha256": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99",+        "behavior": "Create native motion link between guarded supported joint motions."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/motion_link_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "jointOne",+          "motionOne",+          "motionTwo",+          "valueOne",+          "valueTwo"+        ],+        "properties": [+          "jointOne",+          "jointTwo",+          "name",+          "motionOne",+          "motionTwo",+          "valueOne",+          "valueTwo",+          "reversed"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/motionOne",+            "values": [+              "rotation",+              "slide",+              "primarySlide",+              "secondarySlide",+              "pitch",+              "roll",+              "yaw"+            ]+          },+          {+            "path": "/properties/motionTwo",+            "values": [+              "rotation",+              "slide",+              "primarySlide",+              "secondarySlide",+              "pitch",+              "roll",+              "yaw"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "motion_link_delete",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/motion_links.py",+        "function": "motion_link_delete",+        "line": 148,+        "sha256": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99",+        "behavior": "Delete exact motion-link reference."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/motion_link_delete",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "link"+        ],+        "properties": [+          "link"+        ],+        "description": "Delete a root-owned motion link under the same transaction/recovery contract.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "motion_link_edit",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/motion_links.py",+        "function": "motion_link_edit",+        "line": 117,+        "sha256": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99",+        "behavior": "Edit motion-link parameters and verify exact native readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/motion_link_edit",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "link"+        ],+        "properties": [+          "link",+          "suppressed",+          "name",+          "motionOne",+          "motionTwo",+          "valueOne",+          "valueTwo",+          "reversed"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/motionOne",+            "values": [+              "rotation",+              "slide",+              "primarySlide",+              "secondarySlide",+              "pitch",+              "roll",+              "yaw"+            ]+          },+          {+            "path": "/properties/motionTwo",+            "values": [+              "rotation",+              "slide",+              "primarySlide",+              "secondarySlide",+              "pitch",+              "roll",+              "yaw"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "new_design",+      "family": "foundation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/operations.py",+        "function": "new_design",+        "line": 97,+        "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd",+        "behavior": "Create unnamed unsaved parametric hybrid Design, optional parameter-driven box; requested name is metadata. Failure cleanup discards only the newly created unsaved document."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/new_design",+        "required": [+          "op",+          "sessionId",+          "operationId"+        ],+        "properties": [+          "name",+          "box"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "first_slice_in_progress_unqualified",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "occurrence_delete",+      "family": "assembly",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "occurrence_delete",+        "line": 188,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Delete an exact occurrence without conflating component definitions or sibling instances."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/occurrence_delete",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "occurrence"+        ],+        "properties": [+          "occurrence"+        ],+        "description": "Delete one selected occurrence through the shared transaction executor.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "occurrence_insert",+      "family": "assembly",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "occurrence_insert",+        "line": 144,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Insert another instance of an existing component with verified transform/context."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/occurrence_insert",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "component"+        ],+        "properties": [+          "component",+          "parent",+          "transform",+          "independentCopy"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "occurrence_update",+      "family": "assembly",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "occurrence_update",+        "line": 160,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Update occurrence placement/visibility/grounding with state and transform checks."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/occurrence_update",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "occurrence"+        ],+        "properties": [+          "occurrence",+          "transform",+          "grounded",+          "groundedToParent"+        ],+        "description": "Set occurrence pose in its assembly context and capture position; explicit grounding/ungrounding. Grounded or constrained transforms fail with recovery.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "parameter_batch",+      "family": "foundation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/features.py",+        "function": "parameter_batch",+        "line": 213,+        "sha256": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d",+        "behavior": "Grouped parameter create/set/delete variants with transaction/recompute/readback; deletion is limited to deletable user parameters. No generic atomic-batch claim for all operations."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/parameter_batch",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "changes"+        ],+        "properties": [+          "changes"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/changes/items/oneOf/0/properties/action",+            "values": [+              "create"+            ]+          },+          {+            "path": "/properties/changes/items/oneOf/0/properties/unit",+            "values": [+              "mm",+              "deg",+              "kg",+              ""+            ]+          },+          {+            "path": "/properties/changes/items/oneOf/1/properties/action",+            "values": [+              "set"+            ]+          },+          {+            "path": "/properties/changes/items/oneOf/2/properties/action",+            "values": [+              "delete"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "first_slice_in_progress_unqualified",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "parameter_create",+      "family": "foundation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/operations.py",+        "function": "parameter_create",+        "line": 192,+        "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd",+        "behavior": "Create a typed user parameter, recompute, verify health and compensate failure with a recovery witness."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/parameter_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "name",+          "expression",+          "unit"+        ],+        "properties": [+          "name",+          "expression",+          "unit",+          "comment"+        ],+        "description": null,+        "enumVariants": [+          {+            "path": "/properties/unit",+            "values": [+              "mm",+              "deg",+              "kg",+              ""+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "first_slice_in_progress_unqualified",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "parameter_set",+      "family": "foundation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/operations.py",+        "function": "parameter_set",+        "line": 166,+        "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd",+        "behavior": "Set parameter expression, recompute, verify health and restore old expression on failure with semantic recovery readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/parameter_set",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "name",+          "expression"+        ],+        "properties": [+          "name",+          "expression"+        ],+        "description": "Set an expression, recompute and inspect health. Failure restores old expression and reports a semantic recovery witness; not an atomic transaction.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "first_slice_in_progress_unqualified",+        "parity": "unqualified",+        "evidence": [],+        "note": "Root reports first r7 slice initially has no legacy compensation/recovery parity; do not infer it from success-only readback."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "plane_create",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketches.py",+        "function": "plane_create",+        "line": 219,+        "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c",+        "behavior": "Create supported construction plane from guarded selector and offset."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/plane_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "type"+        ],+        "properties": [+          "type",+          "plane",+          "component",+          "offset",+          "axis",+          "angle",+          "name"+        ],+        "description": "Create offset plane (offset in mm) or angled plane around axis (angle in deg).",+        "enumVariants": [+          {+            "path": "/properties/type",+            "values": [+              "offset",+              "angle"+            ]+          },+          {+            "path": "/properties/plane/oneOf/0",+            "values": [+              "xy",+              "xz",+              "yz"+            ]+          },+          {+            "path": "/properties/axis/oneOf/0",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/oneOf/0/properties/plane/oneOf/0",+            "values": [+              "xy",+              "xz",+              "yz"+            ]+          },+          {+            "path": "/oneOf/0/properties/type",+            "values": [+              "offset"+            ]+          },+          {+            "path": "/oneOf/1/properties/plane/oneOf/0",+            "values": [+              "xy",+              "xz",+              "yz"+            ]+          },+          {+            "path": "/oneOf/1/properties/type",+            "values": [+              "angle"+            ]+          },+          {+            "path": "/oneOf/1/properties/axis/oneOf/0",+            "values": [+              "x",+              "y",+              "z"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "regular_joint_create",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/regular_joints.py",+        "function": "regular_joint_create",+        "line": 349,+        "sha256": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434",+        "behavior": "Create regular joint from exact attachments, alignment/motion/lock settings; verify frames and placements."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/regular_joint_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "type",+          "geometryOne",+          "geometryTwo"+        ],+        "properties": [+          "type",+          "axis",+          "name",+          "rotationLimits",+          "slideLimits",+          "rotationValue",+          "slideValue",+          "primarySlideLimits",+          "primarySlideValue",+          "secondarySlideLimits",+          "secondarySlideValue",+          "pitchLimits",+          "pitchValue",+          "rollLimits",+          "rollValue",+          "yawLimits",+          "yawValue",+          "slideAxis",+          "geometryOne",+          "geometryTwo",+          "angle",+          "offset",+          "flipped",+          "locked"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/type",+            "values": [+              "rigid",+              "revolute",+              "slider",+              "cylindrical",+              "pin_slot",+              "planar",+              "ball"+            ]+          },+          {+            "path": "/properties/axis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/properties/slideAxis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/properties/geometryOne/oneOf/0/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/properties/geometryTwo/oneOf/0/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "regular_joint_edit",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/regular_joints.py",+        "function": "regular_joint_edit",+        "line": 377,+        "sha256": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434",+        "behavior": "Edit regular joint parameters/motion/lock with attachment and pose validation."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/regular_joint_edit",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "joint"+        ],+        "properties": [+          "joint",+          "geometryOne",+          "geometryTwo",+          "type",+          "axis",+          "slideAxis",+          "angle",+          "offset",+          "offsetX",+          "offsetY",+          "flipped",+          "locked"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/geometryOne/oneOf/0/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/properties/geometryTwo/oneOf/0/properties/keyPoint",+            "values": [+              "center",+              "start",+              "middle",+              "end"+            ]+          },+          {+            "path": "/properties/type",+            "values": [+              "rigid",+              "revolute",+              "slider",+              "cylindrical",+              "pin_slot",+              "planar",+              "ball"+            ]+          },+          {+            "path": "/properties/axis",+            "values": [+              "x",+              "y",+              "z"+            ]+          },+          {+            "path": "/properties/slideAxis",+            "values": [+              "x",+              "y",+              "z"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "render_scene_inspect",+      "family": "presentation",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/render_scene.py",+        "function": "render_scene_inspect",+        "line": 318,+        "sha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55",+        "behavior": "Bounded scene/environment observation and detached camera preparation; never starts render, writes scene settings or proves complete revision-to-pixels identity."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/render_scene_inspect",+        "required": [+          "op",+          "sessionId",+          "target"+        ],+        "properties": [+          "sessionId",+          "target",+          "maxEnvironments",+          "camera"+        ],+        "description": "Guarded main-thread read of current viewport camera, render settings and up to 32 environments. Optional detached world-mm camera is constructed and read back without viewport assignment. Missing fields return PARTIAL; observationComplete covers only bounded available scope. sceneWitnessComplete and renderQualified remain false. No rendering, workspace activation or scene writes.",+        "enumVariants": [+          {+            "path": "/properties/camera/oneOf/0/properties/type",+            "values": [+              "orthographic"+            ]+          },+          {+            "path": "/properties/camera/oneOf/0/properties/space",+            "values": [+              "world"+            ]+          },+          {+            "path": "/properties/camera/oneOf/0/properties/unit",+            "values": [+              "mm"+            ]+          },+          {+            "path": "/properties/camera/oneOf/1/properties/type",+            "values": [+              "perspective"+            ]+          },+          {+            "path": "/properties/camera/oneOf/1/properties/space",+            "values": [+              "world"+            ]+          },+          {+            "path": "/properties/camera/oneOf/1/properties/unit",+            "values": [+              "mm"+            ]+          },+          {+            "path": "/properties/camera/oneOf/1/properties/angleUnit",+            "values": [+              "deg"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "rigid_group_create",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "rigid_group_create",+        "line": 364,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Create rigid group over exact occurrences with native membership readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/rigid_group_create",+        "required": [+          "op",+          "target",+          "sessionId",+          "operationId",+          "occurrences"+        ],+        "properties": [+          "occurrences",+          "includeChildren",+          "name"+        ],+        "description": "Create a native rigid group from exact occurrence instances; includeChildren defaults true.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "rigid_group_delete",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "rigid_group_delete",+        "line": 388,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Delete an exact rigid-group reference."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/rigid_group_delete",+        "required": [+          "op",+          "target",+          "sessionId",+          "operationId",+          "group"+        ],+        "properties": [+          "group"+        ],+        "description": "Delete an exact rigid group with transaction recovery.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "rigid_group_edit",+      "family": "joints",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+        "function": "rigid_group_edit",+        "line": 374,+        "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+        "behavior": "Edit rigid group membership/settings with native readback."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/rigid_group_edit",+        "required": [+          "op",+          "target",+          "sessionId",+          "operationId",+          "group"+        ],+        "properties": [+          "group",+          "name",+          "suppressed"+        ],+        "description": "Rename or suppress an exact rigid group with transaction recovery.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_constraint",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketches.py",+        "function": "sketch_constraint",+        "line": 146,+        "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c",+        "behavior": "Create supported geometric constraint on exact sketch entities."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_constraint",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "sketch",+          "type",+          "entities"+        ],+        "properties": [+          "sketch",+          "type",+          "entities"+        ],+        "description": "Constrain entities in one sketch. midpoint order is point,line; symmetry order entity1,entity2,symmetryLine. fix sets one entity fixed.",+        "enumVariants": [+          {+            "path": "/properties/type",+            "values": [+              "horizontal",+              "vertical",+              "coincident",+              "parallel",+              "perpendicular",+              "tangent",+              "equal",+              "concentric",+              "collinear",+              "midpoint",+              "symmetry",+              "fix"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_create",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketches.py",+        "function": "sketch_create",+        "line": 75,+        "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c",+        "behavior": "Create sketch on guarded plane/component selector."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_create",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target"+        ],+        "properties": [+          "plane",+          "component",+          "name"+        ],+        "description": "Create a native component-definition sketch on an origin/construction plane or planar face. Coordinates in subsequent geometry are sketch-space mm.",+        "enumVariants": [+          {+            "path": "/properties/plane/oneOf/0",+            "values": [+              "xy",+              "xz",+              "yz"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_curve_edit",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketch_edits.py",+        "function": "sketch_curve_edit",+        "line": 30,+        "sha256": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981",+        "behavior": "Guarded trim/extend/break/split support with native topology/readback checks; full trim deletion needs explicit permission."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_curve_edit",+        "required": [+          "op",+          "target",+          "sessionId",+          "operationId",+          "sketch",+          "curve",+          "action",+          "pick"+        ],+        "properties": [+          "sketch",+          "curve",+          "action",+          "pick",+          "createConstraints",+          "allowDelete"+        ],+        "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.",+        "enumVariants": [+          {+            "path": "/properties/action",+            "values": [+              "trim",+              "extend",+              "split",+              "break"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_diagnostics",+      "family": "sketch",+      "access": "read",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketch_edits.py",+        "function": "sketch_diagnostics",+        "line": 130,+        "sha256": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981",+        "behavior": "Inspect sketch constraint/degree-of-freedom and profile diagnostics without mutation."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_diagnostics",+        "required": [+          "op",+          "target",+          "sketch"+        ],+        "properties": [+          "sketch"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_dimension",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketches.py",+        "function": "sketch_dimension",+        "line": 166,+        "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c",+        "behavior": "Create distance/horizontal/vertical/angle/radius/diameter dimensions with expression/unit validation."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_dimension",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "sketch",+          "type",+          "entities",+          "expression",+          "position"+        ],+        "properties": [+          "sketch",+          "type",+          "entities",+          "expression",+          "position",+          "parameterName"+        ],+        "description": "Add driving dimensions. Distance uses two point references; radius/diameter one curve; angle two lines. Numeric expressions use mm or deg.",+        "enumVariants": [+          {+            "path": "/properties/type",+            "values": [+              "distance",+              "horizontal",+              "vertical",+              "radius",+              "diameter",+              "angle"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_edit",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketches.py",+        "function": "sketch_edit",+        "line": 200,+        "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c",+        "behavior": "Edit supported sketch state/geometry selection with transaction/recovery behavior."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_edit",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "sketch",+          "entity",+          "changes"+        ],+        "properties": [+          "sketch",+          "entity",+          "changes"+        ],+        "description": "Move sketch points/endpoints/centers in sketch-space mm, change radius or construction/fixed flags; solver failure aborts the operation.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_geometry",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketches.py",+        "function": "sketch_geometry",+        "line": 82,+        "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c",+        "behavior": "Point, line, rectangle, circle, arc, polygon, slot and fitted spline primitives with input/unit checks."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_geometry",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "sketch",+          "items"+        ],+        "properties": [+          "sketch",+          "items"+        ],+        "description": "Create a transactionally grouped set of sketch primitives. Numeric geometry uses mm and arc sweeps/polygon angles use deg.",+        "enumVariants": [+          {+            "path": "/properties/items/items/oneOf/0/properties/type",+            "values": [+              "point"+            ]+          },+          {+            "path": "/properties/items/items/oneOf/1/properties/type",+            "values": [+              "line"+            ]+          },+          {+            "path": "/properties/items/items/oneOf/2/properties/type",+            "values": [+              "rectangle"+            ]+          },+          {+            "path": "/properties/items/items/oneOf/3/properties/type",+            "values": [+              "circle"+            ]+          },+          {+            "path": "/properties/items/items/oneOf/4/properties/type",+            "values": [+              "arc"+            ]+          },+          {+            "path": "/properties/items/items/oneOf/5/properties/type",+            "values": [+              "polygon"+            ]+          },+          {+            "path": "/properties/items/items/oneOf/6/properties/type",+            "values": [+              "slot"+            ]+          },+          {+            "path": "/properties/items/items/oneOf/7/properties/type",+            "values": [+              "spline"+            ]+          }+        ]+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_offset",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketch_edits.py",+        "function": "sketch_offset",+        "line": 94,+        "sha256": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981",+        "behavior": "Offset guarded sketch curves using native operation and verify resulting entities."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_offset",+        "required": [+          "op",+          "target",+          "sessionId",+          "operationId",+          "sketch",+          "curves",+          "distance"+        ],+        "properties": [+          "sketch",+          "curves",+          "distance",+          "topologyMatched"+        ],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "sketch_project",+      "family": "sketch",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/sketches.py",+        "function": "sketch_project",+        "line": 190,+        "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c",+        "behavior": "Project exact supported source entities into a guarded sketch and return references."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/sketch_project",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target",+          "sketch",+          "entities"+        ],+        "properties": [+          "sketch",+          "entities"+        ],+        "description": "Project selected topology into a sketch with Fusion associative projection.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    },+    {+      "name": "transaction_probe",+      "family": "foundation",+      "access": "write",+      "legacy": {+        "status": "source_handler_present_not_reexecuted",+        "path": "addin/AdomBridge/commands/mechanical/transactions.py",+        "function": "probe",+        "line": 41,+        "sha256": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f",+        "behavior": "Qualify available native transaction behavior; does not promise generic batch atomicity."+      },+      "rustContract": {+        "status": "present",+        "path": "mechanical/schema.json",+        "pointer": "/transaction_probe",+        "required": [+          "op",+          "sessionId",+          "operationId",+          "target"+        ],+        "properties": [],+        "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.",+        "enumVariants": []+      },+      "rustImplementation": {+        "frozenR6": "absent",+        "r7Status": "not_ported_in_r7_baseline",+        "parity": "unqualified",+        "evidence": [],+        "note": "In-progress source does not earn implemented or verified parity until scope and receipts are independently reviewed."+      },+      "verification": {+        "linux": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "windows": {+          "contractInventory": "r6_pass_group_level",+          "nativeHandlerUnit": "not_qualified",+          "externalHandler": "not_qualified"+        },+        "fusion": {+          "handler": "not_qualified",+          "evidence": []+        }+      },+      "publicRelease": {+        "status": "not_released",+        "evidence": []+      }+    }+  ],+  "addinDispatch": [+    {+      "name": "mechanical",+      "line": 71,+      "dispatchExpression": "handle_mechanical",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/mechanical/__init__.py",+          "line": 170+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "mech_capabilities",+      "line": 72,+      "dispatchExpression": "capabilities",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/mechanical/__init__.py",+          "line": 99+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "mech_operation_status",+      "line": 73,+      "dispatchExpression": "operation_status",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/mechanical/__init__.py",+          "line": 111+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "activity_banner",+      "line": 74,+      "dispatchExpression": "handle_activity_banner",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/activity_palette.py",+          "line": 202+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "get_app_state",+      "line": 76,+      "dispatchExpression": "handle_get_app_state",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/app_state.py",+          "line": 6+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "document_info",+      "line": 77,+      "dispatchExpression": "handle_document_info",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/document_info.py",+          "line": 28+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "activate_document",+      "line": 78,+      "dispatchExpression": "handle_activate_document",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/document_info.py",+          "line": 176+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "import_file",+      "line": 80,+      "dispatchExpression": "handle_import_file",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/import_file.py",+          "line": 21+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_step",+      "line": 81,+      "dispatchExpression": "handle_export_step",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 37+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_stl",+      "line": 82,+      "dispatchExpression": "handle_export_stl",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 38+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_3mf",+      "line": 83,+      "dispatchExpression": "handle_export_3mf",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 39+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_f3d",+      "line": 84,+      "dispatchExpression": "handle_export_f3d",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 40+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_usdz",+      "line": 85,+      "dispatchExpression": "handle_export_usdz",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 41+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_fbx",+      "line": 86,+      "dispatchExpression": "handle_export_fbx",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 42+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_dxf",+      "line": 87,+      "dispatchExpression": "handle_export_dxf",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 43+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_dwg",+      "line": 88,+      "dispatchExpression": "handle_export_dwg",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 44+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_iges",+      "line": 89,+      "dispatchExpression": "handle_export_iges",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 45+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_obj",+      "line": 90,+      "dispatchExpression": "handle_export_obj",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 46+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_sat",+      "line": 91,+      "dispatchExpression": "handle_export_sat",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 47+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_skp",+      "line": 92,+      "dispatchExpression": "handle_export_skp",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/export.py",+          "line": 48+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "get_design_info",+      "line": 93,+      "dispatchExpression": "handle_get_design_info",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/design_info.py",+          "line": 7+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "assembly_bom",+      "line": 94,+      "dispatchExpression": "handle_assembly_bom",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/assembly_bom.py",+          "line": 28+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "physical_properties",+      "line": 95,+      "dispatchExpression": "handle_physical_properties",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/physical_properties.py",+          "line": 28+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "get_parameters",+      "line": 96,+      "dispatchExpression": "handle_get_parameters",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/parameters.py",+          "line": 7+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "set_parameter",+      "line": 97,+      "dispatchExpression": "handle_set_parameter",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/parameters.py",+          "line": 70+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "take_screenshot",+      "line": 98,+      "dispatchExpression": "handle_take_screenshot",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/screenshot.py",+          "line": 38+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "electron_run",+      "line": 100,+      "dispatchExpression": "handle_electron_run",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electronics.py",+          "line": 320+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "electron_zoom",+      "line": 101,+      "dispatchExpression": "handle_electron_zoom",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electron_view.py",+          "line": 60+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "electron_pan",+      "line": 102,+      "dispatchExpression": "handle_electron_pan",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electron_view.py",+          "line": 91+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "electron_select",+      "line": 103,+      "dispatchExpression": "handle_electron_select",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electron_view.py",+          "line": 159+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "execute_text_command",+      "line": 104,+      "dispatchExpression": "handle_execute_text_command",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electronics.py",+          "line": 903+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "open_electronics",+      "line": 105,+      "dispatchExpression": "handle_open_electronics",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electronics.py",+          "line": 588+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "list_text_commands",+      "line": 106,+      "dispatchExpression": "handle_list_text_commands",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electronics.py",+          "line": 953+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "board_info",+      "line": 107,+      "dispatchExpression": "handle_board_info",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electronics.py",+          "line": 988+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_source",+      "line": 108,+      "dispatchExpression": "handle_export_source",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electronics.py",+          "line": 633+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_eagle_source",+      "line": 109,+      "dispatchExpression": "handle_export_eagle_source",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/electronics.py",+          "line": 747+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "open_lbr",+      "line": 111,+      "dispatchExpression": "handle_open_lbr",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/open_lbr.py",+          "line": 23+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_lbr",+      "line": 112,+      "dispatchExpression": "handle_export_lbr",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/open_lbr.py",+          "line": 114+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "close_document",+      "line": 114,+      "dispatchExpression": "handle_close_document",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/close_document.py",+          "line": 56+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "close_all_documents",+      "line": 115,+      "dispatchExpression": "handle_close_all_documents",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/close_document.py",+          "line": 159+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "open_schematic",+      "line": 117,+      "dispatchExpression": "handle_open_schematic",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/open_electronics_file.py",+          "line": 242+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "open_board",+      "line": 118,+      "dispatchExpression": "handle_open_board",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/open_electronics_file.py",+          "line": 257+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "show_3d_board",+      "line": 119,+      "dispatchExpression": "handle_show_3d_board",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/open_electronics_file.py",+          "line": 273+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "show_2d_board",+      "line": 120,+      "dispatchExpression": "handle_show_2d_board",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/open_electronics_file.py",+          "line": 531+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "show_schematic",+      "line": 121,+      "dispatchExpression": "handle_show_schematic",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/open_electronics_file.py",+          "line": 580+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "import_electronics",+      "line": 122,+      "dispatchExpression": "handle_import_electronics",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/open_electronics_file.py",+          "line": 397+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "save_to_cloud",+      "line": 124,+      "dispatchExpression": "handle_save_to_cloud",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 161+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "list_cloud_projects",+      "line": 125,+      "dispatchExpression": "handle_list_cloud_projects",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 246+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "list_cloud_files",+      "line": 126,+      "dispatchExpression": "handle_list_cloud_files",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 372+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "delete_cloud_file",+      "line": 127,+      "dispatchExpression": "handle_delete_cloud_file",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 523+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "create_cloud_folder",+      "line": 128,+      "dispatchExpression": "handle_create_cloud_folder",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 626+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "open_cloud_file",+      "line": 129,+      "dispatchExpression": "handle_open_cloud_file",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 891+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "open_by_urn",+      "line": 130,+      "dispatchExpression": "handle_open_by_urn",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 1731+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "check_recovery",+      "line": 131,+      "dispatchExpression": "handle_check_recovery",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 796+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "search_cloud_files",+      "line": 132,+      "dispatchExpression": "handle_search_cloud_files",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 1033+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "walk_cloud_tree",+      "line": 133,+      "dispatchExpression": "handle_walk_cloud_tree",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 1497+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_cloud_file",+      "line": 134,+      "dispatchExpression": "handle_export_cloud_file",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/cloud_documents.py",+          "line": 1486+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_bom",+      "line": 136,+      "dispatchExpression": "handle_export_bom",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/manufacturing.py",+          "line": 157+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_cpl",+      "line": 137,+      "dispatchExpression": "handle_export_cpl",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/manufacturing.py",+          "line": 316+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_gerbers",+      "line": 138,+      "dispatchExpression": "handle_export_gerbers",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/manufacturing.py",+          "line": 586+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "set_design_rules",+      "line": 139,+      "dispatchExpression": "handle_set_design_rules",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/manufacturing.py",+          "line": 771+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "export_board_image",+      "line": 140,+      "dispatchExpression": "handle_export_board_image",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/manufacturing.py",+          "line": 984+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "detect_layers",+      "line": 141,+      "dispatchExpression": "handle_detect_layers",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/manufacturing.py",+          "line": 539+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "take_silkscreen_screenshot",+      "line": 143,+      "dispatchExpression": "handle_take_silkscreen_screenshot",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/silkscreen_capture.py",+          "line": 200+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    },+    {+      "name": "run_modeling_script",+      "line": 145,+      "dispatchExpression": "handle_run_modeling_script",+      "source": "addin/AdomBridge/commands/__init__.py",+      "handlerLocations": [+        {+          "path": "addin/AdomBridge/commands/modeling.py",+          "line": 69+        }+      ],+      "r7Parity": "unqualified",+      "fusionVerification": "not_qualified",+      "release": "not_released"+    }+  ],+  "historicalPythonHostDispatch": [+    {+      "name": "describe",+      "line": 2819,+      "dispatchExpression": "lambda fi, args: describe.handle_describe(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "readiness",+      "line": 2820,+      "dispatchExpression": "_handle_fusion_readiness",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "set_preference",+      "line": 2821,+      "dispatchExpression": "_handle_set_preference",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "get_preferences",+      "line": 2822,+      "dispatchExpression": "_handle_get_preferences",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "install_fusion",+      "line": 2823,+      "dispatchExpression": "_handle_install_fusion",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "open_design",+      "line": 2824,+      "dispatchExpression": "handle_open_design",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "close",+      "line": 2825,+      "dispatchExpression": "handle_close_fusion,  # deprecated alias - use stop (graceful) / kill (force)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "stop",+      "line": 2826,+      "dispatchExpression": "handle_fusion_stop,    # graceful: close docs + WM_CLOSE, NO force-kill",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "kill",+      "line": 2827,+      "dispatchExpression": "handle_fusion_kill,    # force: taskkill /F (the desperate path)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "launch",+      "line": 2828,+      "dispatchExpression": "_handle_launch",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "start",+      "line": 2829,+      "dispatchExpression": "_handle_launch,  # alias — CLI's fusion_start delegates here on Docker",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "dismiss_recovery",+      "line": 2830,+      "dispatchExpression": "_handle_dismiss_recovery",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "relocate_recovery",+      "line": 2831,+      "dispatchExpression": "_handle_relocate_recovery",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "open_cloud_file",+      "line": 2832,+      "dispatchExpression": "_handle_open_cloud_file",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "new_electronics_from_eagle",+      "line": 2837,+      "dispatchExpression": "lambda fi, args: _handle_new_electronics_from_eagle(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "screenshot_fusion",+      "line": 2838,+      "dispatchExpression": "_handle_screenshot_fusion",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "click_fusion",+      "line": 2839,+      "dispatchExpression": "_handle_click_fusion",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "send_key",+      "line": 2840,+      "dispatchExpression": "_handle_send_key",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "close_window",+      "line": 2841,+      "dispatchExpression": "_handle_close_window",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "window_info",+      "line": 2842,+      "dispatchExpression": "_handle_window_info",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "screenshot_all",+      "line": 2843,+      "dispatchExpression": "_handle_screenshot_all_fusion",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "check_dialogs",+      "line": 2848,+      "dispatchExpression": "lambda fi, args: _with_fusion_alerts(",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "managed_library_create",+      "line": 2853,+      "dispatchExpression": "lambda fi, args: _handle_managed_library_create(fi, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "web_signin",+      "line": 2854,+      "dispatchExpression": "lambda fi, args: _handle_web_signin(fi, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "managed_library_push",+      "line": 2855,+      "dispatchExpression": "lambda fi, args: _handle_managed_library_push(fi, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "managed_library_pull",+      "line": 2856,+      "dispatchExpression": "lambda fi, args: _handle_managed_library_pull(fi, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "managed_library_link",+      "line": 2857,+      "dispatchExpression": "lambda fi, args: _handle_managed_library_link(fi, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "managed_library_unlink",+      "line": 2858,+      "dispatchExpression": "lambda fi, args: _handle_managed_library_unlink(fi, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "library_manager",+      "line": 2859,+      "dispatchExpression": "lambda fi, args: _handle_library_manager(fi, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "alerts",+      "line": 2860,+      "dispatchExpression": "lambda fi, args: {",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "addin_status",+      "line": 2870,+      "dispatchExpression": "lambda fi, args: _handle_addin_status()",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "notify_owner",+      "line": 2876,+      "dispatchExpression": "lambda fi, args: _handle_notify_owner(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_status",+      "line": 2879,+      "dispatchExpression": "lambda fi, args: aps.handle_status(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_set_client_id",+      "line": 2880,+      "dispatchExpression": "lambda fi, args: aps.handle_set_client_id(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_signin",+      "line": 2881,+      "dispatchExpression": "lambda fi, args: aps.handle_signin(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_set_browser",+      "line": 2882,+      "dispatchExpression": "lambda fi, args: aps.handle_set_browser(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_get_browser",+      "line": 2883,+      "dispatchExpression": "lambda fi, args: aps.handle_get_browser(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_forget_browser",+      "line": 2884,+      "dispatchExpression": "lambda fi, args: aps.handle_forget_browser(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_search",+      "line": 2887,+      "dispatchExpression": "lambda fi, args: _aps_guarded(aps.handle_search, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_browse",+      "line": 2888,+      "dispatchExpression": "lambda fi, args: _aps_guarded(aps.handle_browse, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_recent",+      "line": 2889,+      "dispatchExpression": "lambda fi, args: _aps_guarded(aps.handle_recent, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_file_info",+      "line": 2890,+      "dispatchExpression": "lambda fi, args: _aps_guarded(aps.handle_file_info, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_versions",+      "line": 2891,+      "dispatchExpression": "lambda fi, args: _aps_guarded(aps.handle_versions, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_download",+      "line": 2892,+      "dispatchExpression": "lambda fi, args: _aps_guarded(aps.handle_download, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_create_folder",+      "line": 2893,+      "dispatchExpression": "lambda fi, args: _aps_guarded(aps.handle_create_folder, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_upload",+      "line": 2894,+      "dispatchExpression": "lambda fi, args: _aps_guarded(aps.handle_upload, args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_open",+      "line": 2895,+      "dispatchExpression": "lambda fi, args: _aps_guarded(lambda a: _handle_aps_open(fi, a), args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "aps_get",+      "line": 2896,+      "dispatchExpression": "lambda fi, args: aps.handle_get(args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "search_cloud_files",+      "line": 2899,+      "dispatchExpression": "lambda fi, args: _handle_deprecated_cloud_search(\"search_cloud_files\", args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    },+    {+      "name": "walk_cloud_tree",+      "line": 2900,+      "dispatchExpression": "lambda fi, args: _handle_deprecated_cloud_search(\"walk_cloud_tree\", args)",+      "source": "server.py",+      "existingRust": "default_host_already_rust; historical_server_entry_not_a_current_runtime_requirement; native_addin_and_residual_branch_coverage_separate",+      "r7Parity": "unqualified"+    }+  ],+  "hostCatalog": [+    {+      "name": "fusion_account",+      "summary": "WHO Fusion is signed in as on this machine, and whether this machine currently holds the Autodesk SEAT. One subscription runs ONE active Fusion at a time, so the seat moves between machines; this is the read. Returns the signed-in account (email, name, hub), Autodesk's own licence blob (authorized, trial, expiry, reauthorize time, from Application.LicenseInformation) and holdsSeat. Read-only: never starts Fusion, never signs anybody in or out.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_action_ledger",+      "summary": "Read the append-only record of what the bridge did in the BACKGROUND on this machine - dialogs it answered, Untitled scratch docs it swept, Fusion auto-starts, add-in restarts. Survives bridge respawns (~/.adom/fusion-bridge/actions.jsonl). This is the audit trail for why something changed on the user screen.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_activate_document",+      "summary": "Make a named open document the ACTIVE one before driving it. EDIT and most modelling verbs act on whatever is active, so in a batch with several documents open this is how you stop a verb landing in the wrong file (page issue #47). Prefer passing expectDocument on the verb itself, which fails closed instead of merely re-targeting. An electronics design's schematic, board and 3D view are separate tabs with ONE name (type unknown): the reply says so in sameNameDocuments, and fusion_show_schematic / fusion_show_2d_board / fusion_show_3d_board {documentName} reach a specific view.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_addin_status",+      "summary": "Is the AdomBridge add-in loaded and answering inside Fusion? Reports addinReady, port and version, plus busy when a long command holds the main thread. If Fusion is running but this says not ready, the add-in was installed while Fusion was open - Fusion loads add-ins only at launch - so call fusion_restart_for_addin (ask the user first when one is present).",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_alerts",+      "summary": "Fusion's OWN alert toasts, read from its log. Fusion draws error/warning toasts in CEF: they are invisible to Win32 enumeration AND to UIA, so a verb can look successful while Fusion is visibly complaining. This reads them, newest last.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_apply_fusion_update",+      "summary": "Readiness EXECUTOR (Rust port, Phase 3): click Fusion's update offer IN THE BACKGROUND when auto-update is on (sticky pref; fusion_set_auto_update). Never the exit-class buttons while a host op is active. Answers {applied, button, why}.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_apply_pours",+      "summary": "Draw copper pours from a plan: POLYGON per pour (net, layer 1 or 16, outline points, isolate, rank 1..6, width, thermals, orphans), skipping any already on the board with the same net, layer and outline, then RATSNEST fills them. The reply carries Fusion's own fill per pour (filledMm2, islands) and per layer. Removing a pour is not done here.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_browse",+      "summary": "Browse hubs/projects/folders without launching Fusion.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_create_folder",+      "summary": "Create a subfolder in a project (free; needs data:create scope). Use this to make an 'Adom AI Workspace' folder + per-task subfolders so the bridge never dumps loose files in the shared project root. See fusion-cloud-hygiene.",+      "timeoutSeconds": 50,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_download",+      "summary": "Download a cloud file to the local machine (no Fusion needed).",+      "timeoutSeconds": 90,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_file_info",+      "summary": "Version history + who/when/size for a file (tip + recent versions).",+      "timeoutSeconds": 40,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_forget_browser",+      "summary": "Forget the remembered Autodesk sign-in browser (re-detect next time).",+      "timeoutSeconds": 10,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_get",+      "summary": "Raw authenticated GET against a free APS path (dev/verify helper).",+      "timeoutSeconds": 40,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_get_browser",+      "summary": "Show the remembered Autodesk sign-in browser (None until set).",+      "timeoutSeconds": 10,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_open",+      "summary": "Find a cloud design by name and open it in Fusion (any folder depth). Fire-and-poll.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_recent",+      "summary": "Most-recently-modified designs across the team hub, newest first.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_search",+      "summary": "Server-indexed search across the whole team hub: about 20-30 s hub-wide, a few seconds with projectId (not a 30-min folder walk). Budget 120 s. A ZERO from the server index is not absence: the reply then carries data.fallback (a name scan of the newest 400 items), data.completeness, and a hint to fusion_aps_browse a known sibling's folder (issue #85).",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_set_browser",+      "summary": "Remember the browser+profile that authed to Autodesk so every later sign-in reuses it (power users have many browsers/profiles; the OS default is usually the wrong one). Call after a driven sign-in succeeds.",+      "timeoutSeconds": 10,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_set_client_id",+      "summary": "Set the org's APS (PKCE) client id used for cloud search. Get it from your org's members-only wiki settings: adom-wiki settings get <org> autodesk-aps (never from another machine's config file). When the org has none yet, the reply's hint gives the adom-wiki settings set command that shares it, so every other box adopts it in two calls (fusion-aps-org-setup skill). Public identifier, no secret.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_signin",+      "summary": "Open the Autodesk sign-in in the REMEMBERED browser+profile (not the OS default); a background listener captures the token. Pass {exe,profileDir,name} to use+remember a specific browser, or {allowDefaultBrowser:true} to fall back to the OS default. If nothing is remembered, returns needsExtensionOpen so the caller opens authUrl in the user's real browser via nbrowser_open_window.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_status",+      "summary": "APS state: configured, signed in, token live, never-charge meter. When configured:false the hint sends you to your org's shared app ID on the wiki (adom-wiki settings get <org> autodesk-aps) before anything else; the fusion-aps-org-setup skill covers new boxes and first-time orgs.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_upload",+      "summary": "Upload a local file as a NEW cloud file (free Data Management; needs data:write scope). ⛔ FOLDER HYGIENE: NEVER pass a project ROOT folderId - the bridge REFUSES it (refused_root_upload). Loose files in a shared root clutter the team's cloud. Create/choose a real subfolder first (fusion_aps_create_folder under an 'Adom AI Workspace' folder), or just use fusion_make_3d_package / fusion_build_library_3d which auto-target a non-root workspace. To RELOCATE an existing file, MOVE it (preserves its urn) - do NOT delete + re-upload (mints a new urn, breaks 3D bindings). See the fusion-cloud-hygiene skill.",+      "timeoutSeconds": 90,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_aps_versions",+      "summary": "Full (uncapped) version history of a file.",+      "timeoutSeconds": 40,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_assembly_bom",+      "summary": "Structured, kit-aware MECHANICAL bill of materials for the active Design assembly (the counterpart to the electronics-only fusion_export_bom). Recurses organizational subassemblies but counts a physical part or a purchased kit/unit ONCE, so hardware modeled inside a kit (a '... with fasteners' bracket, a bearing/pulley) is NOT double-counted the way a flat allOccurrences walk counts it. Matches Fusion's Manage -> BOM quantities. Optionally writes a CSV.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_attach_3d_package",+      "summary": "LOW-LEVEL primitive: attaches ONE model to ONE package. Prefer fusion_create_library with parts[]. Attach a real 3D chip model to a library package, end to end: opens the .lbr (library active), runs Electron.Create3DPackage to enter the Package3DEnvironment showing the footprint, imports the STEP + auto-orients it flat on the footprint, then executes Package3DStop (FINISH). This BINDS the 3D onto the deviceset (Content Manager shows the 3D nested under the package; the Packages 'Package' column flips Placeholder->part-name). ONE desktop-side step remains: Fusion pops a modal Save dialog (an OWNED popup) - the response _hint gives the exact desktop_ui_click to confirm it. AFTER: re-grab desktop_screenshot_window and check ownedPopupCount for errors; the 3D preview LAGS a beat before showing the real chip. Both paths (filePath/modelPath) are WINDOWS paths - stage from the container first.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_bind_library_3d",+      "summary": "LOW-LEVEL primitive: binds ONE STEP onto one deviceset. Prefer fusion_create_library with parts[] (which handles one part or many through a single path); reach for this only when you are driving a single bind deliberately. The CORRECT library in ONE call (the Library button's real bar: the 3D chip renders in the Content Manager preview): mints the part's 3D as a cloud f3d (make_3d_package), injects the wip_urn binding into the .lbr ON DISK (packages3d + package3dinstances), and reopens the library. Needs a signed-in Fusion session - the one cloud-dependent step in the wiki-to-EE circle. Autodesk's thumbnail preview lags ~2-3 min behind a fresh mint. NOTE: distinct from the older fusion_build_library_3d (multi-part batch pipeline).",+      "timeoutSeconds": 480,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_board_bom",+      "summary": "The bill of materials from the live board's own part attributes: one line per MPN with designators, quantity, value, package, manufacturer and the Mouser, DigiKey and LCSC numbers, plus the JLCPCB form (Comment, Designator, Footprint, LCSC). Board-only parts (test pads) are listed as such, and any part missing a distributor number is named. Read-only; with outputDir it also writes bom.csv and bom-jlcpcb.csv there.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_board_info",+      "summary": "Raw board geometry XML (copper/arcs/lines) for the open board.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_board_seed",+      "summary": "Write the design a new board starts from, as EAGLE source on this machine: the board outline, the fab's design rules (Fusion's own rules block with your clearance, edge distance, minimum width and drill, hole-to-hole, pad and via restring and copper weight; Fusion's defaults are 0.35 mm drill, 1 mm to the edge and a 25 % pad restring, wrong for most fabs), the fixed parts at their places with their nets, and the library they come from. Then fusion_new_electronics_from_eagle imports it as a linked schematic and board.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_board_source",+      "summary": "Read the live board as EAGLE XML from a fresh export: parts, copper, vias, pours with Fusion's own computed fill, and the outline. Read-only. Feed it to adom-fields (it reads .brd) for current and heat, or to adom-aiflow, which converts it for its offline checks.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_board_stackup",+      "summary": "Read a board's PHYSICAL fabrication stackup (see the pcb-stackup skill): copper layer count + copper/dielectric thicknesses from the EAGLE design rules (layerSetup/mtCopper/mtIsolate) plus the measured FR4 extent. A PCB is Cu/prepreg/Cu/core/.../Cu - the FR4 is NOT one slab. Use to build the stackup table + real-thickness exploded 3D view, and put a stackup table on every exported board's wiki page.",+      "timeoutSeconds": 200,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_build_library_3d",+      "summary": "Build a RENDERING multi-part 3D library in ONE call - the whole programmatic pipeline. For each part it makes the footprint+chip f3d package (no GUI dialogs, optional before/after screenshots) and collects the wip_urn, then injects ALL bindings into the combined .lbr in one pass (no hand XML surgery) and opens the finished library once. This is the verb for a basic-parts sampler / any many-part library; it replaces the per-part make_3d_package loop + manual binding. projectId/folderId default to the MAIN-project upload folder. Each part is independent, so re-run just the failed parts if Fusion resets mid-run.",+      "timeoutSeconds": 1800,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_cancel_run",+      "summary": "STOP a library import that is in flight (fusion_install_library_bundle / fusion_create_library) - the user's escape hatch from a long run, wired to a Cancel button in web control. Cooperative, not a kill: the run finishes the part it is on (a STEP import cannot be interrupted mid-command without leaving a half-made design, up to ~60s), keeps every 3D package already minted and binds them into the library, closes its scratch documents, and leaves the library open in Fusion (not saved to the cloud). The run then reports stage:cancelled, verdict:cancelled, errorCode cancelled_by_user, cancelledAt (which stage) and how many parts were done, on the same fusion_prove_result poll the caller already makes; cancelRequested:true shows on the very next poll before the boundary is reached. Omit runId to cancel the latest run still in flight. Idempotent; a run that already ended answers alreadyFinished.",+      "timeoutSeconds": 10,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_capture_library_views",+      "summary": "Capture the LIBRARY-EDITOR views EEs trust: the schematic SYMBOL (full pinout), the FOOTPRINT (pads + layer stack), and the COMPONENT/device view (Content Manager: symbol + the package table with the footprint<->package Mapped check + pin/pad counts). The 3D before/after shots don't show these. Requires the .lbr OPEN in the Electronics Library workspace (fusion_open_lbr first). Runs EDIT <pkg>.sym/.pac/.dev + WINDOW FIT + a background hwnd screenshot per view; returns the PNG paths on the box (C:/tmp/conduit-screenshots - pull with desktop_pull_file). EDIT uses the DEVICESET name (e.g. ESP32-S3FN8).",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_change_pours",+      "summary": "Change existing pours in place: the pen width (the narrowest copper the fill can reach; a pen wider than a throat leaves it empty) and the isolation. Each pour is named by net, layer and outline, picked on the midpoint of its longest edge, then RATSNEST refills. The readback proves each pour took its new width/isolate and that no track or via changed, and reports the filled area before and after.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_check_recovery",+      "summary": "Ask whether a cloud file has a crash-recovery document waiting, which would raise Fusion's recovery modal on open. BEST-EFFORT: Fusion's Python API does not reliably expose this (apiReliable reports whether the property existed), so a false negative is possible; the dependable signal is an open that times out, and fusion_dismiss_blocking_dialogs clears the modal. Finds the file by exact name in one project folder.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_claim_seat",+      "summary": "Make THIS machine the active Fusion seat, the first-class way to move a licence between boxes while testing. Starts Fusion if needed, then answers Autodesk's 'Active Sessions Exceeded' modal in the BACKGROUND (Continue): this box takes the seat and the other machine's Fusion suspends RESUMABLY, keeping its documents. Answers needs_signin (never a credential prompt) when the box is not signed in: run fusion_signin first. Confirms with fusion_account and reports the account and licence it ended up with.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_cleanup_cloud_files",+      "summary": "PRECISELY delete a list of cloud files by lineage urn - SAFE cleanup of AI-created clutter. Deletes ONLY the exact fileIds given (never name-guessing), so it can't touch a teammate's file in a shared folder. Loops server-side. Get the ids from fusion_aps_browse (item .id). Use this to remove f3d files the bridge created. A big list takes minutes (relay may time out at ~60s while deletes continue server-side - re-browse to confirm).",+      "timeoutSeconds": 1800,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_close_all_documents",+      "summary": "Close ALL open documents without save dialogs. DESTRUCTIVE to unsaved user work - confirm with the human before calling on a box you do not own. By default it SKIPS scratch 'Untitled' docs; pass closeUntitled:true to close the UNMODIFIED ones too (page issue #59: the library/bind flow left ~5 per import, 16 after three, and no caller could clear them), and force:true to also discard MODIFIED Untitled docs, which may hold real unsaved work.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_close_document",+      "summary": "Close ONE document WITHOUT the modal save dialog (save:false discards silently - the automation-safe close). Omit name to close the active document.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_close_window",+      "summary": "Close a DIALOG window by hwnd (WM_CLOSE, like clicking X) - for dialogs without Cancel/Escape handling (e.g. Recovered Documents). NOT a document closer; refuses without hwnd. Get the hwnd from a screenshot's dialogs array or desktop_list_windows. (Doc drift caught by the verb test suite 2026-08-14: this was described as 'close the active document' while the handler required hwnd.)",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_create_cloud_folder",+      "summary": "Create a subfolder in a cloud project through the signed-in Fusion session's Data API (no APS needed). Idempotent: an existing folder of that name is returned with alreadyExisted:true instead of a duplicate. Folder names are matched case-insensitively. For an APS-side create without Fusion running, use fusion_aps_create_folder.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_create_library",+      "summary": "ONE-CALL library creation for web-control (one call = one consent). EVERY LIBRARY IS MULTI-PART - a single-part library is simply parts:[one entry], and there is no separate single-part verb to choose. Pass parts:[{package, lbrPath, modelPath}] for any number of parts; the older {libraryPath, stepPath} shape still works and is normalised into a one-element parts list, so both run the identical code path and the ETA scales with the part count either way. TWO entry shapes: A) {libraryPath, stepPath} - a ready .lbr plus the 3D; B) {kicadSymbolPath, kicadFootprintPath, stepPath, pinMap?} - KiCad sources; needs adom-lbr, which is Linux-container-only by platform rule, so on Windows/Mac boxes shape B refuses IMMEDIATELY (adom_lbr_unavailable, before any staging or Fusion launch - fusion_readiness reports kicadIngest up front). Convert at AUTHORING time in a container and use shape A. pinMap = explicit {pinName: padName} for when pin numbers do not match pad names (BGA-style). Chains convert -> bind 3D -> prove (four evidence frames + verdict) in the BACKGROUND and returns immediately; poll fusion_prove_result (stage narrates; top-level `verdict` proven/not_proven is the score - `stage:done` only means the chain finished). EVERY PART IS PROVED, not just the first: a 10-component library streams 40 evidence frames, FOUR per component (symbol, footprint, 3d, ganged) in assembly order, each tagged with `part` so a front end can group them as they arrive, and `provedParts[]` reports per-part pass/fail. The library is proven only if EVERY part is - one good part does not vouch for nine unchecked ones. On the FINAL fetch pass {inlineFrames:true} to get each evidence frame as a base64 thumbnailDataUrl a browser can render (plain polls return box paths only). The chain closes its library document on success AND failure - batches need no between-part sweeping. stepPath is required for a PROVEN library - no real 3D body without it.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_delete_cloud_file",+      "summary": "DESTRUCTIVE: delete ONE cloud file through the signed-in Fusion session's Data API. Looks in exactly one folder (projectName + folderPath, no recursion) for an exact case-insensitive name match, or for the lineage urn when fileId is given (the precise form; prefer it in shared folders). Refuses without fileName or fileId. Large folders time out on the scan; give a precise folderPath. Use fusion_cleanup_cloud_files to delete a LIST of urns with dryRun support.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_demo",+      "summary": "FIRST-TIME-USER DEMO in one verb - the thing to run when someone new wants to SEE what this bridge does (HD's installer calls this). Takes them from nothing to a real board: launches Fusion, FINISHES the Autodesk sign-in - it OPENS the sign-in in the user's NATIVE browser IN THE BACKGROUND (never interrupting their work) and returns signinWhere/signinProfile/signinSession so you can tell them exactly where it is waiting, then offer three paths: they finish it, you foreground it, or (with their OK) you drive it. Native browser via ABE/nbrowser_* because that profile is already signed into Autodesk - never pup, which is anonymous, sets up APS cloud search (or explains it if declined) and runs a LIVE sample search so they see 2-second results, then opens an electronics PROJECT and walks SCHEMATIC -> 2D BOARD -> 3D BOARD, screenshotting each view to show them. STAGED + RESUMABLE: every call advances as far as it safely can and returns stage/done/narrate/screenshots plus a _hint with the exact next action; keep calling it until done:true. NEVER leave a first-time user parked on the sign-in screen - that is the failure this verb exists to prevent. See the 'fusion-demo' skill. TOUR MODE: pass {mode:'tour'} for the ASYNC guided ELECTRONICS tour (John, 2026-09-04: Adom is an electronics prototyping company, so the tour shows electronics, never a mechanical part): eight beats over the bundled sample part - the library, the symbol, the footprint, the 3D chip minted from its STEP and bound into the user's hub, then a REAL board from the user's hub (BQ25792, the Adom charger; args.board or args.boardUrn override) in schematic, 2D board and 3D board, falling back to a generated solo board only when the hub has none, and a cloud search; multipart libraries are mentioned in the narration, never shown (a bind is minutes per part). Captions are 32px on one line so they never cover the remote. ab's glass remote (desktop_demo_panel id fusion-tour) drives it: play, pause, next, back, mute, unmute, X = stop, with an instant loopback callback plus a poll backstop, one FIFO for the panel and fusion_demo_control, an ack caption per press; captions narrate every beat and pre-rendered narration audio plays locally (mute is session-only, unmute replays the beat). Every beat is measured before it moves (front, title, painted, stable) and then moves (2D zoom through the add-in, 3D orbit and zoom through Fusion's camera, verified by capture). Returns {demoId, estimatedSec, steps} at once; fusion_demo_progress {demoId} carries step, beatIndex/beatCount, percent, paused, muted, stopping, panel, presses[], captions[], per-step verified/placed/foregrounded/motion, shots[] (one evidence frame per beat), windowsRestored and tourDocsClosed. Fusion is placed on 80% of the primary work area for the show and restored at the end. Pass legacy:true for the previous step-list tour.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_demo_progress",+      "summary": "Poll a running fusion_demo tour: {percent, elapsedSec, estimatedSec, step, stepLabel, done, failed, shots, shotCount, stepShot}. Poll ~1-2.5s and render a REAL progress bar. LIVE EVIDENCE (issue #30): each frame MAY carry stepShot {step, title, image} - a ~640px base64 capture the BRIDGE took at that step's completion, one per step, riding the first frame after it completes (render these during the run; the page should not guess-snap). shots[] streams too: mid-run it carries paths for every completed step; pass imagesAs:base64 + sinceShot:<count you have> to receive only NEW shots fully encoded. done:true = the full gallery (base64 by default). Finished tours are DISK-SNAPSHOTTED, so the final frame stays pollable even across a bridge respawn.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_describe",+      "summary": "Self-describe every verb the bridge exposes (this list) for ab's Verbs tab + runner. The reply carries `contribute` (source, mirror, issue and PR commands, the fusion-contributing skill); every failing reply carries `_contribute` with the same pointer.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_detect_layers",+      "summary": "Detect 2-layer vs 4-layer board (ULP + CAM comparison).",+      "timeoutSeconds": 90,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_dismiss_blocking_dialogs",+      "summary": "Detect + classify (and optionally dismiss) blocking Fusion dialogs. Answers every one with the safe button (No/Cancel via WM_CLOSE, never Yes, never focus-stolen). {categories:[...]} narrows the sweep to those categories (e.g. [\"crash_report\"], the launch janitor's scope).",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_document_info",+      "summary": "Metadata for the ACTIVE document: name, product type, save state, version, parent project.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_eagle_import_status",+      "summary": "The run record of a background fusion_new_electronics_from_eagle import: stage (started | done | failed), documentName, partsExpected (elements in the .brd), partsPlaced (read back from the board), placed[], and the final result. Poll it every few seconds after the import returned its runId.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_electron_pan",+      "summary": "Smoothly PAN + zoom the view to frame a board-coordinate box (mm; get part positions from fusion_board_info). Animates from where the view last was.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_electron_run",+      "summary": "Run an EAGLE/Electron command in the open board (the generic extension point, e.g. RUN <ulp>).",+      "timeoutSeconds": 90,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_electron_select",+      "summary": "SELECT a part (by reference designator, or x/y board mm) and surface its properties - the way clicking a part reveals the properties panel. Great for showing life in a recording.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_electron_zoom",+      "summary": "Smoothly ZOOM the schematic/2D board for a recording (the whole motion is one call). factor>1 zooms in, <1 out; or fit:true. The loop runs in the add-in with a repaint per frame.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_electronics_query",+      "summary": "TYPED electronics read model: rows for one of Autodesk's 49 electronics entity classes (Element, Signal, Net, Layer, Via, Smd, Wire, Pad, Part, Instance, Pin, Sheet, Package, Library, Error, Variant...) over the ACTIVE electronics document, with filters, field projection and pagination. Served by Autodesk's own MCP electronics_read when its server answers (fusion_mcp_enable turns it on), else by the board_info geometry export for Board/Element/Library/Package/Layer/Signal/Wire/Error (coordinates in mm). `source` names which. Replaces reading board_info XML by hand.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_execute_text_command",+      "summary": "Run a raw Fusion TEXT COMMAND (app.executeTextCommand) - the escape hatch to Fusion internals (Electron.* electronics commands included). Electron.* commands need an ELECTRONICS document context (schematic/board view active). Guard risky calls with expectDocument.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_3mf",+      "summary": "Export to 3MF mesh.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_board_image",+      "summary": "Render the OPEN board (or schematic) to a PNG via EAGLE's EXPORT IMAGE with a layer preset: all, top_copper, bottom_copper, top_silkscreen, bottom_silkscreen, top_soldermask, bottom_soldermask, top_paste, bottom_paste, board_outline, drill, assembly_top, assembly_bottom, fabrication (or explicit EAGLE layer numbers). Requires an electronics editor to be active (fusion_show_2d_board or fusion_open_board first). Silkscreen presets fit the view to the board outline so the PNG maps onto the board bbox. Layer visibility is restored (DISPLAY ALL) afterwards. listPresets:true returns the preset table instead of exporting.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_bom",+      "summary": "Export a Bill of Materials CSV (grouped by value+package) from the open board.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_cloud_file",+      "summary": "Export the ACTIVE Fusion Design document to a local file on the Fusion machine in one of step, stl, f3d, iges, sat or smt (despite the name it does not fetch a cloud file by name; open the document first with fusion_open_cloud_file). Requires a Design document to be active. For the per-format verbs with their own timeouts see fusion_export_step and friends; this is the one-verb form with a format switch. Pull the file back with pull_file.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_cpl",+      "summary": "Export the Component Placement List (pick-and-place) CSV.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_dwg",+      "summary": "Export 2D DWG.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_dxf",+      "summary": "Export 2D DXF.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_eagle_source",+      "summary": "Export the ACTIVE electronics document as plain EAGLE XML (.sch or .brd; the outputPath extension picks the format). Fusion's .fsch/.fbrd are ZIP containers with the EAGLE XML inside; this exports the container via Document.CopyToDesktop, extracts the inner XML, writes it to outputPath and deletes the intermediate file. The result opens in standalone EAGLE, imports into KiCad, and parses with any XML tool. The container holds whichever editor is ACTIVE, so since 1.10.35 the bridge switches to it first (Schematic Editor for .sch, PCB Editor for .brd; reply carries switchedView) instead of answering 'No .sch file found inside .fsch ZIP container' (page issue #95).",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_f3d",+      "summary": "Export the active design as a Fusion archive (.f3d).",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_fbx",+      "summary": "Export to FBX mesh.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_gerbers",+      "summary": "Run the bundled JLCPCB CAM job (auto 2/4-layer) to produce the gerber + drill ZIP.",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_iges",+      "summary": "Export to IGES.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_lbr",+      "summary": "Export the electronics LIBRARY in front as an EAGLE .scr script via Electron.run EXPORT SCRIPT: a text dump of every symbol, package and device, the round-trip check that a library loaded correctly. Requires an electronics editor to be active (fusion_open_lbr puts the library in front). Returns the path, size and the first 2000 characters as a preview; pull the file to read the rest.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_obj",+      "summary": "Export to OBJ mesh.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_optimized_glb",+      "summary": "Fusion board -> wiki-grade optimized GLB. Exports STEP (+ optional silkscreen) and submits it to service-step2glb molecule mode (anchor to MP pins + silk bake + gold pins + join/weld/prune + Draco): ~465KB/~31 draw calls vs a raw ~16MB/~25000 that halts the viewer. Bounded-waits `wait`s (default 90); small boards return complete, big boards return {pending, jobId} - finish with fusion_fetch_optimized_glb. Use for a component page's component.parts.model_3d. STACKUP RULE (John 2026-07-15, see pcb-stackup skill): board bbox = the FR4 body, NEVER the whole assembly (components overhang edges + tower above); each overlay goes at ITS layer's z (copper at FR4-top, silk above mask); copper traces are REAL 35um 3D bodies colored like the FR4 - recolor them + translucent mask in the RAW GLB before optimizing to make routing visible; put the measured stackup table on the board's wiki page. PUBLISH EVERYTHING: a board's wiki page repo must carry EVERY exportable design file (.f3d/.step/.usdz/EAGLE .brd+.sch/Fusion .fbrd+.fsch/gerbers/BOM/CPL/GLBs/renders), not just the 3D - the page exists to share the design.",+      "timeoutSeconds": 200,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_sat",+      "summary": "Export to SAT (ACIS solid).",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_skp",+      "summary": "Export to SketchUp (.skp).",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_source",+      "summary": "Export the ACTIVE electronics document in Fusion's native source format via Document.CopyToDesktop: .fbrd (board), .fsch (schematic) or .flbr (library); the outputPath extension picks the format. The container holds whichever editor is ACTIVE, so since 1.10.35 the bridge switches to it first: the Schematic Editor for a .fsch, the PCB Editor for a .fbrd (reply carries switchedView). A .flbr still needs the library open (fusion_open_lbr). For plain EAGLE XML use fusion_export_eagle_source.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_step",+      "summary": "Export the active design to STEP (needs the 3D view).",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_stl",+      "summary": "Export to STL mesh.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_export_usdz",+      "summary": "Export to USDZ (AR / Hydrogen 3D).",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_fetch_optimized_glb",+      "summary": "Finish a fusion_export_optimized_glb job: bounded-poll the optimizer by jobId and write the GLB to outputPath when complete. Re-call until status=complete (big boards tessellate a few minutes). No Fusion needed.",+      "timeoutSeconds": 150,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_generate_package",+      "summary": "Generate an IPC-7351-compliant parametric 3D package via Fusion's BUILT-IN ElectronicsPackageGenerator (EPG) - ~50 package families (chip/soic/qfn/qfp/bga/sot23/dfn/melf/ecap/crystal/headers/...), each a few seconds, ZERO GUI. Optionally LASER-ETCH a marking (MPN / '103') into the body top as REAL cut geometry (survives STEP), and export STEP in the same call - the royalty-free, license-clean path to a whole component library (our own generated output, not vendor models). Proven live: 0603 + '103' etch + STEP in ~2s.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_get_app_state",+      "summary": "Current app state: running, active document, workspace, isElectronics. The poll/status verb for long-running calls.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_get_design_info",+      "summary": "Design-level summary of the active design: components, bodies, sketches, units, root name.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_get_parameters",+      "summary": "All user + model parameters of the active design (name, expression, value, unit).",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_get_preferences",+      "summary": "Read current Fusion appearance/navigation preferences (theme, activeTheme, invertScrollZoom, orbitScheme, modelingOrientation, gestureNav, cameraPivot, lengthUnit) as friendly values - the same keys fusion_set_preference accepts.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_import_electronics",+      "summary": "Import a Fusion-NATIVE electronics file (.fsch schematic, .fbrd board, .flbr library; NOT legacy EAGLE .sch/.brd/.lbr) from the Fusion machine as a NEW local document via Document.newDesignFromLocal. The document is unsaved: fusion_save_to_cloud persists it, fusion_close_document discards it. The bridge captures a post-open screenshot because Fusion can raise a blocking dialog the API cannot see.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_import_step",+      "summary": "Import a STEP/.stp (or other native-importable) file into a NEW Fusion design via the native import API. The open-electronics hints redirect .step here. (Was implemented but missing from this catalog until the verb suite's reverse-drift check caught it, 2026-08-14.)",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_inspect_bodies",+      "summary": "GEOMETRY READ-BACK: what actually got built, in MILLIMETRES. Per body: bbox, sizeMm, volumeMm3, areaMm2, faceCount, cylindricalFaceCount, appearance, material, isVisible. Use this to VERIFY your own modelling - a body at the wrong Z (a double-applied offset, a part buried inside another) renders perfectly and is INVISIBLE in a screenshot, and this work is often matte-black parts on a dark canvas where pixels are a weak check. cylindricalFaceCount is the cheap way to confirm holes were actually cut: a symmetric cut that reaches nothing fails SILENTLY with no exception. Pass worldSpace:true to resolve bodies through their occurrence transforms (assembly placement); optionally filter with occurrence. Fusion's API is centimetres - this converts for you.",+      "timeoutSeconds": 130,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_install_fusion",+      "summary": "Install Fusion 360 FOR the user - downloads Autodesk's official Client Downloader and streams the free trial silently, with NO shell_execute and NO ab approval gate (runs inside the trusted bridge). Elevation-aware: --globalinstall when admin, PER-USER otherwise (a non-elevated globalinstall dies silently on UAC - learned live). Returns promptly; poll fusion_readiness (reports installing:true) until installed:true, then fusion_start. Declared as detect.installVerb so ab's bridge_readiness recommends it.",+      "timeoutSeconds": 90,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_install_library_bundle",+      "summary": "COMPOSITE, the Fusion twin of kicad_install_library_bundle (#68): ONE call takes a staged Cloud Library bundle (zip of <Lib>.lbr + <Part>.step models, or a bare lbrPath with STEPs beside it), unpacks it safely, places it under ~/Documents/Adom Libraries/<name>/, pairs EVERY deviceset with its STEP by name (deviceset, package, normalised, prefix; a one-part library pairs its single model regardless), lints part numbers (partMetadata: MPN, manufacturer, Mouser/DigiKey/LCSC - reported, never blocking), pre-flights Fusion state (fusion{status}), and starts the same bind -> prove chain fusion_create_library runs. ASYNC BY CONTRACT: returns IMMEDIATELY with runId + statusVerb because a STEP bind is 3-15 minutes and cannot fit a relay window; poll fusion_prove_result (measured percent, four streamed proof frames per part, provedParts[], and an addin_restart_required payload the CALLER turns into the ask). PARTIAL SHIPS: a deviceset with no model is a NAMED skip in unbound[], the rest still bind; partsBound < partsTotal is the signal. Each part is minted on its own single-deviceset library (the Package3D generator loads the FIRST package of the open library, so a merged library would put every chip on part one's footprint), with the STEP placed exactly as published (orient:false, origin trusted), then all urns are bound into the merged library, and after prove the bound library is SAVED TO THE CLOUD under <project>/Adom Libraries so it appears in Fusion's Library Manager (cloudLibrary{saved, fileId, duplicatesBefore} in fusion_prove_result). Per-part scaffolding is deleted; the user is left with one library plus its per-package f3d folder. capture:false only places the files and returns. This is the one contract the wiki CLI (`library install --format fusion`) and the Export button both read; the recipe has one owner.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_interactive",+      "summary": "Is Fusion taking input RIGHT NOW? Reads the add-in's busy flag (a long bridge command in flight), Fusion's own hasActiveJobs, and the main thread's latency on a trivial script (probeMainThread:false skips that and costs nothing). interactive:true means drive it; false means a load, a cloud open, or a bind is still running. The guided tour's narrator polls this every 1.5s and stamps fusion-busy / fusion-interactive transitions into the tour record, so a recording can be cut or sped up on them.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_kill",+      "summary": "Force-KILL Fusion 360 (taskkill /F) - the desperate path for when fusion_stop cannot close it (stuck modal / wedged process). Closes docs cleanly first when reachable.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_library_manager",+      "summary": "Open Fusion's Library Manager and switch to one of its three tabs. Hub Libraries = libraries saved in the Fusion hub (what our bind chain produces, and what Autodesk recommends for sharing). Private Libraries = library.io managed libraries in folders THIS account belongs to. Public Libraries = library.io's public catalogue. PITFALL: the library TABLE is CEF-drawn and exposes NOTHING to UIA, so libraries[] is normally empty and that is not a failure - screenshot the returned hwnd to read the rows.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_library_parts",+      "summary": "Every ORDERABLE variant in a .lbr with its part numbers - offline, no Fusion needed. For an EE this is the point of the library: two variants can share ONE symbol, ONE footprint and ONE 3D body and still be different products (an AEC-Q100 automotive part vs the baseline one), and that difference lives ENTIRELY in the metadata. EAGLE spells the orderable identity as deviceset + device + technology: <device> carries the PACKAGE variant, <technology> carries the GRADE/temperature variant, and attributes hang off <technology>. Reports per-variant MPN / MANUFACTURER / MOUSER_PN / DIGIKEY_PN / LCSC_PN (the exact names this bridge's own BOM export reads), plus warnings when variants are indistinguishable, share an MPN, or a deviceset has no description. These warnings never block the library from opening - they say whether an EE could actually order from it.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_list_cloud_files",+      "summary": "List files/folders in a cloud project (optionally a subfolder).",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_list_cloud_projects",+      "summary": "List the cloud PROJECTS visible to the signed-in Fusion session (hub walk - slow on big teams; prefer fusion_aps_search for finding files).",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_list_text_commands",+      "summary": "List Fusion's internal TEXT COMMANDS (TextCommands.List) whose name contains filter, case-insensitive; the discovery tool for fusion_execute_text_command. Returns the first 50 matches plus the total count. Works best with an electronics editor active (the Electron.* family is what the default filter finds).",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_live_feed",+      "summary": "A ~1 fps look INTO Fusion while the bridge drives it, kept as a BOX-SIDE ring buffer (~10 min). Each tick records the Fusion main window (kind:main - the video) and every owned popup over it (kind:popup - dialogs, Browser/tool panels, the Adom banner; Fusion draws these as separate windows a main capture omits), each a path on this machine tied to its tick. Drain from the container with {action:frames, since:<tick>}, read_file each path, and publish where a human looks - tools/live_feed_drain.py does exactly that into shotlog. Proof frames are NOT here: fusion_prove_result evidence[] carries kind:proof with step labels, so the three kinds are distinguishable at the source. Exists so a human can see open tabs and dialogs during boot or a restart instead of guessing.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_make_3d_package",+      "summary": "Create a RENDERING component 3D package (FOOTPRINT + chip, aligned) for ONE part, fully programmatically with ZERO GUI dialogs. Opens the .lbr, runs Electron.Create3DPackage to load the package's footprint into a generator doc, imports the STEP onto it, orients it flat, saveAs an .f3d (skips the FINISH Save dialog + the two unbeatable 'Fusion360' CEF modals), uploads the f3d via APS, and returns an fs.file:vf wip_urn to hand-write into the library's <packages3d>. projectId/folderId default to the MAIN-project upload folder. Pass captureLabel to also get a BEFORE (footprint) + AFTER (chip placed) screenshot. PITFALL: a RAW STEP upload binds but renders NOTHING ('Thumbnail download failed') - this verb makes an f3d, which renders. Prefer fusion_build_library_3d for many parts.",+      "timeoutSeconds": 200,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_make_showcase_project",+      "summary": "Put a library's parts on a NEW schematic and board to SHOW THEM OFF: every deviceset in the .lbr (or the ones in devicesets[]) placed in a row on a fresh sheet and a fresh board, no nets, with the library's bound 3D urns carried across so the 3D PCB shows the real bodies. Generated as EAGLE source on the box and opened dialog-free (Document.newDesignFromLocal), so nothing touches the user's screen. This is THE verb for 'make a board with these new parts on it'; fusion_make_test_project is the one-part circuit variant. After it: fusion_show_2d_board / fusion_show_3d_board {capture:true}, fusion_schematic {action:\"show\"}, fusion_save_to_cloud. The name of each part is written on the top silkscreen under its footprint (silkLabels:false turns it off); fusion_make_test_project does the same.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_make_test_project",+      "summary": "Create a NEW electronics test project FROM SCRATCH around a library part - the Web Control demo's PROJECT button, and the answer to 'a customer only has a component page'. Generates a minimal test circuit server-side (the part + a generated 330R series resistor with VCC/GND stubs on a small board) as real EAGLE .sch/.brd, then imports the pair as a new electronics design. NO cloud, NO sign-in, no pre-existing content. After it, fusion_show_schematic / fusion_show_2d_board / fusion_show_3d_board all work on the result. Wiring uses the deviceset's own connects (first two pins), so 2-terminal parts get a real circuit and big ICs get a structurally-valid integration proof.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_managed_library_create",+      "summary": "Create a NEW managed library on library.io FROM the library in front (which must already be saved in a Fusion Hub). Drives MANAGE > LIBRARY.IO > Push, then completes Fusion's Create Managed Library dialog. PITFALL: a managed library created under one Autodesk account is NOT visible to another account until its managed FOLDER is shared on library.io - proven live, so do not assume hub membership shares it.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_managed_library_link",+      "summary": "Link the library IN FRONT to an existing managed library on library.io. With no name, opens Fusion's Select Managed Library picker, returns its rows as records (name/type/version/managedFolder/description) and CANCELS - a safe read-only listing of what this Autodesk account can reach. With name, selects that row and confirms. SAFETY: after linking, Fusion offers to force-update your library FROM the managed one; 'Replace Local Library' would destroy your parts, so this verb answers CANCEL by default - pass onUpdatePrompt to choose deliberately. A managed library owned by ANOTHER Autodesk account does NOT appear until its managed FOLDER is shared with this account on library.io; being in the same Fusion hub is not enough.",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_managed_library_pull",+      "summary": "Pull the newest version FROM library.io into the linked library in front. A pull ends in ONE of two CEF dialogs and BOTH block the add-in until answered: the force-update prompt when content differs (answered MERGE by default, since pull is an explicit request for the managed content - pass onUpdatePrompt:'replace' to overwrite local parts entirely, or 'cancel' to back out), or 'Up to Date' when already current. If neither appears, nothing was pulled and this reports failure rather than a false pass - Fusion greys Pull out on a library that was never linked.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_managed_library_push",+      "summary": "Push a NEW VERSION of the library in front up to its linked managed library on library.io. Clicking the menu item alone does NOT push: Fusion raises a CEF 'Create New Version' confirmation and THAT is what creates the version, so this verb completes it and fails with confirm_missing rather than reporting a false pass. On a library that is not linked yet, Fusion offers Create Managed Library instead and this reports not_linked_yet - use fusion_managed_library_create. NOTE: Library Manager keeps showing the IMPORTED version number after a push, so the row gains an update-available badge instead of incrementing.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_managed_library_unlink",+      "summary": "Unlink the library in front from its managed library on library.io. Fusion greys this out on a library that was never linked, so a silent no-op there is expected.",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_mcp_call",+      "summary": "Call any tool on Autodesk's Fusion MCP server (fusion_mcp_read, fusion_mcp_update, fusion_mcp_execute, fusion_mcp_electronics_read). The bridge handles the MCP streamable-HTTP handshake for you (initialize -> MCP-Session-Id -> notifications/initialized) and re-establishes a dropped session automatically. MCP acts on the ACTIVE Fusion document, so open one first. PREFER a native fusion_* verb when one exists - they are tested here and return richer hints - and reach for MCP for Autodesk's text-to-CAD surface.",+      "timeoutSeconds": 150,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_mcp_enable",+      "summary": "Turn Autodesk's Fusion MCP server ON by driving Fusion's Preferences dialog for the user. Autodesk exposes NO API for this toggle, so the UI is the only route: this opens Preferences (Commands.Start PreferencesCommand), expands General, selects API, ticks 'Fusion MCP Server (runs locally on this device)', then clicks Apply and OK. Needs Fusion running; briefly uses the foreground and announces why with an on-screen caption. NEVER ask the user to do this by hand first - do it for them, then tell them it is handled. Note the setting is DISCARDED if Fusion is killed or restarted before Apply is clicked.",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_mcp_resources",+      "summary": "List Autodesk MCP resources, or read one by uri. These are mostly the Electronics entity schemas (resource://mcp.electronics_schema_*) that describe what fusion_mcp_electronics_read can return.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_mcp_status",+      "summary": "Is Autodesk's Fusion MCP server up, and what does it expose? Autodesk + Anthropic ship a LOCAL MCP server at http://127.0.0.1:27182/mcp exposing Fusion's own text-to-CAD surface (read geometry, execute/update features, read Electronics design data). It binds LOOPBACK on the user's machine and was built for Claude Desktop running there, so a CLOUD AI cannot reach it at all - this bridge runs on that machine and proxies it for you. Returns enabled, serverInfo and the live tool list. OFF by default: if it reports enabled:false, call fusion_mcp_enable and the bridge turns it on for the user.",+      "timeoutSeconds": 45,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_mcp_tools",+      "summary": "Full tool list from Autodesk's Fusion MCP server INCLUDING input schemas, so you can construct a valid fusion_mcp_call. These are Autodesk's tools, not this bridge's.",+      "timeoutSeconds": 45,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_mech_capabilities",+      "summary": "Discover typed mechanical operations, exact input schemas, units, recovery limitations and current add-in session ID.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_mech_operation_status",+      "summary": "Read durable typed-operation history by recorded sessionId and operationId, including after HTTP timeout or add-in restart. Returns the recorded request digest, source version, target identity, phase/timestamps and terminal result. Historical nonterminal work is interrupted/unknown and never replayed. Admission without a durable dispatch claim or uncertain persistence requires reconciliation. Missing history never proves no execution. This observational route bypasses lifecycle repair, window etiquette and the CAD queue; it never starts/restarts Fusion or dismisses dialogs. An unavailable add-in returns operation_status_unavailable with unknown outcome. SQLite recovery may repair only the app-owned journal. A native call monopolizing Python's GIL can still delay responses.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_mechanical",+      "summary": "Guarded main-thread parametric parts and assemblies: sketches, solid features, atomic parameter edits, component definitions/copies/placement, seven as-built joint motions and limits, rigid groups, interference, materials and assembly mass/center of mass, local supplier STEP/SAT import with SHA/provenance, native McMaster command, structured/flat BOM CSV, topology readback, health and safe exports. Geometry queries refuse ambiguous selections; root-space distance/angle measurements return witness points. Typed sketch trim/extend/split/break and signed modern offsets, reference-defined construction axes and native sketch constraint diagnostics are available through exact operation schemas. Regular geometry-solving joints, joint origins and native motion links have guarded typed operations, exact attachment/parameter readback and timeline restoration. Read-only configuration inspection and active-row BOM provenance are available; configuration lifecycle and configured-design model writes remain disabled pending native recovery/archive gates. Incomplete configuration scope also blocks complete BOM output. Typed model mutations use runtime-proven PTransaction recovery; transaction_probe verifies the backend (new_design does this automatically). Writes require sessionId,operationId and current target {documentId,revision}. Durable admission must commit before dispatch. Retry exact args with the same ID; query durable status after timeout. Old-session history is readable but never replayed. Storage failure after execution returns reconciliation-required, preserving available evidence without claiming rollback. References expire on model changes. Files/document lifecycle are outside model transactions.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_move_parts",+      "summary": "Place parts on the live board: one MOVE (absolute, mm) and ROTATE per part, each its own undo step, then a fresh export reads every element back. The layout half of the AI flow's Fusion lane (adom-aiflow place land). Coordinates are Fusion's (y up).",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_narrate",+      "summary": "Play one bundled narration clip on the box now (the guided tour's voice): dock, dashboard, or any <beat>[-a|-b] clip in resources/demo-audio. A driver speaks the dock bar and dashboard lines with it before the tour starts. Returns startedAt (epoch seconds) so a recording can be cut on it; the tour's own narration stops it when a beat begins.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_new_electronics_from_eagle",+      "summary": "Import a legacy EAGLE .sch (+ paired .brd) into a NEW Fusion electronics design so the parts INSTANTIATE (schematic + populated board, lands in the PCB editor). The ONLY way to author a board from EAGLE source: Document.newDesignFromLocal opens the schematic editor but does NOT instantiate parts, and the Fusion-native .fsch/.fbrd container is opaque binary you can't build offline. This fires Fusion's own ImportSCHAndBRDCmd and drives BOTH native Open dialogs (the .sch then the .brd) in the BACKGROUND via desktop_ui_click by accessible name (no foreground). Stage both files to Windows first (send_files). After: fusion_show_2d_board, RATSNEST + 'AUTO ;' to autoroute, fusion_show_3d_board for 3D. PREFLIGHT (1.10.20): refuses with eagle_files_missing before touching any dialog when either file is not on the Fusion machine; if the Open dialog does not accept the file the bridge cancels the dialog itself (open_dialog_stuck), so nothing is ever left on the user's screen. Prefer fusion_schematic {action:\"open\"}, which picks this route only when a .brd exists next to the .sch. ASYNC by contract (1.10.22): returns {started:true, runId, statusVerb} at once and runs the dialog-driven import on the exe; poll fusion_eagle_import_status {runId}. The record and the final reply carry documentName, partsExpected (elements in the .brd) and partsPlaced (read back from the board); success needs parts on the board (nothing_instantiated otherwise). Pass wait:true only from inside the exe.",+      "timeoutSeconds": 200,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_notify_owner",+      "summary": "LAST-RESORT human escalation: toast the user's MAIN computer (fans out cross-ab to every peer on the relay, so it reaches them even when this bridge runs on an unattended VM). ONLY for true human walls - password/2FA entry, UAC elevation, a physical step. Exhaust programmatic options first (UIA background clicks, seat auto-resolve, warm-SSO sign-in). After sending, WAIT and poll fusion_readiness; do not re-toast within a few minutes.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_open_board",+      "summary": "Open a LOCAL legacy EAGLE .brd in Fusion's 2D board editor (dialog-free Document.newDesignFromLocal; a background open). NAV RULE: the schematic, 2D board and 3D board are VIEWS of ONE electronics design, not standalone files. For a team design open the DESIGN document (fusion_open_cloud_file / fusion_open_by_urn) and switch views with fusion_show_2d_board; this verb is for a .brd that exists on the Fusion machine (push it there first). Elements with an embedded library are instantiated as placed parts; embed <packages3d> + per-element package3d_urn for real 3D bodies, then fusion_show_3d_board. The bridge captures a post-open screenshot because Fusion can raise a blocking dialog the API cannot see.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_open_by_urn",+      "summary": "Open a cloud ELECTRONICS DESIGN by URN. PCB/ELECTRONICS NAV RULE: a board is NOT a standalone file - the schematic, 2D board and 3D board are VIEWS inside ONE electronics DESIGN. Open the DESIGN document first (fusion_open_cloud_file or fusion_open_by_urn), THEN switch to its schematic and its 2D board (fusion_show_2d_board) and 3D board (fusion_show_3d_board). A Select-Electronics-Design-File picker IS that design list of its schematic + board. An EMPTY 2D board usually means you opened a derivative or the wrong file, or it is out of sync - reopen the parent electronics DESIGN and switch to its board view; do NOT open a .brd or .sch as a standalone file.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_open_by_urn_note",+      "summary": "(see fusion_open_by_urn)",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_open_cloud_file",+      "summary": "Open a CLOUD file by name (the front door to every design flow). PCB/ELECTRONICS NAV RULE: open the electronics DESIGN document (EcadDesignProductType), never a child .brd/.sch/3D directly - then switch views with fusion_show_schematic / fusion_show_2d_board / fusion_show_3d_board. LONG-RUNNING: fire it, then poll fusion_get_app_state until activeDocument matches (cloud opens on electronics designs take 1-3 min). A crash-recovery modal can block the open - fusion_dismiss_blocking_dialogs.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_open_design",+      "summary": "Open a LOCAL design file (routes through the add-in import). Prefer cloud flows (fusion_open_cloud_file) for team designs; this is for local .f3d/.step style files.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_open_electronics",+      "summary": "Read whether an ELECTRONICS editor (schematic, board or library) is the active workspace, so you know if Electron.* text commands and fusion_electron_run will work. With filePath, and ONLY when an electronics editor is already active, it also issues Electron.run EDIT on that file; otherwise it just reports the workspace. Prefer fusion_open_schematic / fusion_open_board / fusion_open_lbr to open files. The schematic, 2D board and 3D board are views of one electronics design.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_open_lbr",+      "summary": "Import an EAGLE .lbr library into Fusion's Electronics LIBRARY editor (Content Manager / Electronics Library workspace), not a PCB design. PITFALL: filePath MUST be a WINDOWS-local path (C:/...). The chip-fetcher/adom-lbr pipeline runs in the cloud container, and there is NO container-to-Windows push verb, so STAGE the .lbr onto Windows first (serve it on a proxied port + Invoke-WebRequest via shell_execute), then pass the C:/ path. PITFALL: an adom-lbr .lbr is 2D ONLY - symbol + footprint + a PLACEHOLDER 3D package; the real 3D chip is NOT attached (that needs a Fusion cloud URN). To attach the 3D, see the 'fusion-libraries' skill. Pass verify:true to round-trip-confirm Fusion parsed the deviceset, then check fusion_get_app_state (activeWorkspace 'Electronics Library').",+      "timeoutSeconds": 50,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_open_schematic",+      "summary": "Open a LOCAL legacy EAGLE .sch in Fusion's Schematic Editor (dialog-free Document.newDesignFromLocal; a background open). NAV RULE: the schematic, 2D board and 3D board are VIEWS of ONE electronics design, not standalone files. For a team design open the DESIGN document (fusion_open_cloud_file / fusion_open_by_urn) and switch views with fusion_show_schematic; this verb is for a .sch that exists on the Fusion machine (push it there first). Drive the opened sheet with fusion_electron_run (WINDOW FIT, DISPLAY ALL). The bridge captures a post-open screenshot because Fusion can raise a blocking dialog the API cannot see.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_physical_properties",+      "summary": "Per-component physical properties (volume cm3, mass kg, density, area, center of mass) for the active design. Reads them directly so BOM/costing tools no longer have to run getPhysicalProperties inside a modeling script. Pass names to scope to specific components.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_place_vias",+      "summary": "Add vias at exact points (stitching, thermal, escape): VIA per via with its drill and diameter, then read back.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_plan_library_import",+      "summary": "PRE-FLIGHT for a library import: does NO work and changes nothing. Reports whether Fusion is installed, running, or needs its add-in loaded (with a plain-language message you can show the user), plus a per-stage plan with MEASURED per-machine time estimates scaled to the number of parts you are sending - a multi-part library does one STEP import per part, which is the slowest stage, so the estimate grows with the library. Call this FIRST so the wiki can render the summary and the progress bar's steps, then run the import and poll fusion_prove_result, which reports the SAME stage names.",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_plan_route",+      "summary": "Calculate a read-only, bounded orthogonal A* path between two pads on a live two-layer board. Uses existing copper and the shared conservative clearance model. Returns explicit route args for route_net; native DRC is still required after mutation.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_pour_state",+      "summary": "Read every pour on the live board with Fusion's own computed fill: filled area per pour, per layer and per net, and which pours were never filled (no RATSNEST since they were drawn). The measure step of the AI flow's Fusion lane.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_preflight_lbr",+      "summary": "PRE-ANALYZE a .lbr: will Fusion open it? Offline and instant - no Fusion needed, nothing launched. Runs the named checks the bridge learned from real Fusion rejections: file-readable, size-sane (truncated-transfer corpse detection), xml-parses, root-is-eagle, packages-nonempty (Fusion's silent 'No Components'), symbols-present, devicesets-present (missing ones make EDIT raise Create-new prompts), connects-resolve (dead wiring renders fine and connects nothing). fusion_open_lbr and fusion_create_library run the same gate automatically; call this directly to gate a batch BEFORE staging.",+      "timeoutSeconds": 10,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_prefs_close",+      "summary": "Apply+OK (save:true, the default) or Cancel Fusion's Preferences dialog. Settings changed via fusion_prefs_open are NOT persisted until this is called with save:true.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_prefs_open",+      "summary": "Open Fusion's Preferences dialog and optionally jump to a section, then hand back a SCREENSHOT + shotId you can click in. This is how you reach ANY Fusion preference: the Python API exposes only a thin slice (theme/orbit/units, debuggingPort, developer tools) and everything else, including the MCP server toggle, is UI-only. Sections: general, api, design, manufacture, electronics, render, drawing, material, graphics, network, preview features. Child sections under General are lazily rendered by Qt and never appear in the UIA tree, which is why this returns an image to click rather than control names. ALWAYS finish with fusion_prefs_close {save:true} - nothing is saved otherwise, and killing/restarting Fusion first discards the change.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_prewarm",+      "summary": "Warm the bridge ahead of the first real call, WITHOUT starting Fusion: confirms the add-in is synced into every Fusion add-in folder, readies the space-free staging folder, and caches the PCB design-rules catalog from adom/pcb-design-rules. Adom Bridge calls it once per installed version in the background (bridge.json prewarm.verb); safe to call again any time. Launching Fusion is never part of it.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_prove_result",+      "summary": "POLL a background run started by fusion_create_library or the detached fusion_build_library_3d. Returns stage + stageLabel, plan[] with measured per-stage estimates, stagesDone, percent, etaSec, confidence, and evidence[] filling in AS EACH ARTIFACT LANDS (symbol -> footprint -> 3d -> ganged). For a 3D build it carries per-part progress (minting X (3/7)), partsDone/partsTotal and parts[] with each wip_urn. stage:done only means the chain FINISHED - the top-level verdict (proven/not_proven) is the score, and a run that captured zero frames lands stage:failed with blocked_by_dialog (carrying the dialog text) or no_evidence_captured rather than reporting done. Pass inlineFrames:true on the final fetch for base64 thumbnails a browser can render. restarts[] {at, why, kind} lists any restart the chain performed (only with allowRestart). prove.planned / prove.skipped say whether evidence frames were captured and why (AI threads bind only by default).",+      "timeoutSeconds": 20,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_readiness",+      "summary": "FAST readiness check (does NOT launch Fusion): is the Fusion host app installed + running + the bridge ready to drive? ab DETECTS Fusion (never installs it) via bridge.json 'detect', and auto-installs Python if missing (ab >=1.9.47). Call this before driving Fusion; if installed-but-not-running, fusion_start. SELF-HEALS the seat/licensing dialog (background UIA + screenshot-verify) whenever it detects one. Pairs with ab's bridge_readiness.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_release_seat",+      "summary": "Give up the Autodesk seat from THIS machine so another box can claim it with no modal at all: closes Fusion cleanly (documents are NOT discarded; an unsaved one refuses and says so) and leaves the account signed in, so this box can claim the seat straight back. The counterpart of fusion_claim_seat.",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_remove_pours",+      "summary": "Delete pours (all of them, or the ones named by net, layer and outline) so a board can be poured again after a refine. Each DELETE picks the outline point farthest from every pad (refused if none is 1 mm clear), and the readback undoes everything if a part or a track changed.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_reset_workspace",+      "summary": "Bring Fusion back to a clean slate between runs: closes named documents AND the Untitled scratch the library/bind flow leaves behind (page issue #59). Fusion always keeps ONE blank document alive, so a single remaining Untitled is correct rather than a failure. MODIFIED Untitled docs are left untouched unless force:true, because those can hold real unsaved work.",+      "timeoutSeconds": 90,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_resolve_seat_dialog",+      "summary": "Readiness EXECUTOR (Rust port, Phase 3): detect + resolve the Autodesk seat/licensing modal ('Active Sessions Exceeded' / 'Suspend Remote Session') in the background, at most 3 UIA clicks per call, screenshot-verified. Idempotent: nothing up answers clicks:0. fusion_readiness calls this itself when it sees the dialog; call it directly only when you are driving the launch by hand.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_restart_for_addin",+      "summary": "ASYNC: returns immediately (started:true) and restarts Fusion in the background, SAVING the user's open documents first; poll fusion_readiness until ready with the new addinVersion (a restart takes 60-120s, longer than the relay budget; pass wait:true for the old blocking form). Finish add-in setup by restarting Fusion. Call this when any verb returns errorCode addin_restart_required (the add-in was installed/updated while Fusion was already open, and Fusion only loads add-ins at launch). ASK THE USER FIRST when a human is present - the failing verb's payload carries userMessage plus openDocuments/unsavedDocuments so you can show them what is open. Refuses with unsaved_named_document rather than discarding a never-saved document.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_ripup_nets",+      "summary": "Take whole nets' tracks and vias back up (RIPUP per net, one undo step each) so they can be routed again, wider or another way. Their pours stay. Readback proves no track or via is left on those nets and no pour was lost.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_route_net",+      "summary": "Create explicit net copper in the live Fusion canvas. Conservative clearance preflight, board/revision guards and exact copper readback. One or several trace segments per call; no general autorouting. Use routing_drc for native DRC.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_routing_drc",+      "summary": "Run fresh native Autodesk DRC and read UL_BOARD.errors, including approved errors, warnings and airwires. Does not accept or clear any violation.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_routing_state",+      "summary": "Read the live board's identity, geometry revision, pads, copper and per-net airwires from a fresh Fusion export.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_run_modeling_script",+      "summary": "Run an adsk.fusion modeling script in the live session (sketches/extrudes/params). Free programmatic CAD.",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_save_to_cloud",+      "summary": "Save the ACTIVE document to Autodesk cloud storage with an explicit name and destination. Dialog-free precisely because you supply what the Save box would ask for - use it before closing or restarting when a document has never been saved (fusion_close_all_documents refuses such a document with unsaved_named_document rather than discarding it).",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_schematic",+      "summary": "START HERE for a schematic. ONE verb, three actions. action:\"open\" lands in the schematic editor from whatever names the design: fileName (+projectName) or urn or query for a CLOUD design (opens it, then switches to the schematic view), schPath for a local EAGLE .sch (its sibling .brd is imported with it so parts instantiate, unless withBoard:false; a .sch alone opens dialog-free), or filePath for a Fusion-native .fsch. action:\"create\" writes a blank EAGLE schematic on the box and opens it as a NEW local electronics design with the schematic editor active, no dialog anywhere. action:\"show\" switches the already-open design to its schematic view. Every reply says which underlying verb it used (via). Remember: a schematic is a VIEW of an electronics design, not a file of its own, which is why there is no verb called open_a_schematic_file. To put a library's parts on a NEW schematic and board for showing them off, use fusion_make_showcase_project instead.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_schematic_plan",+      "summary": "Plan a grouped schematic from a netlist: one labelled frame per block, the block's parts in a row, every connected pin given a short stub named for its net and a label. Returns the command groups for fusion_schematic_run (one call per group, so the sheet grows block by block on camera). Pins may be named by pad (U1.3) or pin (U1.VIN). Pure computation from the .lbr; nothing in Fusion changes.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_schematic_run",+      "summary": "Build a schematic live: a list of complete, non-interactive EAGLE commands run one at a time on the active schematic (ADD 'dev@lib' 'NAME' R0 (x y), VALUE, NET 'name' (pts), LABEL, WIRE, TEXT, LAYER, CHANGE STYLE/SIZE/WIDTH/RATIO, WINDOW FIT), with an optional pause between them so a viewer sees it grow. Anything else is refused before the first command runs. ADD is proven against libraryPath on disk first (the deviceset must be there; the library is USEd by the bridge), so the component picker can never open. Readback: the parts and nets on the sheet from a fresh export.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_screenshot_fusion",+      "summary": "Background PrintWindow capture of Fusion's MAIN window (largest same-title window; works occluded/bottom-of-z-order, never raises anything) or a specific dialog by hwnd. Returns fullPath/safePath (ab auto-pulls them to the caller as localPath, 1.10.37) plus the older savedTo. (Live since early versions but undescribed until 2026-08-15 - it was invisible to callers AND to the drift check.)",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_search_cloud_files",+      "summary": "⛔ DISABLED (returns an error): the in-app add-in search took 30+ min and CRASHED Fusion (WinError 10054). It is hard-blocked in the bridge. Use fusion_aps_search {query} — server-indexed, seconds, no Fusion. See the 'fusion-aps-search' skill.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_set_auto_update",+      "summary": "Turn AUTOMATIC Fusion updating on/off for this user. ON BY DEFAULT, and deliberately INVISIBLE: Fusion ships updates constantly and nags with an 'Update Now / Update Later' panel plus a '14 days until Fusion must update' countdown. Every fusion_readiness call checks for that offer and, if present, the bridge clicks it IN THE BACKGROUND (UIA, no foreground, no caption) so the download starts and the newer build comes up on the next launch. The user should never have to click it. Call with no args to read the current setting; {enabled:false} opts out and the choice is STICKY (~/.adom/fusion-bridge/prefs.json) - once a user opts out, NEVER click their update prompts again. Tell the user this is handled for them rather than asking them to update.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_set_design_rules",+      "summary": "Load a FAB's design rules (DRC) into the open board. The rule packs live on the wiki page adom/pcb-design-rules (JLCPCB, PCBWay, OSH Park, Seeed, Eurocircuits, Aisler, Elecrow, Advanced Circuits, Sierra, MacroFab, NextPCB, ALLPCB and 3rd party fab; one .edru per vendor/process/layer count, every number citing the vendor's own capabilities page): the bridge fetches the pack, stages it on the box, and the add-in runs `drc load`. {action:'list'} answers with every (fab, process, layers) row so you can offer the user a real choice; no fab means the bundled 3rd party fab rules for the board's layer count (what ab's removed fusion_apply_3rdpartyfab_rules did); druPath loads an .edru already on the Fusion machine; druText/druBase64 loads one that exists only on your side. Layers auto-detects from the open board. ALWAYS confirm with fusion_alerts afterwards: a refused file is an in-canvas toast, never a dialog.",+      "timeoutSeconds": 90,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_set_driving_badge",+      "summary": "Read/toggle the 'Adom is driving Fusion' TASKBAR OVERLAY BADGE (STICKY per user, default ON). While the bridge drives Fusion, its Windows taskbar button wears a small Adom mark so the user knows at a glance who is in control; it sheds automatically after 5 minutes of driving-verb idle. No args = read. Turning it off clears any badge immediately.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_set_parameter",+      "summary": "Set one parameter's expression by name in the ACTIVE 3D Design document (user parameters first, then model parameters). MUTATES the design: the model regenerates and the result carries the post-op dialog array. Requires a Design document to be active (a 2D board or library editor refuses). Read names and current expressions with fusion_get_parameters; units must match the parameter (\"10 mm\", \"5 deg\").",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_set_preference",+      "summary": "Set Fusion appearance/navigation preferences in the LIVE session - applies immediately, NO restart. Keys: theme (light/darkblue/darkgray/classic/device/dark; some builds only ship LightGray/DarkBlue/Device, failures reported per-key), invertScrollZoom (bool - mouse scroll/zoom direction), orbitScheme (fusion360/alias/inventor/solidworks/tinkercad/powermill), modelingOrientation (yup/zup), gestureNav (bool), cameraPivot (bool), lengthUnit (mm/cm/m/in/ft - active design). Per-key outcome in `applied`, resulting state in `current`.",+      "timeoutSeconds": 30,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_set_seat_takeover",+      "summary": "Read/toggle the mid-session Autodesk seat-takeover sweep (STICKY per user, default ON). When Autodesk pops 'Active Sessions Exceeded' mid-session, the bridge clicks Continue through BOTH dialogs in the background: this machine takes the seat, the other machine's Fusion suspends RESUMABLY, the user gets one toast. No args = read current value. Gates only the passive sweep - a verb-driven fusion_start still grabs the seat (the user asked for Fusion, so the seat is implied).",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_set_window_sizing",+      "summary": "Read/toggle auto-sizing Fusion's WINDOW after launch (STICKY, default ON). Fusion opens at whatever geometry it last had, which after an automated launch is often a small default; the bridge grows it to ~92% of the monitor work area, centered, using SetWindowPos with NOACTIVATE (never ShowWindow/maximize) so focus is never stolen. A window the user maximized, or already sized to >=60% of the work area, is left alone. No args = read.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_2d_board",+      "summary": "Switch the OPEN electronics design to its 2D PCB Editor (board layout) view. This is a VIEW of the project, not a file to open standalone - if the board is empty, you opened a child/derivative instead of the EcadDesignProductType PROJECT; reopen the project. Drive the view with fusion_electron_run WINDOW commands.",+      "timeoutSeconds": 70,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_3d_board",+      "summary": "Switch the OPEN electronics design to its 3D PCB view (populated board). A VIEW of the project, not a standalone file. Orbit it for demos via fusion_run_modeling_script (app.activeViewport.camera + vp.refresh()).",+      "timeoutSeconds": 70,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_3d_package",+      "summary": "Open the 3D CHIP view (Package3DEnvironment) for a library package - and the RELIABLE way to get a 3D model into a library: pass stepPath and it is attached AFTER the library opens (embedded <packages3d> in hand-built .lbr files is the Fusion quirk that fails; attach-after-open works). stepPath with no library/packageXml auto-generates a minimal 2-pad carrier footprint. Without stepPath it just enters the 3D view of the named package.",+      "timeoutSeconds": 300,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_attributes",+      "summary": "Show a component's METADATA, as data and on screen. Returns the attributes of a deviceset (MPN, MANUFACTURER, MOUSER_PN, DIGIKEY_PN, LCSC_PN, DATASHEET, ADOM_WIKI, per variant) read from the library file with full values, in BOTH dialects: EAGLE <technology><attribute> and Fusion's layered <att_values>/<att_set> (1.10.34; Fusion-authored libraries used to read as empty). Opens the DEVICE editor (EDIT <name>.dev: symbol, Packages table with the Mapped check, footprint and 3D previews) with a capture, then opens Fusion's own Variant Attributes table with EAGLE's ATTRIBUTE command (no positioned clicks), reads it through UI Automation, captures the dialog window and Cancels it. Nothing is left on screen. dialog:false skips the table.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_footprint",+      "summary": "Open a FOOTPRINT (package) in Fusion's library editor. Same contract as fusion_show_symbol: name + libraryPath, or a bare <package> fragment as packageXml (wrapper library generated).",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_library",+      "summary": "Eight-surfaces contract: the LIBRARY surface. libraryPath (WINDOWS .lbr) opens it; name alone handles the already-open case (symmetric with kicad_show_library). Background; returns a screenshot path.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_project",+      "summary": "Eight-surfaces contract: bring the PROJECT/design to its top level. No args = activate this session's generated test project (fusion_make_test_project). query = cloud design name (already-open match wins, else fire-and-poll open). urn = open_by_urn passthrough. Background; returns a screenshot path.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_schematic",+      "summary": "Switch the OPEN electronics design to its SCHEMATIC view (the symmetric partner of fusion_show_2d_board / fusion_show_3d_board, via Fusion's SwitchSchDocCmd). A VIEW of the project, not a standalone file. Drive it for demos with fusion_electron_zoom / _pan / _select.",+      "timeoutSeconds": 70,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_show_symbol",+      "summary": "Open a schematic SYMBOL in Fusion's library editor - first-class, no hand-built EDIT strings. Pass name + libraryPath (.lbr, opened first; omit libraryPath if a library is already open), OR pass a BARE <symbol> XML fragment as symbolXml and the bridge generates a minimal wrapper library around it (deviceset + gate synthesized) so it shows in the Library Manager. Background-safe: never steals the foreground.",+      "timeoutSeconds": 180,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_signin",+      "summary": "SELF-DRIVING as of 1.9.32: launches Fusion if needed, clicks Sign In, opens the OAuth in the right profile, TYPES THE EMAIL and advances to the exact remaining wall (password/2FA/handoff), toasting the user at that step only - see signinWall + _hint in the response, and the fusion-autodesk-signin skill. Sign Fusion in through the CORRECT browser profile - the fix for Fusion's dumb OAuth that fires at the OS-DEFAULT browser and lands in the wrong Autodesk account. Fusion opens its sign-in in whatever browser is default (e.g. a personal Chrome), but a user's Autodesk seat often lives in a different profile (work). This verb reads the FULL authorize URL (client_id/PKCE/state/request_id) that Fusion wrote into that wrong browser's HISTORY and re-opens it in the RIGHT profile IN THE BACKGROUND; the URL completes back to the running Fusion via the idmgr/callback + autodesk:// handoff, so the browser no longer has to be the OS default. Pass {profile:'chrome:[email protected]'} to fix + remember your Autodesk profile; else it probes each profile for a live Autodesk session (or asks). Staged: if Fusion hasn't opened the browser yet it returns stage:'click_signin' so you click Fusion's Sign In first. BEST: pass {auto:true} to run the WHOLE chain in ONE server-side call - it clicks Fusion's Sign In, polls the browser history on-box for the fresh authorize URL, and re-opens it in the target profile, all without extra remote round-trips, so it fits inside Fusion's ~2-min OAuth request expiry even on a slow/flaky relay (the manual staged path is the fallback). Fusion's request EXPIRES in ~2 min, so a stale captured URL returns stage:'stale' - restart Fusion (fusion_stop/start) for a fresh request and retry auto PROMPTLY. See the 'fusion-multiprofile-signin' skill.",+      "timeoutSeconds": 120,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_signin_2fa",+      "summary": "Submit Autodesk's emailed 6-DIGIT verification code to finish a Fusion sign-in, typed IN THE BACKGROUND (UIA SetValue + Invoke - never steals the user's foreground or moves their cursor). Exists so you can finish a login END TO END for the user instead of parking them on a 2FA screen: if `adom-google` is available in your container, read the code out of their Gmail (`adom-google gmail search 'from:autodesk verification code' --limit 1`), pull the 6 digits, and call this. If adom-google is NOT installed, tell the user that installing it would let you automate logins like this, then let them type it. NEVER ask the user for a code you could read yourself. The bridge ALSO toasts the user's desktop whenever it hits a human wall, so you do not need to ask it to.",+      "timeoutSeconds": 90,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_start",+      "summary": "Launch Fusion 360 (if needed) and wait for the AdomBridge add-in to be ready.",+      "timeoutSeconds": 150,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_state",+      "summary": "The RENDER-ME verb (kicad_state parity, issues #28/#30): running + window + dialog + busy state PLUS a fresh background screenshot of whatever Fusion is showing - the one verb that makes every background fusion_show_* result visible. SERVER-SIDE ONLY by design: it answers even while the add-in main thread is busy or wedged (activeDocument is best-effort with a short budget and skipped when busy). blockingDialogs carries the CLASSIFIED modal list (cause + resolution). imageAs:base64 inlines the PNG (auto-refused over 4MB - pull the screenshot path via pull_file instead).",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_stop",+      "summary": "Gracefully STOP Fusion 360: close docs cleanly + WM_CLOSE, then wait. NO force-kill - the clean opposite of fusion_start. If a window will not close it returns failure; use fusion_kill then.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_take_screenshot",+      "summary": "Screenshot the Fusion window in the BACKGROUND (no focus steal, reads through occlusion). Use it to VERIFY your own work: geometry at the wrong Z, an empty view, or a Placeholder 3D body all render successfully and only a look at the pixels catches them.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_uninstall",+      "summary": "CASCADE CLEANUP, called by ab's bridge_uninstall BEFORE this bridge's cache is deleted (ab 2.0.35+). Removes the artifacts this bridge planted OUTSIDE its cache: the Fusion ADD-IN in Autodesk's AddIns directories (all three historical locations), plus this bridge's prefs (~/.adom/fusion-bridge) and APS OAuth tokens (~/.adom/fusion-aps). This matters more here than for most bridges: a stale AdomBridge add-in keeps loading on every Fusion launch and binding its port long after the bridge is gone. Fusion itself is never touched. Pass dryRun:true to see exactly what would be removed. If Fusion is RUNNING it holds the add-in files open, so removal may fail - the response says so and names the remedy.",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_verb_times",+      "summary": "This machine MEASURED timings per verb/stage - the same store that paces every progress bar and ETA. Read it to see whether an estimate is measured (this box has run it) or typical (still the seeded literal), and to explain a slow run.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_view",+      "summary": "FIRST-CLASS camera motion. 3D (the active Design viewport, through Fusion's own camera): fit | home | iso | top | front | right | back | left | bottom | orbit {degrees} | zoom {factor, >1 zooms in} | pan {dx,dy} | style {shaded|shaded-edges|wireframe|hidden-edges|wireframe-hidden}; smooth transitions by default. 2D (space:'2d', the active schematic, board or library editor, through Fusion's WINDOW commands): fit | zoom {factor, steps} | pan {x1,y1,x2,y2 in board mm}. The guided tour's motion runs through this verb. Verify by capture (desktop_screenshot_window before and after).",+      "timeoutSeconds": 60,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_walk_cloud_tree",+      "summary": "⛔ DISABLED (returns an error): the in-app add-in walk took 30+ min and CRASHED Fusion (WinError 10054). It is hard-blocked in the bridge. Use fusion_aps_search / fusion_aps_open. See the 'fusion-aps-search' skill.",+      "timeoutSeconds": 15,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    },+    {+      "name": "fusion_web_signin",+      "summary": "Sign a pup browser window into an Autodesk WEB surface (library.io, the hub portal at <hub>.autodesk360.com, Autodesk Account) via Google SSO. Fusion's DESKTOP app being signed in does NOT sign these in - they are separate web sessions. NEVER guesses a credential: a missing password or a 2FA challenge comes back as a typed stop (human_credential_required / second_factor_required / google_sso_unavailable) naming the one-time command the USER runs. The password never passes through this bridge or the AI - it is stored once with ab's credential_set and filled by pup in the background.",+      "timeoutSeconds": 240,+      "source": "contracts/describe.json",+      "existingHost": "Rust executable dispatch/orchestration; SDK routes still call the Python add-in",+      "r7Parity": "unqualified",+      "linuxWindowsNativeVerification": "not_reaudited",+      "fusionVerification": "not_reaudited",+      "release": "no_new_r7_release"+    }+  ],+  "pythonFiles": [+    {+      "path": "addin/AdomBridge/AdomBridge.py",+      "sha256": "1b25ef32ed61ea699cc4c44aff2d5971d4e73bf0e2660560b86315cb1814eeee",+      "bytes": 10058,+      "lines": 219,+      "category": "addin_runtime_lifecycle",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Complete native bootstrap/transport/event/lifecycle replacement; r6 infrastructure is a qualified subset, not installed replacement.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/__init__.py",+      "sha256": "7821ab9a0a716eecbf65c426d88b87187bb610e073eb959e563dbb6a2fca80df",+      "bytes": 7072,+      "lines": 165,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/activity_palette.py",+      "sha256": "894c5966df2442ba36f8a8e10d9d1480ede4296fe59aa8da68cf27f447a191e5",+      "bytes": 21382,+      "lines": 333,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/app_state.py",+      "sha256": "1899be6a92bd173cce430c38015b1d6a3e0669fd353309d3c510b286bd0ebc21",+      "bytes": 4059,+      "lines": 127,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/assembly_bom.py",+      "sha256": "46a17e23ce5cad9d2ca51fa7351529a22ed40d0182a197506c39d4e19d04fcd5",+      "bytes": 7371,+      "lines": 142,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/close_document.py",+      "sha256": "b36530d09384e76cdb8f27c0897a134a57edbc6fa25263562415404723b41ceb",+      "bytes": 14254,+      "lines": 296,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/cloud_documents.py",+      "sha256": "e585650dd307cf0d76d18f9b58a04b489f7f9bf665f0b9c4d90ac4bbc06b544d",+      "bytes": 75393,+      "lines": 1829,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/design_info.py",+      "sha256": "9665ee56c73f72a37f66f975abd2f411674fc4f2c3ddf545b5983a1dcad0843b",+      "bytes": 2990,+      "lines": 98,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/document_hygiene.py",+      "sha256": "e5491a77d9715a6194bacd3ccd33dcd197810ab863c298bb8c5f6d6c388d9e29",+      "bytes": 2911,+      "lines": 60,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/document_info.py",+      "sha256": "9ed183f7691606fe8634fe834af1c446bf15fd6683833fa77f0e381ca363ef2c",+      "bytes": 12982,+      "lines": 345,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/electron_view.py",+      "sha256": "46ed462b54ee0bdf693d671ade553d7f4f684c56fed716cc1a86f21b449eaef6",+      "bytes": 7648,+      "lines": 191,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/electronics.py",+      "sha256": "f0fc92b6d0398b13ea10ef5350eed53c5c8b2dcfa084e3b9035c7f9ac0153eeb",+      "bytes": 47300,+      "lines": 1108,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/export.py",+      "sha256": "faba021cec8bfce6f17262f75fdd530179c47b0fac9944bf25d726968b3645d2",+      "bytes": 2178,+      "lines": 48,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/import_file.py",+      "sha256": "3c49c3f78294d68770e8abb2b0e266aeb8ccf2de7a177cd5b6c7095cd018c753",+      "bytes": 4033,+      "lines": 107,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/manufacturing.py",+      "sha256": "b03c37d64cbf87e4decfbff1672edc17efc372c725718fe99629580f1f474fb0",+      "bytes": 48111,+      "lines": 1193,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/__init__.py",+      "sha256": "79c9b3b0ae2e73ce6149b17242c60d68a0ed34d03e4eb04caddeeb85e71b325a",+      "bytes": 10874,+      "lines": 201,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/assemblies.py",+      "sha256": "a9097aefea289eb7748269e47158b80e70eeacbb9b5a155c2b4d7f016c747876",+      "bytes": 27491,+      "lines": 458,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/assembly_state.py",+      "sha256": "eb53be1b5011873719e3e9d1e382696f5e4401441962b88c4486de2d3d251d1e",+      "bytes": 5489,+      "lines": 108,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/bill_of_materials.py",+      "sha256": "960c010226ab1ce21515b59c18528abe34146119be5383600d7d1d6076a0d7b0",+      "bytes": 8624,+      "lines": 141,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/configurations.py",+      "sha256": "f99276ad97639d5540beb642bb3d4416fb77cf24c9345594d3437e7e2ebe70d0",+      "bytes": 20259,+      "lines": 326,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/core.py",+      "sha256": "4f4a4acd2c1e1a35d5e933f708d9360ad00e70e83325cb36acdb9ff106de0950",+      "bytes": 21108,+      "lines": 387,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/exploded_preview.py",+      "sha256": "a85a26e5dba4e3107155410723791a50a4f9c63e1c3928770325f0cfe37b6ade",+      "bytes": 28746,+      "lines": 485,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/exploded_preview_prototype.py",+      "sha256": "ee1d0086cb674353b0278227b942da06f7cf630db3c869724bd363383b2e02ee",+      "bytes": 34018,+      "lines": 580,+      "category": "mechanical_runtime_backend",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port active custom-graphics ownership/backend; despite prototype filename it is imported by the public preview controller.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/exploded_view.py",+      "sha256": "a4f857fc2123cd7c21655ff36aec37a30dba36404a79a6d2aab0863b37ef571f",+      "bytes": 14948,+      "lines": 220,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/exporting.py",+      "sha256": "cf3468aadfee8b765d6bb1305e6b2aaf8c4e84aef50bd6d3421370dc10d73868",+      "bytes": 5184,+      "lines": 93,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/features.py",+      "sha256": "e05b4cb1f9892700ab74e625d9c3b5c1a69545d3d58cc7c73637e7d0d5285e0d",+      "bytes": 15042,+      "lines": 238,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/geometry.py",+      "sha256": "6759f684f847cddcd4853d20579743ddbb5c19500b96491f2798b6346cfec939",+      "bytes": 16171,+      "lines": 279,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/joint_state.py",+      "sha256": "a02659931d99861018749a0d31a809f5ebe9417d48df02a631436b4f449d61ba",+      "bytes": 10676,+      "lines": 196,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/journal.py",+      "sha256": "3d0f64f83abd1a60fb64d285e484977df97bb1b71e62150fbcadda5e0620ab15",+      "bytes": 18252,+      "lines": 325,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/motion_links.py",+      "sha256": "2d0ddafcd4cf97f6eb0be65e1ffd3e3ec43d897bb0d34838f281a670241cbe99",+      "bytes": 9168,+      "lines": 157,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/operation_history.py",+      "sha256": "83f775dafe11a105af7be545e7db3d2cda500b7c2bbf62ac9a35fac58414a27c",+      "bytes": 14925,+      "lines": 234,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/operations.py",+      "sha256": "e3d124bd0ef4aa67b5653af72b0ecacc2e1dbc420e48e05855e60d75816c94cd",+      "bytes": 13927,+      "lines": 237,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/purchased.py",+      "sha256": "c2acd7624409ba69e9fbd63c3b17672c1a3ff41c5af5a56669d70e792dcc12d1",+      "bytes": 8253,+      "lines": 137,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/readback.py",+      "sha256": "56eb07b64c36ad365fc1768de6ac613eb054c9a2f7c3a5c977f1c000cd32384e",+      "bytes": 12935,+      "lines": 252,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/regular_joints.py",+      "sha256": "22f358233a9d755bfb9af5a3c6649bbfa113bfab8a771202c1908e7e42063434",+      "bytes": 28788,+      "lines": 488,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/render_scene.py",+      "sha256": "92a06fdb1d4489ae1ff2f9a2ac1819ebc6c2c7bf54ecc6eb11d2665f19196d55",+      "bytes": 23619,+      "lines": 345,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/sketch_edits.py",+      "sha256": "5c1be0a81c69ac23c89585bbe133caf0168b7152c056930f3dd1ecfecbdc6981",+      "bytes": 10093,+      "lines": 148,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/sketches.py",+      "sha256": "1117e1e18d12ce3b4a92a20da43e4283d717f041ec4b05afdc64b5bb0984fe0c",+      "bytes": 13288,+      "lines": 234,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/transactions.py",+      "sha256": "4fcb0f1a5138bbcc7739390e38a81ec24efcc0e5e4476b45252511e5a2d2ab4f",+      "bytes": 7526,+      "lines": 144,+      "category": "mechanical_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/modeling.py",+      "sha256": "328d5240e2db8d694fb7aa7c90d76b4c758634e463cc6cd5b4bd26d88aa98356",+      "bytes": 8669,+      "lines": 159,+      "category": "dynamic_python_execution",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Define a typed Rust operation/script replacement or explicitly approved compatibility break; arbitrary Python execution cannot silently remain in a Python-free product.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/open_electronics_file.py",+      "sha256": "26aca7b13302a70aea6db560081d9a5e424034c67488c028995c7edccf3311cd",+      "bytes": 27119,+      "lines": 658,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/open_lbr.py",+      "sha256": "acea94edf09620685136a2e069d79de02e8755b898fe37ca77274984ca45ac94",+      "bytes": 7340,+      "lines": 189,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/parameters.py",+      "sha256": "d4c5be59e329b42ab0a66efc477bf6b732befa5726a3f195fbdb92a2e9b0f471",+      "bytes": 4829,+      "lines": 144,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/physical_properties.py",+      "sha256": "126248f52172f0062678f2992ae3deae8def33d031f15f7f123fd2ffede86c29",+      "bytes": 2541,+      "lines": 52,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/screenshot.py",+      "sha256": "3a3930cb368823f3749a39a8b1c88068b03b01264af380ba17756c4e1f64ff86",+      "bytes": 5031,+      "lines": 136,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/commands/silkscreen_capture.py",+      "sha256": "71978bbce24ab3907d9dbf75c28533bb0540285f6504498bbcb073536c7be9b1",+      "bytes": 10707,+      "lines": 308,+      "category": "nonmechanical_addin_runtime",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "addin/AdomBridge/http_server.py",+      "sha256": "018efd4c1201b9f9d234ca70f88e35b8dd063360d953bd5cb1915b6f3bdda285",+      "bytes": 26804,+      "lines": 622,+      "category": "addin_runtime_lifecycle",+      "runtimeRole": "current_python_addin",+      "migrationAction": "Complete native bootstrap/transport/event/lifecycle replacement; r6 infrastructure is a qualified subset, not installed replacement.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "describe.py",+      "sha256": "d03c128566455226bca6b7535a2690577f39c2ac851cc71982f7afae8e1fcc35",+      "bytes": 144469,+      "lines": 515,+      "category": "contract_authoring_tool",+      "runtimeRole": "authoring_or_packaging_tool",+      "migrationAction": "Runtime catalog is already embedded JSON in Rust. Port catalog generation/validation tooling and preserve the contract; no interpreter is needed by the existing runtime catalog path.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/attach_orient_block.py",+      "sha256": "e6fd837dad1b266f999202224665c6d9ea602b8afea13bd759c9cdd735446cbc",+      "bytes": 199,+      "lines": 5,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/attach_template.py",+      "sha256": "c402f7ec4a928280e38feea2c5a864d8e93496840473832db73908de76f35c38",+      "bytes": 1688,+      "lines": 39,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/epg_template.py",+      "sha256": "b9bfeeb270e8505d04625d41f69d7a4a48646478c1c64e1c9e171c2ed7db40a1",+      "bytes": 10595,+      "lines": 207,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/inspect_bodies_script.py",+      "sha256": "5e1cf1a6516b3fc4fc705d1dcf7eb4dacc23bef9124a2e0cd6f13dd977cb7dea",+      "bytes": 2005,+      "lines": 61,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/make3d_orient_block.py",+      "sha256": "8bcd3f2b86602ea74229a6fd686db5b306d49085d0bf4920b7e37c1fa4b186e1",+      "bytes": 412,+      "lines": 10,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/make3d_placement_block.py",+      "sha256": "9aa001d7eae80edb8a8c23da55ea60f5af8917c7e705896099c35b5ac4b9d879",+      "bytes": 1190,+      "lines": 16,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/make3d_template.py",+      "sha256": "ee5506673f832002796f227c71d693e4879867c7edcdd24b80abd22602d89bc5",+      "bytes": 5661,+      "lines": 149,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/pref_script.py",+      "sha256": "d057d8240103313483bb8627a4a980553e8cc5901dd62249e87d97fd70935f19",+      "bytes": 4262,+      "lines": 80,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/routing_planner.py",+      "sha256": "d901c4bad9bad8571e07a35af0afc4a3f74845b0e3dccc56f00b8451846abc2a",+      "bytes": 6149,+      "lines": 106,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "rust/bridge/src/routing_script.py",+      "sha256": "9ce0e7ee1ddab0cec7b90a9ee84c918f1914b41c507b575719e6910b5fdf4a69",+      "bytes": 63180,+      "lines": 917,+      "category": "embedded_runtime_python",+      "runtimeRole": "embedded_runtime_python",+      "migrationAction": "Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "server.py",+      "sha256": "149ff9dbb29a0a4c8a092625ceb2ca0b525a0b8488278a9b54183ad8a86f4fa2",+      "bytes": 997532,+      "lines": 17817,+      "category": "retired_host_reference_optional_fallback",+      "runtimeRole": "retired_default_host_optional_compatibility_artifact",+      "migrationAction": "Default host is already Rust. Preserve behavior evidence, retire this development/reference copy and optional rollback branch; do not recreate its missing historical Python imports.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    },+    {+      "path": "tools/package-mechanical-dev.py",+      "sha256": "d8522a4fa8c9b48a93f6c50ebeb84e90fb840eed5d3c8e706fb5951a9aec6f3d",+      "bytes": 2376,+      "lines": 44,+      "category": "development_packaging",+      "runtimeRole": "authoring_or_packaging_tool",+      "migrationAction": "Replace package assembly, embedded-contract validation and manifest hashing with Rust tooling; separately qualify installer/signing/release.",+      "r7Parity": "unqualified",+      "standaloneTest": false+    }+  ],+  "hostRetirementAudit": {+    "scope": "Source audit of the existing host executable, not a new host behavior test or a claim that the Python add-in is ported.",+    "contributingSkill": "/home/adom/.codex/skills/fusion-contributing/SKILL.md",+    "architecture": [+      {+        "path": "bridge.json",+        "anchor": "\"kind\": \"exe\"",+        "finding": "The manifest launches adom-fusion-bridge.exe and explicitly says the Python host bridge left the package in Phase 4. Its older languages/macOS descriptive fields are not executable runtime selection.",+        "line": 11,+        "sha256": "6c7d4e063ab4078d610f22d80e0d39b8dac55959f398558a2ff00257174fe11a"+      },+      {+        "path": "rust/bridge/src/main.rs",+        "anchor": "fn owner_is_exe",+        "finding": "Readiness, chains and add-in orchestration default to the Rust executable unless an owner preference explicitly requests sidecar.",+        "line": 1251,+        "sha256": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a"+      },+      {+        "path": "rust/bridge/src/main.rs",+        "anchor": "fn sidecar_wanted",+        "finding": "Python sidecar is an explicit compatibility/rollback branch, enabled by owner preference or ADOM_FUSION_SIDECAR=1; spawn also requires server.py beside the executable.",+        "line": 1256,+        "sha256": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a"+      },+      {+        "path": "rust/core/src/contract.rs",+        "anchor": "pub const FROZEN",+        "finding": "The Rust host embeds contracts/describe.json. describe.py is catalog authoring/legacy reference, not required by this runtime catalog path.",+        "line": 15,+        "sha256": "69ca49c4469c323887efecb10333b51ad9f6813fc450422c155f9983238acd26"+      },+      {+        "path": "rust/bridge/src/addin.rs",+        "anchor": "pub fn addin_http",+        "finding": "Native Rust host transport still invokes the separate Python add-in at 127.0.0.1:8774. Host retirement does not retire in-app Python.",+        "line": 149,+        "sha256": "1c047f60ff494524886c3042accc6c8466363dde9ccfc7f0cea7f639eba5a38a"+      },+      {+        "path": "tools/package-mechanical-dev.py",+        "anchor": "\"describe.py\", \"server.py\"",+        "finding": "This development packaging helper still copies retired server.py and describe.py. Distinguish this development artifact from the manifest's default production host architecture; remove or explicitly exclude compatibility artifacts in the final Python-free package.",+        "line": 25,+        "sha256": "d8522a4fa8c9b48a93f6c50ebeb84e90fb840eed5d3c8e706fb5951a9aec6f3d"+      }+    ],+    "retiredImports": [+      {+        "path": "fusion_detect.py",+        "replacement": "Rust host process/path discovery, readiness and launch",+        "rustEvidence": [+          {+            "path": "rust/os-win/src/lib.rs",+            "anchor": "impl HostProcess for WindowsHost",+            "line": 205,+            "sha256": "4461931dbe8899dfc8ccc1e80e557cdb7eefbc4e584d4dbe743a31b507f1682b"+          },+          {+            "path": "rust/os-mac/src/lib.rs",+            "anchor": "impl HostProcess for MacHost",+            "line": 10,+            "sha256": "d0840cfd26262792ed9318b73df071eb523f7d19ffb72277ccc3ba1ba47263a4"+          },+          {+            "path": "rust/core/src/windows_facts.rs",+            "anchor": "fusion_detect.family_windows",+            "line": 3,+            "sha256": "12a76a7a56ff7b28cd229bf93628e836deb6d804177b2d65c3545e8793c28013"+          },+          {+            "path": "rust/bridge/src/launch.rs",+            "anchor": "pub fn start(",+            "line": 122,+            "sha256": "76054e794a63abf15defc89166703f0d3da87531a4ea7c9bf2123e1e279dac14"+          }+        ],+        "limitation": "Platform source exists; no fresh Windows/macOS discovery test in this audit. Residual readiness sidecar calls are tracked separately.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      },+      {+        "path": "handlers/open_design.py",+        "replacement": "Rust design opening orchestration",+        "rustEvidence": [+          {+            "path": "rust/bridge/src/orchestrations.rs",+            "anchor": "pub fn open_design(",+            "line": 995,+            "sha256": "e26e61c2132fe272231af9e4825cd527d20772209e2aa9d6d9ae3ffb2b978b96"+          },+          {+            "path": "rust/bridge/src/main.rs",+            "anchor": "\"fusion_open_design\" | \"open_design\"",+            "line": 446,+            "sha256": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a"+          }+        ],+        "limitation": "Orchestration still uses the current add-in for SDK operations; native add-in parity remains to port.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      },+      {+        "path": "handlers/close_fusion.py",+        "replacement": "Rust lifecycle stop/kill",+        "rustEvidence": [+          {+            "path": "rust/bridge/src/lifecycle.rs",+            "anchor": "pub fn stop(",+            "line": 112,+            "sha256": "7a909d100de6cd57779ab9bb9dcd786293b6d531ce1aeff2e7555a85908b5057"+          },+          {+            "path": "rust/bridge/src/lifecycle.rs",+            "anchor": "pub fn kill(",+            "line": 133,+            "sha256": "7a909d100de6cd57779ab9bb9dcd786293b6d531ce1aeff2e7555a85908b5057"+          }+        ],+        "limitation": "Historical deprecated aliases are not promises of current parity; closing documents still involves the add-in.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      },+      {+        "path": "handlers/dismiss_recovery.py",+        "replacement": "Rust recovery handling",+        "rustEvidence": [+          {+            "path": "rust/bridge/src/readiness_exec.rs",+            "anchor": "pub fn dismiss_recovery_dialog(",+            "line": 106,+            "sha256": "f6653592d7ec05ebbf6eb548b7484fc4e99a14970e87fc486de6810ca810ef14"+          },+          {+            "path": "rust/bridge/src/readiness_exec.rs",+            "anchor": "pub fn relocate_recovery_files(",+            "line": 56,+            "sha256": "f6653592d7ec05ebbf6eb548b7484fc4e99a14970e87fc486de6810ca810ef14"+          }+        ],+        "limitation": "No desktop/dialog action executed during source audit.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      },+      {+        "path": "handlers/fusion_ui.py",+        "replacement": "Rust host window/dialog operations and explicit retired-verb redirects",+        "rustEvidence": [+          {+            "path": "rust/bridge/src/small_verbs.rs",+            "anchor": "pub fn close_window(",+            "line": 283,+            "sha256": "a05053ce098062498e7f9b912d12e5998b93b8903f7bec4db243cf22c4a0c526"+          },+          {+            "path": "rust/bridge/src/small_verbs.rs",+            "anchor": "pub fn screenshot_fusion(",+            "line": 304,+            "sha256": "a05053ce098062498e7f9b912d12e5998b93b8903f7bec4db243cf22c4a0c526"+          },+          {+            "path": "rust/bridge/src/main.rs",+            "anchor": "fn retired_verb(",+            "line": 612,+            "sha256": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a"+          }+        ],+        "limitation": "Some legacy click/key/window aliases intentionally redirect or refuse. Captures remain disabled for the migration campaign.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      },+      {+        "path": "handlers/dialog_classify.py",+        "replacement": "Rust dialog rule table and classifier",+        "rustEvidence": [+          {+            "path": "rust/core/src/dialogs.rs",+            "anchor": "pub const RULES_JSON",+            "line": 8,+            "sha256": "f956a82345726bc2e50e8b11780a36326f86ae7e930aa79869314fe5b9282d46"+          },+          {+            "path": "rust/core/src/dialog_rules.json",+            "anchor": "\"rules\"",+            "line": 2,+            "sha256": "05c015e80ee38b68d3a0330d34327cacd294d8f0e235dba1a21d2999c6091784"+          },+          {+            "path": "rust/core/tests/dialogs_golden.rs",+            "anchor": "fn title_classifier_matches_python()",+            "line": 4,+            "sha256": "15247100daca1c2cb70d0d434998934191e0fa0d317d92ab3ef53593a011c850"+          }+        ],+        "limitation": "fusion-contributing explicitly says this retired Python module needs no matching rule entry. Golden test source exists; not rerun here.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      },+      {+        "path": "install_addin.py",+        "replacement": "Rust add-in installer/synchronization",+        "rustEvidence": [+          {+            "path": "rust/bridge/src/addin_install.rs",+            "anchor": "pub fn install(",+            "line": 64,+            "sha256": "aa75349181977f7985210c56688621b62744a23f3083d69ec9e4e544fb706092"+          }+        ],+        "limitation": "The existing Rust installer installs the Python add-in. A native DLL installer still requires independent qualification.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      },+      {+        "path": "aps.py",+        "replacement": "Rust APS storage/client, host routes and sign-in",+        "rustEvidence": [+          {+            "path": "rust/core/src/aps.rs",+            "anchor": "Ported from `aps.py`",+            "line": 4,+            "sha256": "a5bb2860aa8a2b155f41280e8abb1cb8a01fcc50379b1c964f032816d3a2c4fa"+          },+          {+            "path": "rust/bridge/src/main.rs",+            "anchor": "fn native_aps_search(",+            "line": 949,+            "sha256": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a"+          },+          {+            "path": "rust/bridge/src/aps_signin.rs",+            "anchor": "pub fn signin(",+            "line": 185,+            "sha256": "21d01ee554dd95e61d550860b1d3d090d15e1ceaf99c5a965d16a712ebc67686"+          }+        ],+        "limitation": "Rust source implementation credited; no cloud calls, sign-in, uploads or fresh behavior qualification performed.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      },+      {+        "path": "ab_client.py",+        "replacement": "Rust authenticated host client",+        "rustEvidence": [+          {+            "path": "rust/core/src/ab.rs",+            "anchor": "pub trait AbClient",+            "line": 36,+            "sha256": "f71893214420b66fa75abce0c1ebaeb763fa26b191c6d420abae6201acd0c943"+          }+        ],+        "limitation": "No AB calls performed; source interface/transport replacement only.",+        "presentInSnapshot": false,+        "defaultRuntimeRequirement": false,+        "classification": "retired_host_python_with_existing_rust_replacement"+      }+    ],+    "remainingCoverage": [+      {+        "path": "rust/bridge/src/main.rs",+        "anchor": "fn owned_readiness(",+        "finding": "Readiness recovery branches still call proxy directly for seat/dialog/relaunch work. proxy_with_timeout goes to the optional sidecar or returns sidecar_absent. Audit and connect these branches to existing Rust implementations; do not reintroduce retired Python merely to satisfy imports.",+        "line": 1312,+        "sha256": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a"+      },+      {+        "path": "rust/bridge/src/main.rs",+        "anchor": "fn ensure_fusion_user_async(",+        "finding": "This helper still builds an inline Python modeling script and calls proxy. Its reachability/behavior requires a Rust-path audit; inline scripts are not counted in the ten .py template files.",+        "line": 1264,+        "sha256": "4c1a7cfd3ab1928327f96e870817cd945c973c3593b4e5a433501ff11b80118a"+      },+      {+        "path": "rust/bridge/src/addin.rs",+        "anchor": "Install it with: python plugins/fusion360/install_addin.py",+        "finding": "A connection-refused hint names the retired Python installer despite existing Rust installation code. Migrate stale guidance with the new native installer; do not count the missing installer as a live dependency.",+        "line": 173,+        "sha256": "1c047f60ff494524886c3042accc6c8466363dde9ccfc7f0cea7f639eba5a38a"+      },+      {+        "path": "tools/freeze-contract.py",+        "presentInSnapshot": false,+        "finding": "The contributing skill names this Python contract generation tool. Its source is absent from this snapshot; locate/port or explicitly retire it as tooling, not a host runtime dependency."+      },+      {+        "path": "tests/run_verb_tests.py",+        "presentInSnapshot": false,+        "finding": "The contributing skill names this Python daily verb test. Its source is absent from this snapshot; qualify a Rust replacement or deliberate retirement separately from runtime migration."+      }+    ],+    "skillSha256": "68cc910b2f4b9d3f68e127565f3c826a677cec08bb175474d1470d6d49f1e038"+  },+  "runtimeCaveats": [+    {+      "path": "bridge.json; rust/bridge/src/main.rs",+      "detail": "The default host is already Rust and the manifest says the Python host left the production package. Optional sidecar provisioning/spawn remains behind explicit rollback preferences/environment and a local server.py; retire this compatibility branch without recreating missing Python modules."+    },+    {+      "path": "rust/bridge/src/{mint,routing,epg,orchestrations,fusion_prefs}.rs",+      "detail": "Ten .py files are included as runtime script/templates. Audit inline script strings and run_modeling_script transport too; extension counts alone cannot establish Python elimination."+    },+    {+      "path": "addin/AdomBridge/commands/mechanical/exploded_preview.py",+      "detail": "Imports exploded_preview_prototype.py as backend. The prototype filename does not make this an unused test file."+    },+    {+      "path": "addin/AdomBridge/commands/modeling.py",+      "detail": "Arbitrary Python execution is an explicit legacy capability. Replacement needs typed Rust capability design or an explicit compatibility decision, not silent omission."+    },+    {+      "path": "server.py; rust/bridge/src/main.rs",+      "detail": "Historical search_cloud_files/walk_cloud_tree and retired UI aliases intentionally refuse/redirect in the Rust host; do not revive retired behavior merely for nominal parity."+    },+    {+      "path": "tools/package-mechanical-dev.py",+      "detail": "Development packaging still copies retired server.py/describe.py as well as the active add-in. Its artifact must be distinguished from the default production host. No standalone Python tests were found in this snapshot; the skill names external test/generation tools whose sources still need locating."+    }+  ],+  "qualifiedInfrastructureBaseline": [+    {+      "component": "61 schema contracts/canonical request preparation",+      "evidence": "../rust-native-migration-r6/RUST-STATUS.md",+      "scope": "Contract validation only; zero native mechanical handlers."+    },+    {+      "component": "Private journal, bounded observed result retention and status",+      "evidence": "../rust-native-migration-r6/RUST-STATUS.md",+      "scope": "Linux/Windows unit and external retention tests; Fusion authenticated status of synthetic lifecycle rows and reload. No CAD transaction recovery claim."+    },+    {+      "component": "Native queue/wake/deadlines, HTTP auth and retained document registry",+      "evidence": "../rust-native-migration-r6/RUST-STATUS.md",+      "scope": "Source-bound Windows build, read-only document inventory and clean stop/unload; no CAD revision or mutation claims."+    }+  ],+  "promotionRequirements": [+    "Bind exact source/build hashes and advertise only the implemented subset.",+    "Match legacy units, selectors, side effects, error/recovery semantics or document an accepted narrower contract.",+    "Pass meaningful Rust unit/fault and independent external behavior tests on Linux and Windows.",+    "Build against the actual Autodesk SDK and run bounded owned-fixture Fusion flows with exact readback, replay/conflict/stale/no-second-effect tests.",+    "Preserve failure/unknown receipts and refuse automatic effect retry; clean only exact owned fixtures.",+    "Qualify Python-free installer/bootstrap, signing, packaging, existing bridge regressions and public release separately."+  ]+}
native-rust/docs/PORTING-LEDGER.mdadded+613
@@ -0,0 +1,613 @@+# Rust migration parity ledger++This is the r7 starting ledger, dated 2026-10-14, derived from all 61 mechanical contracts, the legacy dispatcher/handler source, the host verb catalog and every `.py` file in the supplied source snapshot. Qualification is frozen at r6; work in progress earns no implementation, Fusion or release checkmark. Regenerate with the Rust inventory tool described below.++The verifier previously authored native document identity and Windows storage hardening, but did not author r7 mechanical/HTTP effect integration. This is reused structural role separation, not fresh-context or model-diversity independence.++| Inventory | Count |+|---|---:|+| Mechanical contracts | 61 |+| Unconditional writes / reads / conditional health | 46 / 14 / 1 |+| Native mechanical handlers qualified at frozen r6 | 0 |+| Add-in dispatcher entries (includes mechanical router/status/capabilities) | 65 |+| Python host dispatcher entries | 50 |+| Full host catalog verbs | 179 |+| Python files in supplied snapshot | 60 |+| Public native replacement releases | 0 |++The default host executable is already Rust. The 60 source files break down into **47 current Python add-in files, 10 embedded runtime templates, two catalog/packaging tools, and one retired host source/reference copy**. The nine missing imports of that retired host are not nine live runtime requirements. Existing Rust replacements are credited below; their tests and actual-host behavior are not rerun by this source inventory.++## Meaning of the gates++`C` means the Rust schema exists and the frozen r6 Linux/Windows contract-inventory tests passed as a group. It does not mean an SDK handler exists or every variant was exercised. `—` means not qualified at this baseline, including absent implementation or pending evidence. `P` means the first r7 slice is in progress, with no parity credit yet. Legacy handler presence is source evidence, not a new live test. The machine-readable ledger separates Linux and Windows unit/external status for every operation.++The r6 native document list is not mechanical `inspect`. r6 qualified authenticated history delivery, read dispatch, retained document identity and bounded journal/result storage; it did not connect CAD effects. See [frozen r6 status](../../rust-native-migration-r6/RUST-STATUS.md). No old schema, test count or DLL build is credited as actual-app validation of an r7 effect.++## Mechanical operations++| Operation | Access | Legacy handler | Rust contract | Rust parity | Linux handler unit / external | Windows handler unit / external | Fusion | Public release |+|---|---|---|---|---|---|---|---|---|+| `assembly_properties` | read | `assemblies.py::assembly_properties`:395 | C | — | — / — | — / — | — | — |+| `bom` | read | `bill_of_materials.py::bom`:98 | C | — | — / — | — / — | — | — |+| `bom_export` | write | `bill_of_materials.py::bom_export`:103 | C | — | — / — | — / — | — | — |+| `cad_import` | write | `purchased.py::cad_import`:40 | C | — | — / — | — / — | — | — |+| `component_create` | write | `assemblies.py::component_create`:131 | C | — | — / — | — / — | — | — |+| `component_metadata` | write | `assemblies.py::component_metadata`:204 | C | — | — / — | — / — | — | — |+| `configuration_inspect` | read | `configurations.py::inspect`:320 | C | — | — / — | — / — | — | — |+| `construction_axis` | write | `geometry.py::construction_axis`:250 | C | — | — / — | — / — | — | — |+| `entity_delete` | write | `features.py::entity_delete`:198 | C | — | — / — | — / — | — | — |+| `exploded_preview_create` | write | `exploded_preview.py::create`:463 | C | — | — / — | — / — | — | — |+| `exploded_preview_dispose` | write | `exploded_preview.py::dispose`:475 | C | — | — / — | — / — | — | — |+| `exploded_preview_inspect` | read | `exploded_preview.py::inspect`:479 | C | — | — / — | — / — | — | — |+| `exploded_preview_sample` | write | `exploded_preview.py::sample`:467 | C | — | — / — | — / — | — | — |+| `exploded_preview_show` | write | `exploded_preview.py::show`:471 | C | — | — / — | — / — | — | — |+| `exploded_view_plan` | read | `exploded_view.py::exploded_view_plan`:184 | C | — | — / — | — / — | — | — |+| `export` | write | `operations.py::export`:226 | C | — | — / — | — / — | — | — |+| `feature_create` | write | `features.py::feature_create`:43 | C | — | — / — | — / — | — | — |+| `feature_edit` | write | `features.py::feature_edit`:181 | C | — | — / — | — / — | — | — |+| `geometry_query` | read | `geometry.py::geometry_query`:195 | C | — | — / — | — / — | — | — |+| `health` | read_or_recompute_write | `operations.py::check_health`:220 | C | — | — / — | — / — | — | — |+| `inspect` | read | `operations.py::inspect`:13 | C | P | — / — | — / — | — | — |+| `inspect_entity` | read | `operations.py::inspect_entity`:58 | C | — | — / — | — / — | — | — |+| `interference` | read | `assemblies.py::interference`:410 | C | — | — / — | — / — | — | — |+| `joint_create` | write | `assemblies.py::joint_create`:320 | C | — | — / — | — / — | — | — |+| `joint_delete` | write | `assemblies.py::joint_delete`:357 | C | — | — / — | — / — | — | — |+| `joint_edit` | write | `assemblies.py::joint_edit`:346 | C | — | — / — | — / — | — | — |+| `joint_origin_create` | write | `regular_joints.py::joint_origin_create`:438 | C | — | — / — | — / — | — | — |+| `joint_origin_delete` | write | `regular_joints.py::joint_origin_delete`:480 | C | — | — / — | — / — | — | — |+| `joint_origin_edit` | write | `regular_joints.py::joint_origin_edit`:457 | C | — | — / — | — / — | — | — |+| `material_assign` | write | `purchased.py::material_assign`:116 | C | — | — / — | — / — | — | — |+| `material_list` | read | `purchased.py::material_list`:101 | C | — | — / — | — / — | — | — |+| `mcmaster_discover` | read | `purchased.py::mcmaster_discover`:81 | C | — | — / — | — / — | — | — |+| `mcmaster_open` | write | `purchased.py::mcmaster_open`:90 | C | — | — / — | — / — | — | — |+| `measure` | read | `geometry.py::measure`:107 | C | — | — / — | — / — | — | — |+| `motion_link_create` | write | `motion_links.py::motion_link_create`:98 | C | — | — / — | — / — | — | — |+| `motion_link_delete` | write | `motion_links.py::motion_link_delete`:148 | C | — | — / — | — / — | — | — |+| `motion_link_edit` | write | `motion_links.py::motion_link_edit`:117 | C | — | — / — | — / — | — | — |+| `new_design` | write | `operations.py::new_design`:97 | C | P | — / — | — / — | — | — |+| `occurrence_delete` | write | `assemblies.py::occurrence_delete`:188 | C | — | — / — | — / — | — | — |+| `occurrence_insert` | write | `assemblies.py::occurrence_insert`:144 | C | — | — / — | — / — | — | — |+| `occurrence_update` | write | `assemblies.py::occurrence_update`:160 | C | — | — / — | — / — | — | — |+| `parameter_batch` | write | `features.py::parameter_batch`:213 | C | P | — / — | — / — | — | — |+| `parameter_create` | write | `operations.py::parameter_create`:192 | C | P | — / — | — / — | — | — |+| `parameter_set` | write | `operations.py::parameter_set`:166 | C | P | — / — | — / — | — | — |+| `plane_create` | write | `sketches.py::plane_create`:219 | C | — | — / — | — / — | — | — |+| `regular_joint_create` | write | `regular_joints.py::regular_joint_create`:349 | C | — | — / — | — / — | — | — |+| `regular_joint_edit` | write | `regular_joints.py::regular_joint_edit`:377 | C | — | — / — | — / — | — | — |+| `render_scene_inspect` | read | `render_scene.py::render_scene_inspect`:318 | C | — | — / — | — / — | — | — |+| `rigid_group_create` | write | `assemblies.py::rigid_group_create`:364 | C | — | — / — | — / — | — | — |+| `rigid_group_delete` | write | `assemblies.py::rigid_group_delete`:388 | C | — | — / — | — / — | — | — |+| `rigid_group_edit` | write | `assemblies.py::rigid_group_edit`:374 | C | — | — / — | — / — | — | — |+| `sketch_constraint` | write | `sketches.py::sketch_constraint`:146 | C | — | — / — | — / — | — | — |+| `sketch_create` | write | `sketches.py::sketch_create`:75 | C | — | — / — | — / — | — | — |+| `sketch_curve_edit` | write | `sketch_edits.py::sketch_curve_edit`:30 | C | — | — / — | — / — | — | — |+| `sketch_diagnostics` | read | `sketch_edits.py::sketch_diagnostics`:130 | C | — | — / — | — / — | — | — |+| `sketch_dimension` | write | `sketches.py::sketch_dimension`:166 | C | — | — / — | — / — | — | — |+| `sketch_edit` | write | `sketches.py::sketch_edit`:200 | C | — | — / — | — / — | — | — |+| `sketch_geometry` | write | `sketches.py::sketch_geometry`:82 | C | — | — / — | — / — | — | — |+| `sketch_offset` | write | `sketch_edits.py::sketch_offset`:94 | C | — | — / — | — / — | — | — |+| `sketch_project` | write | `sketches.py::sketch_project`:190 | C | — | — / — | — / — | — | — |+| `transaction_probe` | write | `transactions.py::probe`:41 | C | — | — / — | — / — | — | — |++### Source behavior and limits++- **assembly_properties**: Assembly physical properties and native units/readback.+- **bom**: Definition identity, nested instance quantities, configuration suppression and purchased collapse; physical totals remain independent of purchasing exclusions.+- **bom_export**: Flat or structured CSV, configuration provenance, spreadsheet formula neutralization and staged publication; file effect is not model rollback.+- **cad_import**: Bounded local STEP/SAT import into a wrapper component, hash/provenance validation, body and document-set readback; no download or cloud upload.+- **component_create**: Create component occurrence with metadata and verified placement/context.+- **component_metadata**: Edit component definition purchasing/identity metadata with readback.+- **configuration_inspect**: Read configuration table, active row, typed cells, source links and explicit completeness; no configuration activation or editing.+- **construction_axis**: Create supported construction axis with guarded source geometry and readback.+- **entity_delete**: Delete an allowed sketch/curve/point/plane/feature reference with transaction handling; not arbitrary object deletion.+- **exploded_preview_create**: Reserve finite session-owned custom graphics in an owned blank presentation design from a source-bound plan and durable creation proof.+- **exploded_preview_dispose**: Dispose only the controller's owned graphics/lease; history does not authorize adopting live resources after restart.+- **exploded_preview_inspect**: Inspect the current controller capability, ownership and live resources; not reconstructed from terminal history.+- **exploded_preview_sample**: Apply a finite sampled pose to owned presentation graphics; source model is not moved.+- **exploded_preview_show**: Show owned presentation resources with controller ownership checks; no unbounded playback timer.+- **exploded_view_plan**: Read-only bounded translation plan with exact instance hierarchy, local/parent/world frames and source/configuration binding; no native object movement.+- **export**: Guarded model export delegated to exporting.py with staged file publication and explicit format support.+- **feature_create**: Extrude, revolve, fillet, chamfer, shell, hole, loft, sweep, combine, split, move, mirror, rectangular/circular pattern, draft and thread variants.+- **feature_edit**: Edit supported existing feature parameters/properties and verify health/readback.+- **geometry_query**: Query faces/edges/vertices using typed filters and explicit coordinate contexts; no guessed name targeting.+- **health**: Read feature health; recompute:true is a journaled write and requires current target/session/operation identity.+- **inspect**: Inspect active Design entities, parameters, transforms, health, joints and configuration; r6 document-list inventory is not this operation.+- **inspect_entity**: Exact guarded entity resolution with type-specific readback.+- **interference**: Native assembly interference query with validated entity context.+- **joint_create**: Create supported as-built joint, motion/limits and attachment readback.+- **joint_delete**: Delete exact joint reference with transaction handling.+- **joint_edit**: Edit as-built joint motion/limits and verify resulting state.+- **joint_origin_create**: Create joint origin with guarded attachment/frame selectors and parameter readback.+- **joint_origin_delete**: Delete exact joint-origin reference.+- **joint_origin_edit**: Edit joint-origin attachment/axes/parameters and verify.+- **material_assign**: Assign exact material ID from selected library/design to native component/body definition; verify ID, not display name.+- **material_list**: Bounded material/library discovery with query, matching count and completeness.+- **mcmaster_discover**: Discover Fusion's InsertMcMasterCarrComponentCommand and requirements; not supplier search or purchasing.+- **mcmaster_open**: Launch native interactive McMaster command in a guarded hybrid design; launch acknowledgment is not insertion completion, transaction or unattended download.+- **measure**: Native distance/angle measurement with supported geometry and witness points/contexts.+- **motion_link_create**: Create native motion link between guarded supported joint motions.+- **motion_link_delete**: Delete exact motion-link reference.+- **motion_link_edit**: Edit motion-link parameters and verify exact native readback.+- **new_design**: Create unnamed unsaved parametric hybrid Design, optional parameter-driven box; requested name is metadata. Failure cleanup discards only the newly created unsaved document.+- **occurrence_delete**: Delete an exact occurrence without conflating component definitions or sibling instances.+- **occurrence_insert**: Insert another instance of an existing component with verified transform/context.+- **occurrence_update**: Update occurrence placement/visibility/grounding with state and transform checks.+- **parameter_batch**: Grouped parameter create/set/delete variants with transaction/recompute/readback; deletion is limited to deletable user parameters. No generic atomic-batch claim for all operations.+- **parameter_create**: Create a typed user parameter, recompute, verify health and compensate failure with a recovery witness.+- **parameter_set**: Set parameter expression, recompute, verify health and restore old expression on failure with semantic recovery readback.+- **plane_create**: Create supported construction plane from guarded selector and offset.+- **regular_joint_create**: Create regular joint from exact attachments, alignment/motion/lock settings; verify frames and placements.+- **regular_joint_edit**: Edit regular joint parameters/motion/lock with attachment and pose validation.+- **render_scene_inspect**: Bounded scene/environment observation and detached camera preparation; never starts render, writes scene settings or proves complete revision-to-pixels identity.+- **rigid_group_create**: Create rigid group over exact occurrences with native membership readback.+- **rigid_group_delete**: Delete an exact rigid-group reference.+- **rigid_group_edit**: Edit rigid group membership/settings with native readback.+- **sketch_constraint**: Create supported geometric constraint on exact sketch entities.+- **sketch_create**: Create sketch on guarded plane/component selector.+- **sketch_curve_edit**: Guarded trim/extend/break/split support with native topology/readback checks; full trim deletion needs explicit permission.+- **sketch_diagnostics**: Inspect sketch constraint/degree-of-freedom and profile diagnostics without mutation.+- **sketch_dimension**: Create distance/horizontal/vertical/angle/radius/diameter dimensions with expression/unit validation.+- **sketch_edit**: Edit supported sketch state/geometry selection with transaction/recovery behavior.+- **sketch_geometry**: Point, line, rectangle, circle, arc, polygon, slot and fitted spline primitives with input/unit checks.+- **sketch_offset**: Offset guarded sketch curves using native operation and verify resulting entities.+- **sketch_project**: Project exact supported source entities into a guarded sketch and return references.+- **transaction_probe**: Qualify available native transaction behavior; does not promise generic batch atomicity.++The JSON contains each schema's required fields, property names and enum variants. Each variant remains a separate qualification obligation. Root reports the first `parameter_set` implementation initially lacks legacy compensation/recovery; a successful set/readback cannot establish that missing parity. `new_design` with a blank fixture also cannot qualify its optional parameter-driven box.++## Remaining Python: runtime, embedded code and tools++All paths below are relative to `exploded-preview-preparation/runtime-dev9-build-r1/source`. The JSON binds each file's SHA-256, size and line count. No `.py` file is excluded as a test or build artifact. No standalone Python test files were found in this snapshot.++| Category | Files | Required migration |+|---|---:|---|+| `addin_runtime_lifecycle` | 2 | Complete native bootstrap/transport/event/lifecycle replacement; r6 infrastructure is a qualified subset, not installed replacement. |+| `contract_authoring_tool` | 1 | Runtime catalog is already embedded JSON in Rust. Port catalog generation/validation tooling and preserve the contract; no interpreter is needed by the existing runtime catalog path. |+| `development_packaging` | 1 | Replace package assembly, embedded-contract validation and manifest hashing with Rust tooling; separately qualify installer/signing/release. |+| `dynamic_python_execution` | 1 | Define a typed Rust operation/script replacement or explicitly approved compatibility break; arbitrary Python execution cannot silently remain in a Python-free product. |+| `embedded_runtime_python` | 10 | Replace emitted/executed Python with typed Rust SDK/host operations; moving string generation into Rust is not elimination. |+| `mechanical_runtime` | 23 | Port handler/helper policy and thin SDK bindings, preserving guards, units, ownership, readback and truthful recovery; qualify operation variants independently. |+| `mechanical_runtime_backend` | 1 | Port active custom-graphics ownership/backend; despite prototype filename it is imported by the public preview controller. |+| `nonmechanical_addin_runtime` | 20 | Port or explicitly retire the mapped nonmechanical command under documented compatibility policy; use exact ownership and independent readback. |+| `retired_host_reference_optional_fallback` | 1 | Default host is already Rust. Preserve behavior evidence, retire this development/reference copy and optional rollback branch; do not recreate its missing historical Python imports. |++| Python file | Category | r7 parity |+|---|---|---|+| `addin/AdomBridge/AdomBridge.py` | `addin_runtime_lifecycle` | — |+| `addin/AdomBridge/commands/__init__.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/activity_palette.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/app_state.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/assembly_bom.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/close_document.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/cloud_documents.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/design_info.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/document_hygiene.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/document_info.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/electron_view.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/electronics.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/export.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/import_file.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/manufacturing.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/mechanical/__init__.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/assemblies.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/assembly_state.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/bill_of_materials.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/configurations.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/core.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/exploded_preview.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/exploded_preview_prototype.py` | `mechanical_runtime_backend` | — |+| `addin/AdomBridge/commands/mechanical/exploded_view.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/exporting.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/features.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/geometry.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/joint_state.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/journal.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/motion_links.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/operation_history.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/operations.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/purchased.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/readback.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/regular_joints.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/render_scene.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/sketch_edits.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/sketches.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/mechanical/transactions.py` | `mechanical_runtime` | — |+| `addin/AdomBridge/commands/modeling.py` | `dynamic_python_execution` | — |+| `addin/AdomBridge/commands/open_electronics_file.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/open_lbr.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/parameters.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/physical_properties.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/screenshot.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/commands/silkscreen_capture.py` | `nonmechanical_addin_runtime` | — |+| `addin/AdomBridge/http_server.py` | `addin_runtime_lifecycle` | — |+| `describe.py` | `contract_authoring_tool` | — |+| `rust/bridge/src/attach_orient_block.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/attach_template.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/epg_template.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/inspect_bodies_script.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/make3d_orient_block.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/make3d_placement_block.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/make3d_template.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/pref_script.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/routing_planner.py` | `embedded_runtime_python` | — |+| `rust/bridge/src/routing_script.py` | `embedded_runtime_python` | — |+| `server.py` | `retired_host_reference_optional_fallback` | — |+| `tools/package-mechanical-dev.py` | `development_packaging` | — |++### Dependency closure and semantic decisions++- `bridge.json; rust/bridge/src/main.rs`: The default host is already Rust and the manifest says the Python host left the production package. Optional sidecar provisioning/spawn remains behind explicit rollback preferences/environment and a local server.py; retire this compatibility branch without recreating missing Python modules.+- `rust/bridge/src/{mint,routing,epg,orchestrations,fusion_prefs}.rs`: Ten .py files are included as runtime script/templates. Audit inline script strings and run_modeling_script transport too; extension counts alone cannot establish Python elimination.+- `addin/AdomBridge/commands/mechanical/exploded_preview.py`: Imports exploded_preview_prototype.py as backend. The prototype filename does not make this an unused test file.+- `addin/AdomBridge/commands/modeling.py`: Arbitrary Python execution is an explicit legacy capability. Replacement needs typed Rust capability design or an explicit compatibility decision, not silent omission.+- `server.py; rust/bridge/src/main.rs`: Historical search_cloud_files/walk_cloud_tree and retired UI aliases intentionally refuse/redirect in the Rust host; do not revive retired behavior merely for nominal parity.+- `tools/package-mechanical-dev.py`: Development packaging still copies retired server.py/describe.py as well as the active add-in. Its artifact must be distinguished from the default production host. No standalone Python tests were found in this snapshot; the skill names external test/generation tools whose sources still need locating.++### Retired host imports and existing Rust replacements++The [fusion-contributing skill](/home/adom/.codex/skills/fusion-contributing/SKILL.md) explicitly identifies `handlers/dialog_classify.py` as retired and points to `rust/core/src/dialog_rules.json`. The manifest, runtime owner selection and current source support the broader Rust-host boundary. Missing files below are historical imports of `server.py`; they are **not default-host Python dependencies to restore or newly port**. Each replacement anchor and file hash is bound in JSON. Presence of source is credited as existing implementation, not as a fresh platform test.++| Historical Python import | Existing Rust replacement | Source evidence |+|---|---|---|+| `fusion_detect.py` | Rust host process/path discovery, readiness and launch | `rust/os-win/src/lib.rs`:205; `rust/os-mac/src/lib.rs`:10; `rust/core/src/windows_facts.rs`:3; `rust/bridge/src/launch.rs`:122 |+| `handlers/open_design.py` | Rust design opening orchestration | `rust/bridge/src/orchestrations.rs`:995; `rust/bridge/src/main.rs`:446 |+| `handlers/close_fusion.py` | Rust lifecycle stop/kill | `rust/bridge/src/lifecycle.rs`:112; `rust/bridge/src/lifecycle.rs`:133 |+| `handlers/dismiss_recovery.py` | Rust recovery handling | `rust/bridge/src/readiness_exec.rs`:106; `rust/bridge/src/readiness_exec.rs`:56 |+| `handlers/fusion_ui.py` | Rust host window/dialog operations and explicit retired-verb redirects | `rust/bridge/src/small_verbs.rs`:283; `rust/bridge/src/small_verbs.rs`:304; `rust/bridge/src/main.rs`:612 |+| `handlers/dialog_classify.py` | Rust dialog rule table and classifier | `rust/core/src/dialogs.rs`:8; `rust/core/src/dialog_rules.json`:2; `rust/core/tests/dialogs_golden.rs`:4 |+| `install_addin.py` | Rust add-in installer/synchronization | `rust/bridge/src/addin_install.rs`:64 |+| `aps.py` | Rust APS storage/client, host routes and sign-in | `rust/core/src/aps.rs`:4; `rust/bridge/src/main.rs`:949; `rust/bridge/src/aps_signin.rs`:185 |+| `ab_client.py` | Rust authenticated host client | `rust/core/src/ab.rs`:36 |++### Host source evidence and remaining coverage++- `bridge.json`:11 — The manifest launches adom-fusion-bridge.exe and explicitly says the Python host bridge left the package in Phase 4. Its older languages/macOS descriptive fields are not executable runtime selection.+- `rust/bridge/src/main.rs`:1251 — Readiness, chains and add-in orchestration default to the Rust executable unless an owner preference explicitly requests sidecar.+- `rust/bridge/src/main.rs`:1256 — Python sidecar is an explicit compatibility/rollback branch, enabled by owner preference or ADOM_FUSION_SIDECAR=1; spawn also requires server.py beside the executable.+- `rust/core/src/contract.rs`:15 — The Rust host embeds contracts/describe.json. describe.py is catalog authoring/legacy reference, not required by this runtime catalog path.+- `rust/bridge/src/addin.rs`:149 — Native Rust host transport still invokes the separate Python add-in at 127.0.0.1:8774. Host retirement does not retire in-app Python.+- `tools/package-mechanical-dev.py`:25 — This development packaging helper still copies retired server.py and describe.py. Distinguish this development artifact from the manifest's default production host architecture; remove or explicitly exclude compatibility artifacts in the final Python-free package.++Do not confuse retired imports with the following real gaps:++- `rust/bridge/src/main.rs` — Readiness recovery branches still call proxy directly for seat/dialog/relaunch work. proxy_with_timeout goes to the optional sidecar or returns sidecar_absent. Audit and connect these branches to existing Rust implementations; do not reintroduce retired Python merely to satisfy imports.+- `rust/bridge/src/main.rs` — This helper still builds an inline Python modeling script and calls proxy. Its reachability/behavior requires a Rust-path audit; inline scripts are not counted in the ten .py template files.+- `rust/bridge/src/addin.rs` — A connection-refused hint names the retired Python installer despite existing Rust installation code. Migrate stale guidance with the new native installer; do not count the missing installer as a live dependency.+- `tools/freeze-contract.py` — The contributing skill names this Python contract generation tool. Its source is absent from this snapshot; locate/port or explicitly retire it as tooling, not a host runtime dependency.+- `tests/run_verb_tests.py` — The contributing skill names this Python daily verb test. Its source is absent from this snapshot; qualify a Rust replacement or deliberate retirement separately from runtime migration.++This tree's 60-file inventory is complete for the supplied snapshot. The named but absent contract-generation and daily-test tools are a tooling coverage gap, not evidence that the production host still launches Python. Inline SDK scripts and indirect add-in calls remain runtime work beyond extension counts.++## Nonmechanical add-in commands++The mechanical router plus status/capability commands below are entry points, not three extra mechanical implementations. Existing nonmechanical Python handlers remain separately unqualified in r7. Capture features are inventoried for migration; all capture execution stays disabled during this campaign.++| Command | Actual dispatcher expression | Legacy source line | r7 parity / Fusion / release |+|---|---|---:|---|+| `mechanical` | `handle_mechanical` | 71 | — / — / — |+| `mech_capabilities` | `capabilities` | 72 | — / — / — |+| `mech_operation_status` | `operation_status` | 73 | — / — / — |+| `activity_banner` | `handle_activity_banner` | 74 | — / — / — |+| `get_app_state` | `handle_get_app_state` | 76 | — / — / — |+| `document_info` | `handle_document_info` | 77 | — / — / — |+| `activate_document` | `handle_activate_document` | 78 | — / — / — |+| `import_file` | `handle_import_file` | 80 | — / — / — |+| `export_step` | `handle_export_step` | 81 | — / — / — |+| `export_stl` | `handle_export_stl` | 82 | — / — / — |+| `export_3mf` | `handle_export_3mf` | 83 | — / — / — |+| `export_f3d` | `handle_export_f3d` | 84 | — / — / — |+| `export_usdz` | `handle_export_usdz` | 85 | — / — / — |+| `export_fbx` | `handle_export_fbx` | 86 | — / — / — |+| `export_dxf` | `handle_export_dxf` | 87 | — / — / — |+| `export_dwg` | `handle_export_dwg` | 88 | — / — / — |+| `export_iges` | `handle_export_iges` | 89 | — / — / — |+| `export_obj` | `handle_export_obj` | 90 | — / — / — |+| `export_sat` | `handle_export_sat` | 91 | — / — / — |+| `export_skp` | `handle_export_skp` | 92 | — / — / — |+| `get_design_info` | `handle_get_design_info` | 93 | — / — / — |+| `assembly_bom` | `handle_assembly_bom` | 94 | — / — / — |+| `physical_properties` | `handle_physical_properties` | 95 | — / — / — |+| `get_parameters` | `handle_get_parameters` | 96 | — / — / — |+| `set_parameter` | `handle_set_parameter` | 97 | — / — / — |+| `take_screenshot` | `handle_take_screenshot` | 98 | — / — / — |+| `electron_run` | `handle_electron_run` | 100 | — / — / — |+| `electron_zoom` | `handle_electron_zoom` | 101 | — / — / — |+| `electron_pan` | `handle_electron_pan` | 102 | — / — / — |+| `electron_select` | `handle_electron_select` | 103 | — / — / — |+| `execute_text_command` | `handle_execute_text_command` | 104 | — / — / — |+| `open_electronics` | `handle_open_electronics` | 105 | — / — / — |+| `list_text_commands` | `handle_list_text_commands` | 106 | — / — / — |+| `board_info` | `handle_board_info` | 107 | — / — / — |+| `export_source` | `handle_export_source` | 108 | — / — / — |+| `export_eagle_source` | `handle_export_eagle_source` | 109 | — / — / — |+| `open_lbr` | `handle_open_lbr` | 111 | — / — / — |+| `export_lbr` | `handle_export_lbr` | 112 | — / — / — |+| `close_document` | `handle_close_document` | 114 | — / — / — |+| `close_all_documents` | `handle_close_all_documents` | 115 | — / — / — |+| `open_schematic` | `handle_open_schematic` | 117 | — / — / — |+| `open_board` | `handle_open_board` | 118 | — / — / — |+| `show_3d_board` | `handle_show_3d_board` | 119 | — / — / — |+| `show_2d_board` | `handle_show_2d_board` | 120 | — / — / — |+| `show_schematic` | `handle_show_schematic` | 121 | — / — / — |+| `import_electronics` | `handle_import_electronics` | 122 | — / — / — |+| `save_to_cloud` | `handle_save_to_cloud` | 124 | — / — / — |+| `list_cloud_projects` | `handle_list_cloud_projects` | 125 | — / — / — |+| `list_cloud_files` | `handle_list_cloud_files` | 126 | — / — / — |+| `delete_cloud_file` | `handle_delete_cloud_file` | 127 | — / — / — |+| `create_cloud_folder` | `handle_create_cloud_folder` | 128 | — / — / — |+| `open_cloud_file` | `handle_open_cloud_file` | 129 | — / — / — |+| `open_by_urn` | `handle_open_by_urn` | 130 | — / — / — |+| `check_recovery` | `handle_check_recovery` | 131 | — / — / — |+| `search_cloud_files` | `handle_search_cloud_files` | 132 | — / — / — |+| `walk_cloud_tree` | `handle_walk_cloud_tree` | 133 | — / — / — |+| `export_cloud_file` | `handle_export_cloud_file` | 134 | — / — / — |+| `export_bom` | `handle_export_bom` | 136 | — / — / — |+| `export_cpl` | `handle_export_cpl` | 137 | — / — / — |+| `export_gerbers` | `handle_export_gerbers` | 138 | — / — / — |+| `set_design_rules` | `handle_set_design_rules` | 139 | — / — / — |+| `export_board_image` | `handle_export_board_image` | 140 | — / — / — |+| `detect_layers` | `handle_detect_layers` | 141 | — / — / — |+| `take_silkscreen_screenshot` | `handle_take_silkscreen_screenshot` | 143 | — / — / — |+| `run_modeling_script` | `handle_run_modeling_script` | 145 | — / — / — |++## Host and tooling surface++The existing Rust executable owns default host dispatch, readiness, launch/lifecycle, dialogs, APS and add-in installation/orchestration. Those implementations are credited; a new all-Rust in-app SDK replacement still requires parity and host regression tests. The 50 entries below inventory the retired Python host source for compatibility history, **not 50 missing Rust handlers**. Some legacy aliases are intentionally retired; some existing Rust orchestration branches still require closure of sidecar calls. The full frozen 179-verb host catalog is separately preserved, and neither catalog nor source table is a complete dynamic call graph.++| Historical Python host command | Source line | New r7 integration qualification |+|---|---:|---|+| `describe` | 2819 | — |+| `readiness` | 2820 | — |+| `set_preference` | 2821 | — |+| `get_preferences` | 2822 | — |+| `install_fusion` | 2823 | — |+| `open_design` | 2824 | — |+| `close` | 2825 | — |+| `stop` | 2826 | — |+| `kill` | 2827 | — |+| `launch` | 2828 | — |+| `start` | 2829 | — |+| `dismiss_recovery` | 2830 | — |+| `relocate_recovery` | 2831 | — |+| `open_cloud_file` | 2832 | — |+| `new_electronics_from_eagle` | 2837 | — |+| `screenshot_fusion` | 2838 | — |+| `click_fusion` | 2839 | — |+| `send_key` | 2840 | — |+| `close_window` | 2841 | — |+| `window_info` | 2842 | — |+| `screenshot_all` | 2843 | — |+| `check_dialogs` | 2848 | — |+| `managed_library_create` | 2853 | — |+| `web_signin` | 2854 | — |+| `managed_library_push` | 2855 | — |+| `managed_library_pull` | 2856 | — |+| `managed_library_link` | 2857 | — |+| `managed_library_unlink` | 2858 | — |+| `library_manager` | 2859 | — |+| `alerts` | 2860 | — |+| `addin_status` | 2870 | — |+| `notify_owner` | 2876 | — |+| `aps_status` | 2879 | — |+| `aps_set_client_id` | 2880 | — |+| `aps_signin` | 2881 | — |+| `aps_set_browser` | 2882 | — |+| `aps_get_browser` | 2883 | — |+| `aps_forget_browser` | 2884 | — |+| `aps_search` | 2887 | — |+| `aps_browse` | 2888 | — |+| `aps_recent` | 2889 | — |+| `aps_file_info` | 2890 | — |+| `aps_versions` | 2891 | — |+| `aps_download` | 2892 | — |+| `aps_create_folder` | 2893 | — |+| `aps_upload` | 2894 | — |+| `aps_open` | 2895 | — |+| `aps_get` | 2896 | — |+| `search_cloud_files` | 2899 | — |+| `walk_cloud_tree` | 2900 | — |++### Full host catalog names++- `fusion_account`+- `fusion_action_ledger`+- `fusion_activate_document`+- `fusion_addin_status`+- `fusion_alerts`+- `fusion_apply_fusion_update`+- `fusion_apply_pours`+- `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_bom`+- `fusion_board_info`+- `fusion_board_seed`+- `fusion_board_source`+- `fusion_board_stackup`+- `fusion_build_library_3d`+- `fusion_cancel_run`+- `fusion_capture_library_views`+- `fusion_change_pours`+- `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_move_parts`+- `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_place_vias`+- `fusion_plan_library_import`+- `fusion_plan_route`+- `fusion_pour_state`+- `fusion_preflight_lbr`+- `fusion_prefs_close`+- `fusion_prefs_open`+- `fusion_prewarm`+- `fusion_prove_result`+- `fusion_readiness`+- `fusion_release_seat`+- `fusion_remove_pours`+- `fusion_reset_workspace`+- `fusion_resolve_seat_dialog`+- `fusion_restart_for_addin`+- `fusion_ripup_nets`+- `fusion_route_net`+- `fusion_routing_drc`+- `fusion_routing_state`+- `fusion_run_modeling_script`+- `fusion_save_to_cloud`+- `fusion_schematic`+- `fusion_schematic_plan`+- `fusion_schematic_run`+- `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`++## Promotion and completion gates++- Bind exact source/build hashes and advertise only the implemented subset.+- Match legacy units, selectors, side effects, error/recovery semantics or document an accepted narrower contract.+- Pass meaningful Rust unit/fault and independent external behavior tests on Linux and Windows.+- Build against the actual Autodesk SDK and run bounded owned-fixture Fusion flows with exact readback, replay/conflict/stale/no-second-effect tests.+- Preserve failure/unknown receipts and refuse automatic effect retry; clean only exact owned fixtures.+- Qualify Python-free installer/bootstrap, signing, packaging, existing bridge regressions and public release separately.++Runtime handlers, embedded scripts, host fallback, catalog generation, test tools, installer/bootstrap and release packaging are separate work categories. A Python-free claim requires all reachable runtime/bootstrap paths to be Rust/typed C++ and no runtime Python provisioning. Keep test/tool retirement explicit too; do not hide them behind a runtime-only claim. Arbitrary Python modeling needs an explicit replacement/compatibility decision.++## Reproducibility++The generator reads source bytes; it neither imports Python nor invokes Fusion. It validates 61 unique reviewed handler mappings, exact top-level function locations and semantic equality of the legacy/Rust schemas, inventories dispatcher literals and all Python files, and binds source hashes. This is a reviewed textual inventory, not Python AST analysis or a proof that every dynamically dispatched host path was discovered.++From r7:++```sh+/home/adom/.cargo/bin/cargo run --offline --manifest-path verification/native-operations/Cargo.toml --bin porting_ledger -- . ../exploded-preview-preparation/runtime-dev9-build-r1/source+```++Running the generator resets the ledger to this starting baseline. Promote later checkpoint evidence deliberately in a separately reviewed update; never infer qualification from changing source files alone. The independent native-operation test design is in [TEST-PLAN.md](../verification/native-operations/TEST-PLAN.md).
native-rust/docs/R10-SKETCH-CONTRACT.mdadded+57
@@ -0,0 +1,57 @@+# R10: retained origin-plane sketch creation and inspection++## Lineage and scope++Created from r9 freeze1 product/config/source, without targets, live receipts or root verification directories. `BASELINE-R9-SHA256.txt` records the 76 copied files before r10 changes (the unchanged hidden `.cargo/config.toml` was explicitly added after copy). `BASELINE-R9-PRODUCT-FREEZE1.txt` preserves r9's 79-entry frozen manifest, SHA256 `ae4730b08fa12c9bad86e34888145dcbeffee41378e5a48e75425287a1232af7`. Later concrete r9 fixes require explicit rebasing; they are not automatically inherited. The vendor symlink points to the unchanged r7 offline vendor.++Copied `rust-next-ports/sketch-plan-core` has reviewed source manifest SHA256 `e4b8c3bce1c5c4be0fa6b75635a1a659e52446397dd50ee69c20dd221ea776a6`. Its Rust source and public tests are byte-identical; only removal of the standalone `[workspace]` stanza joins it to this workspace. The already-qualified 24 Linux/24 actual Windows core tests were not rerun merely because of this copy. One integration smoke confirms pure preparation does not execute the SDK. `BASELINE-SKETCH-CORE-SHA256.txt` records its copied input; the expected Cargo-only difference is documented in the local report.++The bounded implementation is **creation and summary inspection**, not the eight-primitive insertion port. `sketch_geometry` is refused before durable admission. Existing `native-parameters-v1`, `native-lifecycle-v1`, and `native-bom-v1` retain their earlier operation gates. Use `X-Adom-Mechanical-Contract: native-sketch-v1` for the two sketch operations; this header also permits the older supported operations.++## Public requests and observations++All examples use the current authenticated native runtime and exact document ID from its document snapshot; an opaque ID cannot be copied between runtime epochs.++1. `{"op":"native_sketch_inspect","target":{"documentId":"<exact document ID>"}}` returns `data.target`, with a `sketch-root-projection-v1:` revision. `data.root` contains active/parametric/hybrid/configuration state, root SDK revision, root sketch count, timeline count and current position. The same full projection is read twice. This is a creation precondition, not complete existing-sketch geometry inspection.+2. `{"op":"sketch_create","sessionId":"<epoch>","operationId":"<new ID>","target":<data.target>,"plane":"xy"}` creates once, after the durable journal executing transition. Plane is `xy`, `xz` or `yz`; omission means `xy`. Supplied `name`, `component`, and reference-object planes are refused before admission, including an empty name. There is no silent name substitution. Creation requires active parametric hybrid/unconfigured design, timeline at end, and observed `SelectCommand` on the owner custom-event thread. The command guard does not prove absence of all Autodesk internal transaction states.+3. A successful create returns `data.sketchId`, `data.target` with `sketch-projection-v1:`, `data.sketch`, `created.sketchId`, numeric `created.plane`, and `rootTarget` observed after creation. `legacyParity:false`, `rollbackAttempted:false`, `complete:false`, and `geometryEnumerated:false` make scope explicit. `data.sketch` exposes `name`, `sdkRevision`, `plane`, 16-value native `transform`, counts `curves/points/profiles/dimensions/constraints`, `health`, and `deferred`. Plane codes are 1=XY, 2=XZ, 3=YZ, 0=another observed plane; creation success requires the requested origin plane. `transform` is the SDK parent-component-to-sketch-space matrix, with Fusion database length units (cm), not a claimed world/occurrence transform. Creation verifies zero curves/profiles/dimensions/constraints, healthy/nondeferred state, and root sketch count increasing by exactly one. Native points are reported, not assumed zero: Autodesk creates an origin point.+4. `{"op":"native_sketch_inspect","target":{"documentId":"<same document ID>"},"sketchId":"<returned ID>"}` reads that exact retained SDK sketch. A matching `target.revision` may be supplied to reject changed sketches. Without `sketchId`, the optional revision instead guards the root projection. No name, entity token, collection position, active sketch or list difference substitutes for identity.++Both read projections state `complete:false`. Sketch projection hashes the opaque identity, exact document ID, SDK revision and observed summary. The SDK revision is a content-change witness; names and counters alone are never treated as the full sketch revision. Neither revision is claimed to be a geometry-wide document revision or a transactional lock.++Stable refusals include `native_sketch_contract_required`, `native_sketch_exact_target_required`, `native_sketch_root_default_name_only`, `native_sketch_origin_plane_required`, `native_sketch_root_revision_required`, `native_sketch_revision_required`, `native_sketch_context_refused`, `target_revision_mismatch`, `native_sketch_capacity`, `native_sketch_id_unknown`, and `native_sketch_id_retired`. SDK read failures are explicit errors. An observed invalidity, membership/read/projection failure permanently retires that sketch ID, even if a later SDK call would appear valid. Uncertain creation faults further sketch work in the session and remains an operation-journal unknown; do not replay it with a new operation ID.++## Ownership and failure boundaries++Rust reserves a lifetime slot and sets acquisition uncertainty before calling create. The C++ holder is published before `Sketches::add`; it independently retains exact `Ptr<Document>`, `Ptr<Component>` and the returned `Ptr<Sketch>`. It never borrows a `DocumentReference` that document enumeration could release. The returned holder is adopted before any metadata/readback operation. A null return, SDK error or missing acknowledgment after invocation is unknown, not proof that no effect happened. A panic or impossible missing holder keeps teardown fenced.++Each sketch read checks thread, exact supplied document and root equality, valid sketch, parent component equality, and membership by comparing the retained SDK object against root collection members. The collection index is only enumeration, never a reference selector. Two complete sketch summaries must agree. A bounded recheck after create observes actual state; there is no automatic rollback, delete, retry or name-based recovery.++Slots are capped at 64 for the runtime lifetime and never evicted/reused, including failed creates. Root membership enumeration is capped at 512 sketches; timeline at 4096; each summary count at 16384; name/revision strings at 4096 bytes and serialized projection at 32768 bytes. IDs include runtime document identity plus a monotonically assigned book serial, and are not persistent references across reload.++Before parent document references are released, `Context::prepare_release` closes the sketch book explicitly on the owner thread. Each holder release is attempted once. A reported release error or panic leaves the book uncertain; another close refuses without retry, and `Context::close` independently refuses while sketch refs remain. Existing native cleanup retains callback/module on that failure. No destructor invokes sketch SDK cleanup. Successful stop releases references only; it does **not** delete sketches or close documents.++The inherited owned-scratch discard remains **parameter-only** and rejects sketches. Root's geometry fixture owns test cleanup; the product does not broaden discard to make a test pass. Actual Fusion test failure requires preserving receipts and exact retained fixture ownership, with no blind second create or arbitrary cleanup.++## Next eight-primitive insertion slice++Use the copied immutable planner only after validating the whole request, current exact sketch/document/root, supported 2D mode, every point's plane compatibility, budgets and fresh sketch revision. Never silently project 3D input into a 2D sketch. Reserve bounded result/ownership capacity and journal start before the first entity effect. Revalidate the full plan at the SDK hop. Preserve primitive intent, especially rectangle constraints and spline closure; four lines do not establish legacy rectangle-helper parity.++| Prepared primitive | Installed typed SDK call candidates | Required native observation before success |+| --- | --- | --- |+| Point | `SketchPoints::add` | Exact returned point; sketch-space coordinates, validity and parent. |+| Line | `SketchLines::addByTwoPoints` | Exact start/end, geometry type, construction flag, parent. |+| Rectangle | `SketchLines::addTwoPointRectangle` or explicitly versioned four-line behavior | All four exact returned lines, closure, constraints introduced by the helper; no false helper parity. |+| Circle | `SketchCircles::addByCenterRadius` | Center/radius, construction and parent; independent profile observation. |+| Arc | `SketchArcs::addByCenterStartSweep` | Center, start/end, signed sweep/orientation and construction in actual sketch coordinates. |+| Polygon | Prepared ordered lines | All actual segments, shared endpoints/closure and construction; applied prefix if interrupted. |+| Slot | Two lines/two signed semicircle arcs | Actual widths, tangency/endpoints/closure, orientation and construction; no fabricated slot constraint. |+| Fitted spline | `SketchFittedSplines::add`, qualified closure setter | Actual fit points/closed state/curve geometry, solver health, construction; planner points are not an observed spline. |++A later primitive or setter failure must retain actual observed prefix/unknown result and forbid automatic replay; do not invent atomic rollback. Coordinate-only readback does not prove constraints or profile solvability. Tests need signed arcs, non-axis slots, transformed XY/XZ/YZ frames, construction flags, coincident endpoints, rectangle helper effects, spline closure/degeneracy and solver refusals, deletion/undo/retirement, plan-wide refusal before effects, and late-result/durable-commit failures. Root should qualify them in an exact-owned native fixture with independent geometry oracles, not merely by comparing against the planner's own predicted numbers.++## SDK evidence and qualification limits++Installed Autodesk C++ headers were inspected directly. Autodesk documents [Sketch.revisionId](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Sketch_revisionId.htm) as changing with sketch changes, [Sketches.add](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Sketches_add.htm) as returning the created object or null, and [Sketch.originPoint](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Sketch_originPoint.htm) as automatically projected. [Sketch.transform](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Sketch_transform.htm) defines parent-component-to-sketch coordinates; its text restricts parametric position changes. This slice only reads transform; actual parametric getter behavior and origin-plane matrices still require live qualification.++Author tests and compile checks do not establish actual Fusion solver, API callback, GUI transaction, unload, frame or geometry behavior. Windows MSVC SDK build, exact-source independent review, normal live guarded creation/inspection/replay/conflict/cleanup and teardown gates remain root-owned. No public release or full legacy parity is claimed.
native-rust/docs/R11-GEOMETRY-CONTRACT.mdadded+62
@@ -0,0 +1,62 @@+# r11 native sketch geometry contract++This checkpoint ports eight prepared sketch primitives into retained root origin-plane sketches. It is a candidate implementation pending independent source review, Windows execution and actual Fusion qualification. All plan preparation, unit conversion, validation, identity policy, result verification and journaling are Rust. C++ is a typed Autodesk ABI adapter. No Python is used.++The baseline is the exact 92-file r10 product freeze2, manifest SHA256 `39f5af6c227b7ba21c2d06139dcb5442cd6514592ecc321b5b55eabd1c37f7dc`. `BASELINE-R10-PRODUCT-FREEZE2.txt` and `evidence/baseline-verification.log` record the copy. Targets, live receipts and verification clients were not copied; the immutable vendor tree is shared by symlink. Later r9/r10 SDK getter fixes require explicit source-bound propagation; this branch does not infer or relax failing getter semantics.++## Request and scope++Use `X-Adom-Mechanical-Contract: native-sketch-geometry-v1`. Earlier native parameter, lifecycle, BOM and sketch headers remain accepted for their own operations; earlier headers cannot authorize geometry. The native capability schema overrides the legacy transactional description. The legacy generic schema remains shared, but native preadmission validation imposes this narrower contract.++```json+{+  "op": "sketch_geometry",+  "sessionId": "<current epoch>",+  "operationId": "geometry-1",+  "target": {"documentId": "<exact native document ID>", "revision": "sketch-projection-v1:<digest>"},+  "sketch": {+    "documentId": "<same exact native document ID>",+    "revision": "sketch-projection-v1:<same digest>",+    "objectType": "Sketch",+    "sketchId": "<exact opaque ID returned by native sketch_create>"+  },+  "items": [{"type":"line", "start":[0,0], "end":[20,10], "construction":false}]+}+```++The sketch must be one currently retained by this runtime's `Book`, with exact parent-document/root/current collection membership. No name, entityToken, collection index, active-sketch lookup or list-difference inference adopts an object. The native opaque sketch ID is required; target and sketch document/revision witnesses must agree. It must currently contain no curves, profiles, constraints, dimensions or text; its point collection must be empty or contain only the exact SDK origin point. No prior geometry leases may exist. The root design must be active, local unconfigured parametric/hybrid with the timeline at its end and observed `SelectCommand`. The command check is not proof that every possible internal transaction is absent.++Only the XY/XZ/YZ root origin planes are supported. Coordinates are sketch-space millimeters with exactly zero Z; they are converted to centimeters before the ABI. This does not apply a model-to-sketch transform. Origin-plane/frame witnesses remain in scoped inspection; existing native geometry inspection still reports `geometryEnumerated:false` and `complete:false`.++Limits are 32 input items, 64 expanded entities, 512 stored prepared points and 64 KiB serialized prepared plan. Each fitted spline has the core's 128-point limit. Coordinates and radii are bounded to 10,000 cm; minimum relevant spans/radii are 1e-5 cm. Arcs must have a nonzero sweep strictly below a full turn (margin 1e-8 rad). The entire plan is parsed/prepared/bounded before admission and again on the owner thread before execution authorization. Invalid later items therefore cannot leave a valid earlier prefix behind.++| Input | Typed SDK effects | Actual readback |+| --- | --- | --- |+| point | `SketchPoints::add` | exact returned point membership/parent and sketch-space coordinates |+| line | `SketchLines::addByTwoPoints` | start/end coordinates, construction |+| rectangle | four prepared line additions | every edge's ordered endpoints; no rectangle-helper constraint parity |+| circle | `SketchCircles::addByCenterRadius` | center, radius, sketch-space normal, construction |+| arc | `SketchArcs::addByCenterStartSweep` | center, start/end, positive sweep and normal; negative requested sweeps require reversed actual endpoints |+| polygon | prepared ordered lines | each edge and closure endpoints; no polygon solver constraints |+| slot | two lines and two arcs | every exact edge, reversed negative arc convention, construction; no tangent constraints promised |+| spline | `SketchFittedSplines::add`, optional `isClosed(true)` | ordered fit points, actual periodic-closure flag, construction; no NURBS knots/interpolation/shape guarantee |++All scalar/frame/coordinate values must be finite. Readback tolerance is `1e-7 cm + 1e-12 * max(abs(expected),abs(observed))` for coordinates/scalars; arc sweeps use the same numerical absolute threshold in radians. Geometry checks compare each exact returned reference twice, then all entities again after the complete plan. Final sketch/root projections must remain stable around those last reads. Curve count must equal the number created; profiles and point/constraint counts are observed, not predicted. Health must be healthy, compute must not be deferred, dimensions must remain absent, and the documented SDK sketch revision must change. No implicit constraint or profile topology/area claim is made.++## Effects, failures and lifetime++The existing owned coordinator first reserves journal/observation capacity, durably admits and dispatches, obtains an owned data-only preflight plan, durably marks executing, and only then queues the SDK effect. Execution repeats exact membership, empty-sketch, root and revision checks. No mutex spans SDK calls or journal I/O. HTTP timeout does not cancel an already claimed effect or discard its late result.++Insertion is **non-atomic**. Each primitive may expand into multiple SDK additions, and construction/periodic-closure assignments are separate effects after addition. The C++ adapter reserves a fixed parent-owned slot before invoking an add and immediately retains its exact returned entity there. The holder never borrows a collection item as identity. All returned references remain beneath the retained sketch until explicit parent-before-document/context teardown. Failed or panicking release permanently blocks successful unload; no implicit Drop or retry releases uncertain SDK references.++A successful result includes `data` (new sketch projection), `rootTarget`, `geometry.itemsCompleted`, `geometry.entitiesCompleted`, and `geometry.observed`, with input index, entity index, primitive and actual centimeter/radian observation. `atomic:false`, `legacyParity:false` and `rollbackAttempted:false` are explicit.++A failure after any possible effect is unknown, not a normal transaction failure. It retains `completedEntities` and the failed attempt's input/entity index, invocation acknowledgment and stage when known. This prefix is an observation made before later effects; the final solver state may differ, and the result says so. SDK insertion panics preserve the observed prefix too. No blind retry, rollback or implicit deletion occurs. The sketch book is faulted after unknown and refuses further authoring/inspection through that book; status remains available and external exact-object reconciliation is a separate root-owned qualification step. Another request with the same operation ID replays the stored/retained status without dispatch; a different digest conflicts. Lost terminal persistence preserves nondurable observed results, never granting replay permission. Process loss follows existing journal unknown/interrupted semantics.++User-document close/cleanup remains unchanged: the product's owned scratch discard still refuses geometric content. Test fixture cleanup must independently qualify the exact owned document and all actual outcomes after the product stops/unloads. This checkpoint introduces no cleanup route.++## Unsupported and remaining qualification++No insertion into nonempty/arbitrary/sketch-proxy/component-context sketches; no text, solver constraints, dimensions, edit/delete, entity-reference publication, extrusion, solver rollback, automatic repair, batching atomicity or legacy geometry parity. Closed-spline SDK normalization, implicit coincident/solver behavior, native profiles and setter acknowledgments must be exercised in Fusion before release. Actual MSVC ABI linking and live SDK reference/module teardown are root-owned gates. The adapted MinGW SDK syntax check and Rust Windows binding compilation do not prove those gates.++Primary API evidence is the installed Autodesk C++ headers: `Fusion/Sketch/SketchArcs.h` documents counterclockwise returned arcs even for negative sweep; `SketchFittedSpline.h` documents ordered fit points and periodic `isClosed`; `Sketch.h` documents model-to-sketch transform direction and sketch revision; `SketchEntity.h` supplies exact parent and reference flags. `Core/Geometry/{Line3D,Circle3D,Arc3D,Point3D}.h` provides sketch-space transient readback getters used here. SDK calls check errors immediately; no undocumented configuration/null-getter exception is assumed.
native-rust/docs/R12-EXTRUDE-CONTRACT.mdadded+63
@@ -0,0 +1,63 @@+# Native finite extrusion contract++The `native-extrude-v1` header adds `native_sketch_profiles` and the explicitly narrowed `feature_create` extrude branch. Earlier contract headers retain their existing operations; these two operations require the new header before admission. This is not full legacy feature or transactional parity.++## Explicit profile discovery and request++Read an exact retained sketch created in this native session:++```json+{"op":"native_sketch_profiles","sessionId":"<runtime epoch>","target":{"documentId":"<exact document ID>"},"sketchId":"<returned sketch ID>"}+```++The successful result's `data.target` contains a `profile-projection-v1:` revision. `data.profiles[0].reference` contains exactly `documentId`, `revision`, `objectType:"Profile"`, `sketchId`, and `profileId`. Its sibling `observed` contains `areaCm2`, `perimeterCm`, `centroidCm`, loop/curve/root-body/root-extrude counts and on-plane/outer-only/high-accuracy flags. `data.root`, `data.sketch`, `revisionScope` and `complete:false` explain the limited projection. An optional read target revision must match that profile projection.++Pass that explicit reference and target unchanged:++```json+{"op":"feature_create","sessionId":"<runtime epoch>","operationId":"extrude-1","target":{"documentId":"<exact document ID>","revision":"<profile-projection-v1 digest>"},"type":"extrude","profiles":[{"documentId":"<exact document ID>","revision":"<same digest>","objectType":"Profile","sketchId":"<returned sketch ID>","profileId":"<published profile ID>"}],"distance":20,"operation":"new_body","direction":"positive"}+```++Distance is a finite number of millimeters in [0.0001, 100000], converted once to SDK centimeters. Direction is positive or negative; default positive. Operation defaults to new_body. Expressions, explicit taper (including zero), names, components, participant bodies, symmetry, booleans and other feature kinds refuse before admission. A profile must have been explicitly published by the current book; a guessed formatted ID does not authorize it.++## Initial model boundary++Only current exact retained root XY/XZ/YZ sketches, one on-plane closed profile with exactly one outer loop and 1–256 profile curves, healthy/nondeferred sketch, active local unconfigured parametric hybrid design, timeline at end, and empty root body/extrude collections. Area [1e-10,1e8] cm², perimeter [1e-5,1e6] cm, and finite centroid coordinates within 10000 cm are bounded. Holes, multiple profiles, arbitrary existing-sketch adoption and non-root/proxy contexts refuse. This slice permits at most one new body in the root; no new-body accumulation/general reference resolver is implied.++Two complete observations must agree. The revision includes exact session IDs, the parent root/sketch SDK revisions and bounded profile properties/counts; it is not a complete geometry revision. Exact retained SDK equality remains identity authority. Collection item(0) is used only after sole-member validation and then compared with the retained profile on every read; it never substitutes for an explicit published selection. A failed profile membership/read permanently retires that profile from authoring.++## Execution, observation and ownership++The Rust coordinator validates/preflights, durably records executing, then dispatches one owned plan. The owner-thread execution revalidates before calling `ExtrudeFeatures.add` once. Transient input preparation does not count as model execution. An invoked call with absent acknowledgment, a panic or failed postcondition is unknown, including when a body may exist. The book remains faulted and no automatic retry/rollback occurs. The existing retained journal preserves bounded observations before terminal persistence; timeout or lost persistence cannot authorize another effect.++The typed holder stores the exact returned feature before any fallible readback, then its exact sole body. Profile, feature and body references live below the existing retained sketch/parent lease. Once-only release uncertainty blocks successful parent/context/module teardown. No name, entity-token text, list difference or active-document fallback creates ownership. No implicit cleanup of CAD geometry is introduced.++Success returns `data.documentId/sketchId/profileId/featureId/bodyId`, `observed` solid properties, `volumeMm3`, `expectedPrismaticVolumeMm3`, numeric `distanceMm`, direction, `complete:false`, plus `rootTarget`. Feature/body IDs are current-session receipt identifiers backed by exact retained objects; they are not advertised as general topology references. Unknown results retain `observedSolid` when acquired, `failedStage` when available, reconciliationRequired and automaticReplayAllowed:false.++Readback checks exact root/feature/body/profile membership, healthy feature, solid body/feature, new-body one-side profile-plane start, zero taper and actual distance. High-accuracy volume must match input area×distance within 0.3% plus 1e-8 cm³. Actual center of mass is transformed by `Sketch.modelToSketchSpace`; Z must match signed distance/2 within 0.3% of distance plus 1e-6 cm, and X/Y must match profile centroid within 0.003×sqrt(profile area) plus 1e-6 cm. The last tolerance is a finite geometric placement policy, not a documented SDK centroid-error guarantee. Final parent sketch shape/frame/counts/health and profile geometry must remain unchanged (parent SDK revision may advance), root timeline grows exactly one, root sketch count stays fixed, root revision advances, and exactly one root body/extrude is observed. Independent final rereads must agree.++## SDK error diagnostics++Extrusion-specific SDK calls consume their existing immediate `getLastError(&description)` observation exactly once. Rust exposes bounded `sdkDiagnostic` with ABI status, numeric stage, original SDK error and at most 4096 diagnostic bytes. Diagnostic text alone may decode lossily; malformed/truncated optional text does not erase numeric authority. Model text remains strict. Stage 100–123 covers profile properties, 200–208 transient inputs, 209 feature add, 210–212 returned body capture, and 300–331 solid readback. Inherited shared root/sketch validation still exposes generic status and explicitly marks the original SDK error unavailable; no second error read/reset/retry fabricates it.++## SDK basis and remaining tests++Installed Autodesk C++ headers define Profile, ProfileLoops, AreaProperties, ExtrudeFeatures/Input/Feature, DistanceExtentDefinition, ProfilePlaneStartDefinition and PhysicalProperties. Official [AreaProperties.centroid](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_AreaProperties_centroid.htm) documents profile centroids relative to sketch origin; [Sketch.modelToSketchSpace](https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/files/fusion_Sketch_modelToSketchSpace.htm) supplies the explicit model-to-sketch conversion. HighCalculationAccuracy is documented in the installed FusionTypeDefs header as ±0.1% for physical-property calculations; the paired area/volume tolerance is conservative policy. No direct-coordinate assumption substitutes for the transform.++Legacy `commands/mechanical/features.py` additionally supports multiple profiles, expressions, symmetric/tapered extents, join/cut/intersect participant selection, feature naming and other feature kinds under legacy transaction/recovery orchestration. These remain deferred. Profile identity stability after real SDK recompute, actual positive/negative extrusion on all planes, normalization, health and physical accuracy need source-bound Windows/native SDK and actual Fusion qualification. Author fake-backend tests establish control flow, fault handling and arithmetic only. The independent live geometry fixture/client, exact original roster preservation, product stop/unload and owned cleanup remain separate root-owned gates. No release is claimed here.+++## Profile getter barrier (fix2)++Two actual read-only traces on Fusion2705.1.30 showed that reading ExtrudeFeature.profile advances the parent component revision while body/sketch revisions and all measured geometry remain stable. This is an observed SDK behavior; the official API describes a getter/setter but does not document this revision side effect. Evidence is preserved in ../rust-extrude-observer-r3/evidence/live1.++After an acknowledged feature add, Rust now calls a separate once-only typed profile relationship verification. The native holder consumes its attempt latch before the getter and confirms only exact retained feature/profile equality with successful immediate SDK error checks. Any mismatch/error/panic remains unknown; no later readback, retry, adoption or rollback follows. This confirmation records one observation on immutable held objects; it is not advertised as fresh relationship validation on each solid read.++Immediately after that barrier, Rust captures the root freshness baseline. All subsequent solid, profile and sketch reads remain strictly checked, including four physical solid captures. The final root comparison now runs last, guarding the entire repeated read sequence. Root revision equality, exact retained membership, physical tolerances and input/current geometry comparisons remain unchanged. No cached physical-property substitute or dropped root-revision check is introduced. Stage304 remains the profile getter diagnostic; no error reset or retry is used.++Final projection failures also retain the decisive expected/observed values or getter error without an extra diagnostic SDK read. This does not reconstruct the historical failed operation: the old journal and unknown outcome remain untouched.++M12-fix2 source checks: 361 Linux workspace tests (184 native + 2 native compile-fail docs), GNU Windows bindings/tests, adapted installed-SDK syntax and formatting passed. Independent source review precedes the frozen Windows build. Actual fresh-model qualification and clean teardown remain required.+++R15 propagation: the above source correction was merged into R15 freeze2 with the newer exact-entity/material/McMaster APIs preserved. Parent authorized source integration before the changing-roster actual-app gate; no new actual-app success or retroactive unknown-operation reconciliation is claimed.
native-rust/docs/R12-EXTRUDE-START-FIX.mdadded+23
@@ -0,0 +1,44 @@+# Explicit extrusion start input++This isolated checkpoint copies the 103 files in r12 product freeze 1 exactly+before editing. BASELINE-R12-PRODUCT-FREEZE1.txt is SHA256+17e32b0a851d1a299ccd68a6d1a0b4019ec4df957d1be037df2d2fdf4539ea8d;+evidence/baseline-verification.log records every file passing. Vendor is a link+to the existing offline vendor tree. No targets, live receipts, verification+harnesses or installed artifacts were copied or operated.++The actual r12 live request57 failed at stage208, ABI7/SDK2,+`InternalValidationError : res`. Original immutable evidence is+`../rust-native-migration-r12/evidence/native-geometry-live1/campaign/57-circle-extrude-result.json`,+SHA256 44f8726c32dcef1caf3b402b3e3d17449b49532103deb4d2c8f69d083d9e164e.+Its durable terminal record says failed, nativeExecutionStarted:false, and no+reconciliation required. Stage208 comprises the input startExtent getter,+conversion to ProfilePlaneStartDefinition, and immediate SDK error check. The+receipt does not isolate which internal getter/conversion step failed.++Replace that observation of the default input with an explicit+ProfilePlaneStartDefinition::create (new stage213) and checked+input->startExtent(start) assignment (214). The installed+Fusion/Features/ProfilePlaneStartDefinition.h documents create as feature input;+ExtrudeFeatureInput.h:188-194 documents the property and default profile plane.