python-cad-tools 0.1.0rc1__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. python_cad_tools-0.1.2/.gitattributes +2 -0
  2. python_cad_tools-0.1.2/.github/workflows/ci.yml +313 -0
  3. python_cad_tools-0.1.2/.github/workflows/downstream-compatibility.yml +40 -0
  4. python_cad_tools-0.1.2/.github/workflows/release-candidate.yml +92 -0
  5. python_cad_tools-0.1.2/.gitignore +16 -0
  6. python_cad_tools-0.1.2/.opencode/commands/autocommit.md +15 -0
  7. python_cad_tools-0.1.2/.opencode/tools/specrepo-autocommit.js +25 -0
  8. python_cad_tools-0.1.2/.opencode/tools/specrepo-autocommit.py +205 -0
  9. python_cad_tools-0.1.2/AGENTS.md +66 -0
  10. python_cad_tools-0.1.2/CHANGELOG.md +69 -0
  11. python_cad_tools-0.1.2/CLAUDE.md +66 -0
  12. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/MANIFEST.in +2 -0
  13. {python_cad_tools-0.1.0rc1/src/python_cad_tools.egg-info → python_cad_tools-0.1.2}/PKG-INFO +1 -1
  14. python_cad_tools-0.1.2/PYTHON_CAD_TOOLS_REPOSITORY_MIGRATION_PLAN.md +1802 -0
  15. python_cad_tools-0.1.2/docs/build-semantics.md +32 -0
  16. python_cad_tools-0.1.2/docs/drawing-extensions.md +146 -0
  17. python_cad_tools-0.1.2/docs/manifests.md +45 -0
  18. python_cad_tools-0.1.2/docs/migration/02-package-identity-report.md +158 -0
  19. python_cad_tools-0.1.2/docs/migration/03-public-api-report.md +51 -0
  20. python_cad_tools-0.1.2/docs/migration/04-build-artifacts-report.md +83 -0
  21. python_cad_tools-0.1.2/docs/migration/05-drawings-report.md +102 -0
  22. python_cad_tools-0.1.2/docs/migration/06-viewer-report.md +121 -0
  23. python_cad_tools-0.1.2/docs/migration/07-cleanup-ci-report.md +209 -0
  24. python_cad_tools-0.1.2/docs/migration/08-local-rc-report.md +165 -0
  25. python_cad_tools-0.1.2/docs/migration/baseline-report.md +359 -0
  26. python_cad_tools-0.1.2/docs/migration-prompts/00-execution-profile.md +89 -0
  27. python_cad_tools-0.1.2/docs/migration-prompts/01-preserve-and-baseline.md +53 -0
  28. python_cad_tools-0.1.2/docs/migration-prompts/02-package-identity-and-skeleton.md +53 -0
  29. python_cad_tools-0.1.2/docs/migration-prompts/03-public-api-and-project-loading.md +45 -0
  30. python_cad_tools-0.1.2/docs/migration-prompts/04-build-artifacts-and-determinism.md +53 -0
  31. python_cad_tools-0.1.2/docs/migration-prompts/05-format-neutral-drawings.md +45 -0
  32. python_cad_tools-0.1.2/docs/migration-prompts/06-viewer-site-and-offline.md +53 -0
  33. python_cad_tools-0.1.2/docs/migration-prompts/07-legacy-removal-governance-and-ci.md +64 -0
  34. python_cad_tools-0.1.2/docs/migration-prompts/08-local-release-candidate.md +73 -0
  35. python_cad_tools-0.1.2/docs/migration-prompts/README.md +50 -0
  36. python_cad_tools-0.1.2/docs/project-configuration.md +91 -0
  37. python_cad_tools-0.1.2/docs/public-api.md +83 -0
  38. python_cad_tools-0.1.2/docs/spikes/format-feasibility.md +46 -0
  39. python_cad_tools-0.1.2/docs/viewer-delivery.md +94 -0
  40. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/pyproject.toml +5 -2
  41. python_cad_tools-0.1.2/src/python_cad_tools/__main__.py +4 -0
  42. python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/asset-manifest.json +1 -0
  43. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/animationGroup-Sd34ntWg.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/animationGroup-CjhCwiIi.js +1 -1
  44. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/bakedVertexAnimation-Cd_pRdrn.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/bakedVertexAnimation-_xBvgBl7.js +1 -1
  45. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/basisTextureLoader-DWgvS_1G.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/basisTextureLoader-D5LtrhD-.js +1 -1
  46. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/brdfTextureTools-CWGiG1W2.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/brdfTextureTools-D9U08KSH.js +2 -2
  47. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/bumpFragment-CWULheF1.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/bumpFragment-BkzgDMwt.js +1 -1
  48. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/bumpVertex-DqzFZayE.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/bumpVertex-BXtiaDZI.js +1 -1
  49. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/bumpVertexDeclaration-C5EFyTio.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/bumpVertexDeclaration-CchYDl1F.js +1 -1
  50. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/clipPlaneFragment-BXRtt4jj.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/clipPlaneFragment-pIdOfJ_5.js +1 -1
  51. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/clipPlaneVertex-B_VhD1oQ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/clipPlaneVertex-Kl_G8tpP.js +1 -1
  52. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/cubemapToSphericalPolynomial-DRpaukza.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/cubemapToSphericalPolynomial-CJ4cRmPh.js +1 -1
  53. python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/dds-YsWo1VVF.js +1 -0
  54. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/dds.pure-DtvJsKvY.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/dds.pure-BoNGq59u.js +1 -1
  55. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/ddsTextureLoader-H78xux1g.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/ddsTextureLoader-D8JRisWC.js +1 -1
  56. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/default.fragment-oSQ-tWhe.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/default.fragment-D0gXI89M.js +1 -1
  57. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/default.vertex-DhFjw_Da.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/default.vertex-BdO0XLk6.js +1 -1
  58. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/defaultUboDeclaration-BMDHNppx.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/defaultUboDeclaration-BJ4b62qj.js +1 -1
  59. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/dumpTools-BaNZPjUX.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/dumpTools-B7F8Ed3A.js +2 -2
  60. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/envTextureLoader-V0YnLcIM.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/envTextureLoader-BnvTfKgF.js +1 -1
  61. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/exrTextureLoader-CjGyIK3x.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/exrTextureLoader-C2D3Wx-p.js +1 -1
  62. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphApplyForceBlock-CW5nuobR.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphApplyForceBlock-C08kKLog.js +1 -1
  63. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphApplyImpulseBlock-LFqYIkhj.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphApplyImpulseBlock-GzK2l9nm.js +1 -1
  64. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphArrayIndexBlock-BMOHUbBm.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphArrayIndexBlock-DkRHIuYC.js +1 -1
  65. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphBezierCurveEasingBlock-knmTiuEk.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphBezierCurveEasingBlock-Csol8jUn.js +1 -1
  66. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphBinaryOperationBlock-DFLuCAKJ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphBinaryOperationBlock-C-xEeg-Z.js +1 -1
  67. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphBranchBlock-BJRHMXMo.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphBranchBlock-D7bstQqM.js +1 -1
  68. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphCachedOperationBlock-Dng-6jE0.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphCachedOperationBlock-C0pDPzaF.js +1 -1
  69. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphCancelDelayBlock-CgbK3CQZ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphCancelDelayBlock-VwnDZhN9.js +1 -1
  70. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphCodeExecutionBlock-8zMtq9tg.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphCodeExecutionBlock-C5aa0K7t.js +1 -1
  71. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphConditionalDataBlock-BiLr2rkI.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphConditionalDataBlock-B4vfaSDi.js +1 -1
  72. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphConsoleLogBlock-J1vcCtNP.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphConsoleLogBlock-CuLlYu4c.js +1 -1
  73. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphConstantBlock-CFb5nuaV.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphConstantBlock-DkyD6_YZ.js +1 -1
  74. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphContextBlock-DAeGVzhC.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphContextBlock-IKUbfY32.js +1 -1
  75. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphCounterBlock-lZlAQiJd.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphCounterBlock-tP_5qAQn.js +1 -1
  76. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphDataSwitchBlock-BIzvmbVy.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphDataSwitchBlock-DiTgopj3.js +1 -1
  77. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphDebounceBlock-DvNuMVwy.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphDebounceBlock-FLUJTpdt.js +1 -1
  78. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphDebugBlock-Dymd2VEE.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphDebugBlock-C0EH9zPP.js +1 -1
  79. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphDoNBlock-v68aoNLH.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphDoNBlock-DiAdBjnD.js +1 -1
  80. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphEasingBlock-CTnGv92q.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphEasingBlock-CXlIILZe.js +1 -1
  81. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphFlipFlopBlock-DXsO0Chw.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphFlipFlopBlock-5XRf4KeD.js +1 -1
  82. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphForLoopBlock-CPpe9T75.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphForLoopBlock-RitJ6OS_.js +1 -1
  83. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphFunctionReferenceBlock-DjDev4Pq.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphFunctionReferenceBlock-DvVIlipg.js +1 -1
  84. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphGLTFDataProvider-GIYCz4AQ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphGLTFDataProvider-BxBUrprf.js +1 -1
  85. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphGetAngularVelocityBlock-BStkOVeL.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphGetAngularVelocityBlock-CqBDBjqf.js +1 -1
  86. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphGetAssetBlock-Eiqoivbz.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphGetAssetBlock-Dk4qKn1w.js +1 -1
  87. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphGetLinearVelocityBlock-B0cpV5ws.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphGetLinearVelocityBlock-DNN6N9mt.js +1 -1
  88. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphGetPhysicsMassPropertiesBlock-B-H64yaI.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphGetPhysicsMassPropertiesBlock-CTsHqDvM.js +1 -1
  89. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphGetPropertyBlock-CUyOsPw0.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphGetPropertyBlock-CjX3cseU.js +1 -1
  90. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphGetSoundVolumeBlock-C0FjrsUz.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphGetSoundVolumeBlock-DzWJtlM9.js +1 -1
  91. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphGetVariableBlock-O4597zBl.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphGetVariableBlock-uBq6vXOw.js +1 -1
  92. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphIndexOfBlock-E00Z3KXM.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphIndexOfBlock-MpANR6P1.js +1 -1
  93. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphInterpolationBlock-DnkA9MNH.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphInterpolationBlock-BM2_pZfB.js +1 -1
  94. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphIsKeyPressedBlock-DDfeuAyf.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphIsKeyPressedBlock-X1Q2SR0H.js +1 -1
  95. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphIsSoundPlayingBlock-DMXg8jdM.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphIsSoundPlayingBlock-C_ir8hba.js +1 -1
  96. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphJsonPointerParserBlock-OmCorK0y.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphJsonPointerParserBlock-I5tJhTaw.js +1 -1
  97. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphKeyDownEventBlock-RuVtj6g2.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphKeyDownEventBlock-DSmmDXBR.js +1 -1
  98. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphKeyUpEventBlock-DO4pAfHi.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphKeyUpEventBlock-BDViriRD.js +1 -1
  99. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphKeyboardEventBlock-Bx3pAzzh.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphKeyboardEventBlock-B7EQjaZe.js +1 -1
  100. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphMathBlocks-7W1XYOC8.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphMathBlocks-RIndR7Kr.js +1 -1
  101. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphMathCombineExtractBlocks-a4f0Kv6e.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphMathCombineExtractBlocks-BEMkyBCM.js +1 -1
  102. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphMatrixMathBlocks-C5Z-y1Au.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphMatrixMathBlocks-BAV1wScN.js +1 -1
  103. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphMeshPickEventBlock-D4m-I4CS.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphMeshPickEventBlock-CcNT5f0d.js +1 -1
  104. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphMultiGateBlock-BISVSMw6.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphMultiGateBlock-DSEbX2Mj.js +1 -1
  105. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPauseAnimationBlock-BYP2Z-HG.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPauseAnimationBlock-Dfthx2s-.js +1 -1
  106. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPauseSoundBlock-Drh1EeW6.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPauseSoundBlock-DSu8v9Kr.js +1 -1
  107. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPhysicsCollisionEventBlock-BoziAQ75.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPhysicsCollisionEventBlock-jvE_54c8.js +1 -1
  108. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPlayAnimationBlock-Clry-68M.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPlayAnimationBlock-DK8Z5heh.js +1 -1
  109. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPlaySoundBlock-LbBVxGBE.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPlaySoundBlock-XiF7wfi1.js +1 -1
  110. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPointerDownEventBlock-DIVXCSHh.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPointerDownEventBlock-BOqQHgdZ.js +1 -1
  111. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPointerMoveEventBlock-BNNOzY2W.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPointerMoveEventBlock-DggBfxkF.js +1 -1
  112. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPointerOutEventBlock-B8f2dOFT.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPointerOutEventBlock-DvZyyUF4.js +1 -1
  113. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPointerOverEventBlock-CQr8LCee.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPointerOverEventBlock-YLki8WEB.js +1 -1
  114. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphPointerUpEventBlock-DMg_iEHl.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphPointerUpEventBlock-D1tqJ9jF.js +1 -1
  115. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphReceiveCustomEventBlock-B8GJm9Ai.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphReceiveCustomEventBlock-D3VAKTpt.js +1 -1
  116. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSceneReadyEventBlock-Dcdb29K2.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSceneReadyEventBlock-Dt8AsNSg.js +1 -1
  117. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSceneTickEventBlock-BLE5p4mi.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSceneTickEventBlock-BtuZ_Spn.js +1 -1
  118. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSendCustomEventBlock-BMzDItQ5.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSendCustomEventBlock-B8Dzycmf.js +1 -1
  119. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSequenceBlock-DRURovjn.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSequenceBlock-CQsb2okn.js +1 -1
  120. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSetAngularVelocityBlock-Ba8dhkLM.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSetAngularVelocityBlock-C3zOq5X7.js +1 -1
  121. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSetDelayBlock-CnQR--Gn.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSetDelayBlock-DxyUb-8k.js +1 -1
  122. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSetLinearVelocityBlock-Dm1r3vkh.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSetLinearVelocityBlock-DeNTJQ42.js +1 -1
  123. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSetPhysicsMotionTypeBlock-BNtMLimi.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSetPhysicsMotionTypeBlock-i233RoWe.js +1 -1
  124. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSetPropertyBlock-C-uv2jhP.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSetPropertyBlock-Darrnz2o.js +1 -1
  125. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSetSoundVolumeBlock-D9LDx3lg.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSetSoundVolumeBlock-KrTTGHr6.js +1 -1
  126. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSetVariableBlock-DszzRB5X.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSetVariableBlock-8CdS1h8e.js +1 -1
  127. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSoundEndedEventBlock-DeTDSudb.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSoundEndedEventBlock-Cuk8JjDG.js +1 -1
  128. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphStopAnimationBlock-DWuwoFWr.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphStopAnimationBlock-DOsG4sc5.js +1 -1
  129. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphStopSoundBlock-DEnj2cQw.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphStopSoundBlock-C5IaCPpa.js +1 -1
  130. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphSwitchBlock-zs8Fp9ky.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphSwitchBlock-ClqiypjM.js +1 -1
  131. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphThrottleBlock-BYAKUQXd.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphThrottleBlock-C7hhfNo2.js +1 -1
  132. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphTransformCoordinatesSystemBlock-DYP54m5P.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphTransformCoordinatesSystemBlock-BksU6sPJ.js +1 -1
  133. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphTypeToTypeBlocks-vFwn79bS.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphTypeToTypeBlocks-DJi_CBW-.js +1 -1
  134. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphUnaryOperationBlock-CaRh4Ef0.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphUnaryOperationBlock-U15mYQbJ.js +1 -1
  135. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphVectorMathBlocks-BEIhMs-A.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphVectorMathBlocks-D4QAvgsk.js +1 -1
  136. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphWaitAllBlock-DFbELP_j.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphWaitAllBlock-UV6LDk1r.js +1 -1
  137. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/flowGraphWhileLoopBlock-C1OKQ-_F.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/flowGraphWhileLoopBlock-DPpNHwZP.js +1 -1
  138. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/fogFragment-DtDlQBnz.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/fogFragment-pKchdx3M.js +1 -1
  139. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplatting-Cfigjb15.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplatting-DgjcxjKa.js +1 -1
  140. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplatting-DIn8R8oF.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplatting-oRLzV71m.js +1 -1
  141. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-BxeRJ2k-.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-BKYuCXf7.js +1 -1
  142. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-DNDmvRs-.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-NCxeyHg7.js +1 -1
  143. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-D92z5jYn.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-CW0PXB4s.js +1 -1
  144. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-DSWfFnKQ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-zmXoP8p9.js +1 -1
  145. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-qwx5ntqJ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment--IDQcS1p.js +1 -1
  146. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-DBQE2gDk.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-CgX-XH5m.js +1 -1
  147. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-CP2kd3jU.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-DzuuyEGB.js +1 -1
  148. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-Dr-fEg_W.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-YB1C1Muy.js +1 -1
  149. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/geometry.fragment-Dph3muZt.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/geometry.fragment-DuBDWlLB.js +1 -1
  150. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/geometry.fragment-CsJIm2H0.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/geometry.fragment-EEbMy57o.js +1 -1
  151. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/geometry.vertex-Bm9Wg3Gi.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/geometry.vertex-3cVZEKxJ.js +1 -1
  152. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/geometry.vertex-BXGMTA_J.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/geometry.vertex-B--XA-QK.js +1 -1
  153. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/glowBlurPostProcess.fragment-BJSwKIJD.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/glowBlurPostProcess.fragment-UNz8njEJ.js +1 -1
  154. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/glowMapGeneration.fragment-DcyS1cTF.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/glowMapGeneration.fragment-CsSqgq6c.js +1 -1
  155. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/glowMapGeneration.vertex-BGq1Fakj.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/glowMapGeneration.vertex-DOMHadFA.js +1 -1
  156. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/glowMapMerge.fragment-DxcneU_F.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/glowMapMerge.fragment-DXi2v5pz.js +1 -1
  157. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/glowMapMerge.vertex-DaJJKqMV.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/glowMapMerge.vertex-DgBSWFHP.js +1 -1
  158. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/harmonicsFunctions-DzJcvNWG.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/harmonicsFunctions-BkifmnNV.js +1 -1
  159. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/helperFunctions-Cugfp1Fz.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/helperFunctions-Bx8RYYvi.js +1 -1
  160. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/iesTextureLoader-CO4G0p2M.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/iesTextureLoader-Dj5K0vc1.js +1 -1
  161. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/index-B2zBEWsq.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/index-JRwY7p9T.js +18 -18
  162. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/kernelBlur.fragment-BkKbudbW.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/kernelBlur.fragment-B9YDiI_M.js +1 -1
  163. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/kernelBlur.fragment-B6CTXTxY.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/kernelBlur.fragment-BRdwtDs7.js +1 -1
  164. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/kernelBlur.vertex-D371zUfT.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/kernelBlur.vertex-A7OpqdrG.js +1 -1
  165. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/kernelBlur.vertex-BYwFU5IS.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/kernelBlur.vertex-CWlIunB6.js +1 -1
  166. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-YS8JpqdO.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-PE5ICZNw.js +1 -1
  167. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-CgBGaCHg.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-YMenN7Se.js +1 -1
  168. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/ktxTextureLoader-ncMSJTjl.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/ktxTextureLoader-uG9TUdGM.js +1 -1
  169. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/lightFragment-skHiFbKB.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/lightFragment-CDLhoaId.js +1 -1
  170. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/logDepthDeclaration-BR8XRz9F.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/logDepthDeclaration-BOlhc3aa.js +1 -1
  171. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/logDepthVertex-UKrhEIvg.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/logDepthVertex-BIA9Xrid.js +1 -1
  172. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/mainUVVaryingDeclaration-BxQWGFcG.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/mainUVVaryingDeclaration-PmIDYGIz.js +1 -1
  173. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/meshUboDeclaration-BnX046aQ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/meshUboDeclaration-BfPhZsyr.js +1 -1
  174. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/oitFragment-CTMCOfNP.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/oitFragment-DpKfMtsk.js +1 -1
  175. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbr.fragment-Dv6qTVVi.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbr.fragment-BAOdoy3Z.js +1 -1
  176. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbr.fragment-DPJPqi6p.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbr.fragment-BmgNfxS4.js +1 -1
  177. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbr.vertex-CHESW3gB.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbr.vertex-BpB-7aXl.js +1 -1
  178. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbr.vertex-Bn2wrdGL.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbr.vertex-D-IjPutK.js +1 -1
  179. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbrMaterial.pure-BdK7VgO_.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbrMaterial.pure-C6V2SeQx.js +3 -3
  180. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbrMaterialLoadingAdapter-Bm_AHDUN.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbrMaterialLoadingAdapter-CbcwuEwB.js +2 -2
  181. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-Ba_ly4LE.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-1U_DHNWK.js +1 -1
  182. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-BDa9qEoN.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-BClMu_zp.js +1 -1
  183. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-DajhikDS.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-DLujw3YH.js +1 -1
  184. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-BY2lSH2C.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-piwBvKOi.js +1 -1
  185. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/packingFunctions-DTwzBRBx.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/packingFunctions-BD5WZtBT.js +1 -1
  186. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/packingFunctions-BHPwcGG2.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/packingFunctions-D3gaUkUa.js +1 -1
  187. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pass.fragment-9oKU4pI3.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pass.fragment-CzZpaqYk.js +1 -1
  188. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/passCube.fragment-CpAeiYx1.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/passCube.fragment-Bso78Amo.js +1 -1
  189. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/passCube.fragment-DHtSWVRF.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/passCube.fragment-DwRJ1H1s.js +1 -1
  190. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pbr.fragment-cIhMKwLs.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pbr.fragment-sZ-foSaO.js +1 -1
  191. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pbr.vertex-BfdONsf2.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pbr.vertex-PBjkpyNN.js +1 -1
  192. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pbrBRDFFunctions-B_ppOzPO.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pbrBRDFFunctions-Dv8-Akv1.js +1 -1
  193. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pbrDebug-DDdwL5_t.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pbrDebug-5RaK38tC.js +1 -1
  194. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pbrIBLFunctions-b1zdpzOP.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pbrIBLFunctions-D_X-tzpO.js +1 -1
  195. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pbrMaterial.pure-BZA7yVhu.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pbrMaterial.pure-RJ6tVczH.js +2 -2
  196. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pbrMaterialLoadingAdapter-BRvKRnjl.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pbrMaterialLoadingAdapter-BqlfZ1xs.js +1 -1
  197. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/pbrUboDeclaration-CMZp25k3.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/pbrUboDeclaration-BqNgF1qB.js +1 -1
  198. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/postprocess.vertex-DzdUpNbW.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/postprocess.vertex-9J4kRI6V.js +1 -1
  199. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/procedural.vertex-Dp-Ng7Pc.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/procedural.vertex-Bq_A-zE0.js +1 -1
  200. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/procedural.vertex-BnbuQ-1f.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/procedural.vertex-DzkBufoo.js +1 -1
  201. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/reflectionFunction-DBlr3oDs.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/reflectionFunction-n0dvho3A.js +1 -1
  202. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/rgbdDecode.fragment-CyvnZFOJ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/rgbdDecode.fragment-0BuGamw5.js +1 -1
  203. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-iscgpA1_.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-BBGe9kwu.js +1 -1
  204. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-Dz4zLnoD.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-DiiD2NE-.js +1 -1
  205. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/sceneUboDeclaration-BzFIc4mb.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/sceneUboDeclaration-BmpwedcW.js +1 -1
  206. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/textureProcessor.fragment-JMKyWZng.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/textureProcessor.fragment-CwNRejEe.js +1 -1
  207. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/textureProcessor.fragment-C9D0rd-M.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/textureProcessor.fragment-CyBHPXX2.js +1 -1
  208. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/tgaTextureLoader-oxTElIQJ.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/tgaTextureLoader-ClB6SRY9.js +1 -1
  209. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/vertexColorMixing-mdC9xZe1.js → python_cad_tools-0.1.2/src/python_cad_tools/_viewer_static/assets/vertexColorMixing-f4wQRwGI.js +1 -1
  210. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_viewer_static/index.html +1 -1
  211. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/artifacts.py +0 -1
  212. python_cad_tools-0.1.2/src/python_cad_tools/build-info.json +1 -0
  213. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/templates/project/pyproject.toml +1 -1
  214. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2/src/python_cad_tools.egg-info}/PKG-INFO +1 -1
  215. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools.egg-info/SOURCES.txt +207 -167
  216. python_cad_tools-0.1.2/src/python_cad_tools.egg-info/scm_file_list.json +335 -0
  217. python_cad_tools-0.1.2/src/python_cad_tools.egg-info/scm_version.json +8 -0
  218. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/asset-manifest.json +0 -1
  219. python_cad_tools-0.1.0rc1/src/python_cad_tools/_viewer_static/assets/dds-Dkb2Cx2N.js +0 -1
  220. python_cad_tools-0.1.0rc1/src/python_cad_tools/build-info.json +0 -1
  221. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/LICENSE +0 -0
  222. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/README.md +0 -0
  223. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/setup.cfg +0 -0
  224. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/__init__.py +0 -0
  225. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_locking.py +0 -0
  226. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_project_loader.py +0 -0
  227. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_project_state.py +0 -0
  228. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_scaffold.py +0 -0
  229. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_transaction.py +0 -0
  230. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_viewer_static/app.webmanifest +0 -0
  231. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_viewer_static/assets/hdrTextureLoader-BGQvgh0h.js +0 -0
  232. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_viewer_static/assets/index-DcTTrc-8.css +0 -0
  233. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_viewer_static/assets/mesh.vertexData.functions-ayNlGC5K.js +0 -0
  234. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_viewer_static/favicon.svg +0 -0
  235. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/_viewer_static/sw.js +0 -0
  236. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/build.py +0 -0
  237. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/cli.py +0 -0
  238. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/context.py +0 -0
  239. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/determinism.py +0 -0
  240. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/drawings/__init__.py +0 -0
  241. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/drawings/_catalog.py +0 -0
  242. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/drawings/_validation.py +0 -0
  243. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/elements.py +0 -0
  244. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exceptions.py +0 -0
  245. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/__init__.py +0 -0
  246. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/base.py +0 -0
  247. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/drawings/__init__.py +0 -0
  248. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/drawings/annotations.py +0 -0
  249. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/drawings/dxf.py +0 -0
  250. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/drawings/model.py +0 -0
  251. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/drawings/pdf.py +0 -0
  252. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/drawings/primitives.py +0 -0
  253. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/drawings/projection.py +0 -0
  254. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/drawings/svg.py +0 -0
  255. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/glb.py +0 -0
  256. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/ifc.py +0 -0
  257. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/quantities.py +0 -0
  258. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/exporters/step.py +0 -0
  259. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/geometry.py +0 -0
  260. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/manifests.py +0 -0
  261. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/project_config.py +0 -0
  262. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/py.typed +0 -0
  263. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/runtime_sync.py +0 -0
  264. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/build-manifest-1.json +0 -0
  265. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/design-manifest-1.json +0 -0
  266. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/download-manifest-2.json +0 -0
  267. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/drawing-annotations-1.json +0 -0
  268. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/glb-manifest-1.json +0 -0
  269. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/ifc-validation-1.json +0 -0
  270. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/quantities-1.json +0 -0
  271. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/run-metadata-1.json +0 -0
  272. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/site-metadata-1.json +0 -0
  273. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/schemas/step-validation-1.json +0 -0
  274. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/site.py +0 -0
  275. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/templates/project/.gitignore +0 -0
  276. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/templates/project/README.md +0 -0
  277. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/templates/project/config.py +0 -0
  278. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/templates/project/drawing_annotations.py +0 -0
  279. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/templates/project/generated/.gitkeep +0 -0
  280. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/templates/project/model.py +0 -0
  281. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/units.py +0 -0
  282. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools/validation.py +0 -0
  283. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools.egg-info/dependency_links.txt +0 -0
  284. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools.egg-info/entry_points.txt +0 -0
  285. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools.egg-info/requires.txt +0 -0
  286. {python_cad_tools-0.1.0rc1 → python_cad_tools-0.1.2}/src/python_cad_tools.egg-info/top_level.txt +0 -0
@@ -0,0 +1,2 @@
1
+ # Generated viewer bytes are reviewed through the canonical asset manifest.
2
+ src/python_cad_tools/_viewer_static/** -text -diff
@@ -0,0 +1,313 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ tags: ['v*']
7
+ pull_request:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ lint-type-unit:
14
+ name: Lint, type, unit
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
18
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
19
+ with:
20
+ python-version: "3.13"
21
+ cache: pip
22
+ - run: python -m pip install --upgrade pip
23
+ - run: pip install -e '.[dev]'
24
+ - run: ruff check src tests
25
+ - run: mypy
26
+ - run: pytest -q
27
+
28
+ exporter-integration:
29
+ name: Exporter integration
30
+ runs-on: ubuntu-latest
31
+ steps:
32
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
33
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
34
+ with:
35
+ python-version: "3.13"
36
+ cache: pip
37
+ - run: python -m pip install --upgrade pip
38
+ - run: pip install -e '.[dev]'
39
+ - run: pytest tests/integration -q
40
+
41
+ viewer-browser:
42
+ name: Viewer and browser tests
43
+ runs-on: ubuntu-latest
44
+ steps:
45
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
46
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
47
+ with:
48
+ python-version: "3.13"
49
+ cache: pip
50
+ - run: python -m pip install --upgrade pip
51
+ - run: pip install -e .
52
+ - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
53
+ with:
54
+ node-version: "22.15.0"
55
+ cache: npm
56
+ cache-dependency-path: viewer/package-lock.json
57
+ - working-directory: viewer
58
+ run: npm ci
59
+ - working-directory: viewer
60
+ run: npm test
61
+ - working-directory: viewer
62
+ run: npm run build
63
+ - working-directory: viewer
64
+ run: npx playwright install --with-deps chromium
65
+ - working-directory: viewer
66
+ run: npm run test:e2e
67
+
68
+ wheel-sdist:
69
+ name: Wheel and sdist inspection
70
+ runs-on: ubuntu-latest
71
+ steps:
72
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
73
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
74
+ with:
75
+ python-version: "3.13"
76
+ cache: pip
77
+ - run: python -m pip install --upgrade pip
78
+ - run: pip install -e '.[dev]'
79
+ - run: python -m build --wheel --sdist --outdir dist .
80
+ - run: python -m twine check dist/*
81
+ - run: pytest tests/packaging -q
82
+
83
+ clean-install:
84
+ name: Clean non-editable install
85
+ runs-on: ubuntu-latest
86
+ steps:
87
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
88
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
89
+ with:
90
+ python-version: "3.13"
91
+ cache: pip
92
+ - run: python -m pip install --upgrade pip
93
+ - run: pip install -e '.[dev]'
94
+ - run: python -m build --wheel --outdir dist .
95
+ - name: Install wheel into clean venv
96
+ run: |
97
+ python -m venv /tmp/clean-venv
98
+ /tmp/clean-venv/bin/pip install dist/*.whl
99
+ /tmp/clean-venv/bin/python-cad --version
100
+ - name: Init and build generic project
101
+ run: |
102
+ mkdir /tmp/generic-project
103
+ /tmp/clean-venv/bin/python-cad init --destination /tmp/generic-project
104
+ /tmp/clean-venv/bin/python-cad build --project-root /tmp/generic-project
105
+ /tmp/clean-venv/bin/python-cad verify --project-root /tmp/generic-project
106
+
107
+ generic-e2e:
108
+ name: Generic E2E
109
+ runs-on: ubuntu-latest
110
+ steps:
111
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
112
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
113
+ with:
114
+ python-version: "3.13"
115
+ cache: pip
116
+ - run: python -m pip install --upgrade pip
117
+ - run: pip install -e '.[dev]'
118
+ - name: Init, build, verify, clean
119
+ run: |
120
+ python-cad init --destination /tmp/e2e-project
121
+ python-cad build --project-root /tmp/e2e-project
122
+ python-cad verify --project-root /tmp/e2e-project
123
+ python-cad clean --project-root /tmp/e2e-project
124
+
125
+ public-api:
126
+ name: Public API surface
127
+ runs-on: ubuntu-latest
128
+ steps:
129
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
130
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
131
+ with:
132
+ python-version: "3.13"
133
+ cache: pip
134
+ - run: python -m pip install --upgrade pip
135
+ - run: pip install -e '.[dev]'
136
+ - run: pytest tests/unit/test_public_api.py -q
137
+
138
+ active-terminology:
139
+ name: Active terminology scan
140
+ runs-on: ubuntu-latest
141
+ steps:
142
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
143
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
144
+ with:
145
+ python-version: "3.13"
146
+ - name: Scan for active legacy concepts
147
+ run: |
148
+ set -euo pipefail
149
+ EXCLUDES="\.git/|\.venv/|__pycache__|\.back_agents/|back_AGENTS|back_opencode|PYTHON_CAD_TOOLS_REPOSITORY_MIGRATION_PLAN|docs/migration-prompts/|docs/migration/|node_modules|\.egg-info|\.mypy_cache|\.pytest_cache|\.ruff_cache|\.coverage|\.opencode/node_modules|\.opencode/package|\.opencode/tools|\.opencode/commands|generated/|\.github/workflows/ci\.yml"
150
+ HITS=$(grep -rliE "freecad|fcstd|freecadcmd|benge_freecad_project|python-cad-project|python-cad-artifact-viewer|bengecomplexfunctional|functional\.benge_complex|complex-functional|benge_functional_output|freecad macro project template" \
151
+ --include="*.py" --include="*.toml" --include="*.json" --include="*.jsonc" --include="*.md" --include="*.yml" --include="*.yaml" --include="*.sh" --include="*.txt" --include="*.in" . 2>/dev/null \
152
+ | grep -vE "$EXCLUDES" || true)
153
+ if [ -n "$HITS" ]; then
154
+ echo "Active legacy concepts found:"
155
+ echo "$HITS"
156
+ exit 1
157
+ fi
158
+ echo "No active legacy concepts found."
159
+
160
+ tree-shape:
161
+ name: Tree shape and policy checks
162
+ runs-on: ubuntu-latest
163
+ steps:
164
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
165
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
166
+ with:
167
+ python-version: "3.13"
168
+ - name: Verify tree shape, symlinks, allowlists, backup exclusions
169
+ run: |
170
+ set -euo pipefail
171
+ echo "=== Check .tools/ is absent ==="
172
+ test ! -d .tools
173
+ echo "=== Check root legacy files are absent ==="
174
+ for f in build.py start.sh config.py model.py drawing_annotations.py; do
175
+ test ! -f "$f"
176
+ done
177
+ echo "=== Check CLAUDE.md resolves to AGENTS.md ==="
178
+ test "$(readlink CLAUDE.md)" = "AGENTS.md"
179
+ test -f AGENTS.md
180
+ echo "=== Check backups are untracked ==="
181
+ git status --short .back_agents/ back_AGENTS.md back_opencode.jsonc | grep -qE '^\?\?' || true
182
+ echo "=== Check no dangling symlinks ==="
183
+ find .claude .codex .opencode -type l ! -exec test -e {} \; -print 2>/dev/null | grep -v node_modules || true
184
+ echo "=== Check .github/workflows has expected files ==="
185
+ for f in ci.yml release-candidate.yml downstream-compatibility.yml; do
186
+ test -f ".github/workflows/$f"
187
+ done
188
+ echo "All tree shape checks passed."
189
+
190
+ supported-platforms:
191
+ name: Supported platforms (${{ matrix.os }})
192
+ strategy:
193
+ fail-fast: false
194
+ matrix:
195
+ os: [ubuntu-latest, macos-latest, windows-latest]
196
+ runs-on: ${{ matrix.os }}
197
+ steps:
198
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
199
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
200
+ with:
201
+ python-version: "3.13"
202
+ cache: pip
203
+ - run: python -m pip install --upgrade pip
204
+ - run: pip install -e '.[dev]'
205
+ - run: ruff check src tests
206
+ if: matrix.os != 'windows-latest'
207
+ - run: mypy
208
+ if: matrix.os != 'windows-latest'
209
+ - run: pytest tests/unit -q
210
+ - name: Init and build on platform
211
+ run: |
212
+ python-cad init --destination /tmp/platform-test
213
+ python-cad build --project-root /tmp/platform-test
214
+ if: matrix.os != 'windows-latest'
215
+ - name: Init and build on Windows
216
+ run: |
217
+ python-cad init --destination C:\platform-test
218
+ python-cad build --project-root C:\platform-test
219
+ if: matrix.os == 'windows-latest'
220
+
221
+ platform-locks:
222
+ name: Platform lock generation (${{ matrix.os }})
223
+ strategy:
224
+ fail-fast: false
225
+ matrix:
226
+ include:
227
+ - os: ubuntu-latest
228
+ lock: requirements-linux.lock
229
+ - os: macos-latest
230
+ lock: requirements-macos.lock
231
+ - os: windows-latest
232
+ lock: requirements-windows.lock
233
+
234
+ runs-on: ${{ matrix.os }}
235
+ steps:
236
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
237
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
238
+ with:
239
+ python-version: "3.13"
240
+ cache: pip
241
+ - run: python -m pip install --upgrade pip
242
+ - run: pip install -e '.[dev]'
243
+ - name: Generate platform lock
244
+ run: |
245
+ pip freeze > ${{ matrix.lock }}
246
+ echo "Generated ${{ matrix.lock }} on ${{ matrix.os }}"
247
+ cat ${{ matrix.lock }}
248
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
249
+ with:
250
+ name: ${{ matrix.lock }}
251
+ path: ${{ matrix.lock }}
252
+
253
+ build-publish:
254
+ name: Build and publish to PyPI
255
+ if: |
256
+ (github.event_name == 'push' && github.ref == 'refs/heads/main') ||
257
+ (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))
258
+ needs:
259
+ - lint-type-unit
260
+ - exporter-integration
261
+ - viewer-browser
262
+ - wheel-sdist
263
+ - clean-install
264
+ - generic-e2e
265
+ - public-api
266
+ - active-terminology
267
+ - tree-shape
268
+ - supported-platforms
269
+ - platform-locks
270
+ runs-on: ubuntu-latest
271
+ outputs:
272
+ hashes: ${{ steps.hash.outputs.hashes }}
273
+ steps:
274
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
275
+ with:
276
+ fetch-depth: 0
277
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
278
+ with:
279
+ python-version: "3.13"
280
+ cache: pip
281
+ - run: python -m pip install --upgrade pip
282
+ - run: pip install build twine
283
+ - name: Build wheel and sdist
284
+ run: python -m build --wheel --sdist --outdir dist .
285
+ - name: Generate hashes for provenance
286
+ id: hash
287
+ run: |
288
+ cd dist
289
+ HASHES=$(sha256sum * | base64 -w0)
290
+ echo "hashes=$HASHES" >> "$GITHUB_OUTPUT"
291
+ - name: Twine check
292
+ run: python -m twine check dist/*
293
+ - name: Publish to PyPI
294
+ run: python -m twine upload dist/*
295
+ env:
296
+ TWINE_USERNAME: __token__
297
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
298
+
299
+ provenance:
300
+ name: Generate SLSA provenance
301
+ if: |
302
+ (github.event_name == 'push' && github.ref == 'refs/heads/main') ||
303
+ (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))
304
+ needs: [build-publish]
305
+ permissions:
306
+ actions: read
307
+ id-token: write
308
+ contents: write
309
+ uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
310
+ with:
311
+ base64-subjects: ${{ needs.build-publish.outputs.hashes }}
312
+ upload-assets: true
313
+ private-repository: true
@@ -0,0 +1,40 @@
1
+ name: Downstream compatibility
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ companion-repository-url:
7
+ description: Future companion repository URL (e.g. https://github.com/owner/repo)
8
+ required: true
9
+ type: string
10
+ companion-commit:
11
+ description: Companion repository commit SHA to check out
12
+ required: true
13
+ type: string
14
+ candidate-wheel-sha256:
15
+ description: SHA-256 of the candidate wheel to test against
16
+ required: true
17
+ type: string
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ jobs:
23
+ downstream-compatibility:
24
+ name: Downstream compatibility (manual, deferred)
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - name: Report deferred downstream compatibility
28
+ run: |
29
+ echo "Downstream compatibility verification is deferred."
30
+ echo ""
31
+ echo "Inputs recorded for a future companion repository:"
32
+ echo " companion-repository-url: ${{ inputs.companion-repository-url }}"
33
+ echo " companion-commit: ${{ inputs.companion-commit }}"
34
+ echo " candidate-wheel-sha256: ${{ inputs.candidate-wheel-sha256 }}"
35
+ echo ""
36
+ echo "This workflow does not check out, build, or test a companion"
37
+ echo "repository. It must not be run until a companion repository"
38
+ echo "exists at the provided URL. No companion revision is"
39
+ echo "hard-coded in this repository."
40
+ exit 1
@@ -0,0 +1,92 @@
1
+ name: Release candidate
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ candidate-label:
7
+ description: Candidate label (e.g. 0.1.0rc1)
8
+ required: true
9
+ type: string
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ build:
16
+ name: Build wheel and sdist
17
+ runs-on: ubuntu-latest
18
+ outputs:
19
+ wheel-sha256: ${{ steps.hashes.outputs.wheel-sha256 }}
20
+ sdist-sha256: ${{ steps.hashes.outputs.sdist-sha256 }}
21
+ wheel-name: ${{ steps.hashes.outputs.wheel-name }}
22
+ sdist-name: ${{ steps.hashes.outputs.sdist-name }}
23
+ steps:
24
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
25
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
26
+ with:
27
+ python-version: "3.13"
28
+ cache: pip
29
+ - run: python -m pip install --upgrade pip
30
+ - run: pip install -e '.[dev]'
31
+ - run: ruff check src tests
32
+ - run: mypy
33
+ - run: pytest -q
34
+ - name: Build wheel and sdist
35
+ run: python -m build --wheel --sdist --outdir dist .
36
+ - name: Twine check
37
+ run: python -m twine check dist/*
38
+ - name: Record hashes
39
+ id: hashes
40
+ run: |
41
+ WHEEL=$(ls dist/*.whl)
42
+ SDIST=$(ls dist/*.tar.gz)
43
+ WHEEL_SHA=$(sha256sum "$WHEEL" | cut -d' ' -f1)
44
+ SDIST_SHA=$(sha256sum "$SDIST" | cut -d' ' -f1)
45
+ echo "wheel-sha256=$WHEEL_SHA" >> "$GITHUB_OUTPUT"
46
+ echo "sdist-sha256=$SDIST_SHA" >> "$GITHUB_OUTPUT"
47
+ echo "wheel-name=$(basename "$WHEEL")" >> "$GITHUB_OUTPUT"
48
+ echo "sdist-name=$(basename "$SDIST")" >> "$GITHUB_OUTPUT"
49
+ echo "WHEEL_SHA256=$WHEEL_SHA" > dist/CHECKSUMS
50
+ echo "SDIST_SHA256=$SDIST_SHA" >> dist/CHECKSUMS
51
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
52
+ with:
53
+ name: release-candidate-${{ inputs.candidate-label }}
54
+ path: dist/
55
+ retention-days: 90
56
+
57
+ verify:
58
+ name: Verify candidate hashes
59
+ runs-on: ubuntu-latest
60
+ needs: build
61
+ steps:
62
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
63
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
64
+ with:
65
+ python-version: "3.13"
66
+ cache: pip
67
+ - run: python -m pip install --upgrade pip
68
+ - run: pip install -e '.[dev]'
69
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
70
+ with:
71
+ name: release-candidate-${{ inputs.candidate-label }}
72
+ path: dist
73
+ - name: Verify hashes match
74
+ run: |
75
+ set -euo pipefail
76
+ WHEEL=$(ls dist/*.whl)
77
+ SDIST=$(ls dist/*.tar.gz)
78
+ WHEEL_SHA=$(sha256sum "$WHEEL" | cut -d' ' -f1)
79
+ SDIST_SHA=$(sha256sum "$SDIST" | cut -d' ' -f1)
80
+ echo "Wheel: $WHEEL_SHA"
81
+ echo "Expected: ${{ needs.build.outputs.wheel-sha256 }}"
82
+ test "$WHEEL_SHA" = "${{ needs.build.outputs.wheel-sha256 }}"
83
+ echo "Sdist: $SDIST_SHA"
84
+ echo "Expected: ${{ needs.build.outputs.sdist-sha256 }}"
85
+ test "$SDIST_SHA" = "${{ needs.build.outputs.sdist-sha256 }}"
86
+ - name: Install wheel non-editably and verify
87
+ run: |
88
+ python -m venv /tmp/candidate-venv
89
+ /tmp/candidate-venv/bin/pip install dist/*.whl
90
+ /tmp/candidate-venv/bin/python-cad --version
91
+ - name: Run packaging tests
92
+ run: pytest tests/packaging -q
@@ -0,0 +1,16 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .venv/
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ .ruff_cache/
7
+ .coverage
8
+ htmlcov/
9
+ build/
10
+ dist/
11
+ *.egg-info/
12
+
13
+ generated/*
14
+ !generated/.gitkeep
15
+
16
+ .autocommit/
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Save verified repository changes through the exclusive Save agent
3
+ agent: save
4
+ subtask: true
5
+ ---
6
+
7
+ Load the `save` skill and follow it exactly.
8
+
9
+ Save the already-verified repository changes by calling the native OpenCode
10
+ tool `specrepo-autocommit` exactly once. Use `$ARGUMENTS` as its `summary` when
11
+ the value is non-empty; otherwise use `Save verified repository changes`.
12
+
13
+ Do not inspect or edit files, run tests, call shell commands, invoke Git
14
+ directly, or use any fallback. Report the single tool call's completed,
15
+ blocked, rejected, or failed result.
@@ -0,0 +1,25 @@
1
+ import { tool } from "@opencode-ai/plugin"
2
+ import { fileURLToPath } from "node:url"
3
+
4
+ const script = fileURLToPath(new URL("./specrepo-autocommit.py", import.meta.url))
5
+
6
+ export default tool({
7
+ description: "Save verified changes through SpecRepo autocommit; callable only by the save agent.",
8
+ args: {
9
+ summary: tool.schema.string().trim().min(1).describe("What changed and why"),
10
+ },
11
+ async execute({ summary }, context) {
12
+ if (context.agent !== "save") {
13
+ throw new Error("specrepo-autocommit is restricted to the save agent.")
14
+ }
15
+ const python = process.platform === "win32" ? "python" : "python3"
16
+ const result = await Bun.$`${python} ${script} ${summary}`
17
+ .cwd(context.worktree || context.directory)
18
+ .nothrow()
19
+ .quiet()
20
+ const output = `${result.stdout}${result.stderr}`.trim()
21
+
22
+ if (result.exitCode !== 0) throw new Error(output)
23
+ return output || "Autocommit completed successfully."
24
+ },
25
+ })