fiberpath 0.7.1__tar.gz → 0.7.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 (358) hide show
  1. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/actions/setup-node/action.yml +1 -1
  2. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/actions/setup-python/action.yml +2 -2
  3. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/actions/setup-rust/action.yml +1 -1
  4. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/backend-ci.yml +3 -3
  5. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/ci-check.yml +3 -1
  6. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/dependency-audit.yml +3 -3
  7. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/docs-ci.yml +1 -1
  8. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/docs-deploy.yml +1 -1
  9. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/gui-ci.yml +3 -3
  10. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/gui-e2e-smoke.yml +1 -1
  11. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/gui-packaging.yml +2 -2
  12. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/workflows/release.yml +4 -4
  13. {fiberpath-0.7.1 → fiberpath-0.7.2}/CHANGELOG.md +44 -0
  14. {fiberpath-0.7.1 → fiberpath-0.7.2}/PKG-INFO +8 -6
  15. {fiberpath-0.7.1 → fiberpath-0.7.2}/README.md +6 -5
  16. {fiberpath-0.7.1 → fiberpath-0.7.2}/TODO.md +2 -0
  17. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/architecture/overview.md +1 -2
  18. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/guides/wind-format.md +2 -2
  19. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/index.md +8 -8
  20. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/execution/marlin.py +30 -65
  21. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/planning/layer_strategies.py +1 -12
  22. fiberpath-0.7.2/fiberpath_api/main.py +34 -0
  23. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/path_policy.py +30 -10
  24. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/routes/stream.py +5 -1
  25. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/interactive.py +21 -42
  26. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/package-lock.json +406 -369
  27. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/package.json +18 -18
  28. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/Cargo.lock +208 -84
  29. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/Cargo.toml +2 -2
  30. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/src/main.rs +94 -23
  31. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/tauri.conf.json +1 -1
  32. {fiberpath-0.7.1 → fiberpath-0.7.2}/pyproject.toml +2 -2
  33. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/freeze_cli.py +0 -4
  34. fiberpath-0.7.2/tests/api/test_path_policy.py +247 -0
  35. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/api/test_plan_route.py +49 -8
  36. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/api/test_simulate_route.py +27 -9
  37. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/api/test_stream_route_errors.py +11 -0
  38. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/execution/test_marlin_streamer.py +69 -0
  39. {fiberpath-0.7.1 → fiberpath-0.7.2}/uv.lock +15 -13
  40. fiberpath-0.7.1/examples/complex_surface/README.md +0 -3
  41. fiberpath-0.7.1/fiberpath/geometry/__init__.py +0 -13
  42. fiberpath-0.7.1/fiberpath/geometry/curves.py +0 -16
  43. fiberpath-0.7.1/fiberpath/geometry/intersections.py +0 -23
  44. fiberpath-0.7.1/fiberpath/geometry/surfaces.py +0 -17
  45. fiberpath-0.7.1/fiberpath_api/main.py +0 -21
  46. fiberpath-0.7.1/tests/geometry/test_surfaces.py +0 -6
  47. {fiberpath-0.7.1 → fiberpath-0.7.2}/.gitattributes +0 -0
  48. {fiberpath-0.7.1 → fiberpath-0.7.2}/.github/dependabot.yml +0 -0
  49. {fiberpath-0.7.1 → fiberpath-0.7.2}/.gitignore +0 -0
  50. {fiberpath-0.7.1 → fiberpath-0.7.2}/.pre-commit-config.yaml +0 -0
  51. {fiberpath-0.7.1 → fiberpath-0.7.2}/.vscode/extensions.json +0 -0
  52. {fiberpath-0.7.1 → fiberpath-0.7.2}/.vscode/launch.json +0 -0
  53. {fiberpath-0.7.1 → fiberpath-0.7.2}/.vscode/settings.json +0 -0
  54. {fiberpath-0.7.1 → fiberpath-0.7.2}/LICENSE +0 -0
  55. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/architecture/axis-system.md +0 -0
  56. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/development/ci-cd.md +0 -0
  57. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/development/contributing.md +0 -0
  58. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/development/dependency-policy.md +0 -0
  59. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/development/packaging.md +0 -0
  60. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/development/release-process.md +0 -0
  61. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/development/tooling.md +0 -0
  62. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/feature-backlog.md +0 -0
  63. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/getting-started.md +0 -0
  64. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/guides/axis-mapping.md +0 -0
  65. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/guides/marlin-streaming.md +0 -0
  66. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/guides/visualization.md +0 -0
  67. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/reference/api.md +0 -0
  68. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/reference/concepts.md +0 -0
  69. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/reference/planner-math.md +0 -0
  70. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/troubleshooting.md +0 -0
  71. {fiberpath-0.7.1 → fiberpath-0.7.2}/docs/vm-testing.md +0 -0
  72. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/README.md +0 -0
  73. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/multi_layer/README.md +0 -0
  74. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/multi_layer/input.wind +0 -0
  75. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/rocketry/AvBay(470mm)single.wind +0 -0
  76. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/rocketry/AvBay(470mm)triple.gcode +0 -0
  77. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/rocketry/AvBay(470mm)triple.wind +0 -0
  78. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/rocketry/CarbonMotorTube(1295mm).gcode +0 -0
  79. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/rocketry/CarbonMotorTube(1295mm).wind +0 -0
  80. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/rocketry/MainChute(585mm).gcode +0 -0
  81. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/rocketry/MainChute(585mm).wind +0 -0
  82. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/simple_cylinder/README.md +0 -0
  83. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/simple_cylinder/input.wind +0 -0
  84. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/sized_simple_cylinder/README.md +0 -0
  85. {fiberpath-0.7.1 → fiberpath-0.7.2}/examples/sized_simple_cylinder/input.wind +0 -0
  86. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/__init__.py +0 -0
  87. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/config/__init__.py +0 -0
  88. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/config/schemas.py +0 -0
  89. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/config/validator.py +0 -0
  90. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/execution/__init__.py +0 -0
  91. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/gcode/__init__.py +0 -0
  92. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/gcode/dialects.py +0 -0
  93. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/gcode/generator.py +0 -0
  94. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/math_utils.py +0 -0
  95. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/planning/__init__.py +0 -0
  96. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/planning/calculations.py +0 -0
  97. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/planning/exceptions.py +0 -0
  98. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/planning/helpers.py +0 -0
  99. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/planning/machine.py +0 -0
  100. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/planning/planner.py +0 -0
  101. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/planning/validators.py +0 -0
  102. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/simulation/__init__.py +0 -0
  103. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/simulation/simulator.py +0 -0
  104. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/visualization/__init__.py +0 -0
  105. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/visualization/export_json.py +0 -0
  106. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath/visualization/plotter.py +0 -0
  107. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/__init__.py +0 -0
  108. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/package-lock.json +0 -0
  109. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/routes/__init__.py +0 -0
  110. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/routes/plan.py +0 -0
  111. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/routes/simulate.py +0 -0
  112. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/routes/validate.py +0 -0
  113. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_api/schemas.py +0 -0
  114. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/__init__.py +0 -0
  115. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/__main__.py +0 -0
  116. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/main.py +0 -0
  117. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/output.py +0 -0
  118. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/plan.py +0 -0
  119. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/plot.py +0 -0
  120. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/simulate.py +0 -0
  121. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/stream.py +0 -0
  122. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_cli/validate.py +0 -0
  123. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/.gitignore +0 -0
  124. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/.nvmrc +0 -0
  125. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/.stylelintrc.json +0 -0
  126. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/README.md +0 -0
  127. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/bundled-cli/.gitkeep +0 -0
  128. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/architecture/cli-integration.md +0 -0
  129. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/architecture/state-management.md +0 -0
  130. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/architecture/streaming-state.md +0 -0
  131. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/architecture/tech-stack.md +0 -0
  132. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/development.md +0 -0
  133. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/guides/performance.md +0 -0
  134. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/guides/schemas.md +0 -0
  135. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/guides/styling.md +0 -0
  136. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/overview.md +0 -0
  137. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/reference/type-safety.md +0 -0
  138. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/docs/testing.md +0 -0
  139. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/generate-types.json +0 -0
  140. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/index.html +0 -0
  141. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/perf/bundle-baseline.json +0 -0
  142. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/schemas/wind-schema.json +0 -0
  143. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/scripts/check-bundle-budget.mjs +0 -0
  144. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/scripts/check-css-vars.mjs +0 -0
  145. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/App.tsx +0 -0
  146. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/CliHealthWarning.tsx +0 -0
  147. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/ErrorBoundary.test.tsx +0 -0
  148. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/ErrorBoundary.tsx +0 -0
  149. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/ErrorNotificationToast.tsx +0 -0
  150. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/MenuBar.tsx +0 -0
  151. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StatusBar.test.tsx +0 -0
  152. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StatusBar.tsx +0 -0
  153. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/ConnectionSection.css +0 -0
  154. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/ConnectionSection.test.tsx +0 -0
  155. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/ConnectionSection.tsx +0 -0
  156. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/FileStreamingSection.css +0 -0
  157. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/FileStreamingSection.test.tsx +0 -0
  158. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/FileStreamingSection.tsx +0 -0
  159. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/KeyboardShortcuts.css +0 -0
  160. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/KeyboardShortcuts.test.tsx +0 -0
  161. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/KeyboardShortcuts.tsx +0 -0
  162. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/ManualControlSection.css +0 -0
  163. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/ManualControlSection.test.tsx +0 -0
  164. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/ManualControlSection.tsx +0 -0
  165. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/StreamControls.css +0 -0
  166. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/StreamControls.tsx +0 -0
  167. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/StreamLog.css +0 -0
  168. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/StreamLog.test.tsx +0 -0
  169. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/StreamLog.tsx +0 -0
  170. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/StreamTab.css +0 -0
  171. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/StreamTab/StreamTab.tsx +0 -0
  172. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/TabBar.test.tsx +0 -0
  173. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/TabBar.tsx +0 -0
  174. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/Toast/ToastContainer.css +0 -0
  175. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/Toast/ToastContainer.test.tsx +0 -0
  176. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/Toast/ToastContainer.tsx +0 -0
  177. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/canvas/CanvasControls.test.tsx +0 -0
  178. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/canvas/CanvasControls.tsx +0 -0
  179. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/canvas/CenterCanvas.tsx +0 -0
  180. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/canvas/LayerScrubber.test.tsx +0 -0
  181. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/canvas/LayerScrubber.tsx +0 -0
  182. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/canvas/VisualizationCanvas.tsx +0 -0
  183. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/dialogs/AboutDialog.tsx +0 -0
  184. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/dialogs/BaseDialog.test.tsx +0 -0
  185. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/dialogs/BaseDialog.tsx +0 -0
  186. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/dialogs/CliUnavailableDialog.tsx +0 -0
  187. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/dialogs/DiagnosticsDialog.test.tsx +0 -0
  188. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/dialogs/DiagnosticsDialog.tsx +0 -0
  189. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/dialogs/ExportConfirmationDialog.tsx +0 -0
  190. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/editors/HelicalLayerEditor.test.tsx +0 -0
  191. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/editors/HelicalLayerEditor.tsx +0 -0
  192. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/editors/HoopLayerEditor.test.tsx +0 -0
  193. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/editors/HoopLayerEditor.tsx +0 -0
  194. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/editors/LayerNumericField.tsx +0 -0
  195. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/editors/SkipLayerEditor.test.tsx +0 -0
  196. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/editors/SkipLayerEditor.tsx +0 -0
  197. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/forms/MachineSettingsForm.test.tsx +0 -0
  198. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/forms/MachineSettingsForm.tsx +0 -0
  199. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/forms/MandrelForm.test.tsx +0 -0
  200. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/forms/MandrelForm.tsx +0 -0
  201. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/forms/TowForm.test.tsx +0 -0
  202. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/forms/TowForm.tsx +0 -0
  203. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/layers/LayerRow.test.tsx +0 -0
  204. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/layers/LayerRow.tsx +0 -0
  205. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/layers/LayerStack.test.tsx +0 -0
  206. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/layers/LayerStack.tsx +0 -0
  207. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/panels/BottomPanel.tsx +0 -0
  208. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/panels/LeftPanel.tsx +0 -0
  209. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/panels/RightPanel.tsx +0 -0
  210. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/panels/panels.test.tsx +0 -0
  211. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/tabs/MainTab.test.tsx +0 -0
  212. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/components/tabs/MainTab.tsx +0 -0
  213. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/contexts/CliHealthContext.test.tsx +0 -0
  214. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/contexts/CliHealthContext.tsx +0 -0
  215. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/contexts/ErrorNotificationContext.tsx +0 -0
  216. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/canvas/usePreviewGeneration.test.ts +0 -0
  217. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/canvas/usePreviewGeneration.ts +0 -0
  218. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/stream/useConnectionActions.test.ts +0 -0
  219. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/stream/useConnectionActions.ts +0 -0
  220. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/stream/useManualCommandActions.test.ts +0 -0
  221. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/stream/useManualCommandActions.ts +0 -0
  222. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/stream/useStreamingActions.test.ts +0 -0
  223. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/stream/useStreamingActions.ts +0 -0
  224. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useCliHealth.test.ts +0 -0
  225. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useCliHealth.ts +0 -0
  226. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useDebouncedValue.test.ts +0 -0
  227. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useDebouncedValue.ts +0 -0
  228. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useFileOperations.test.tsx +0 -0
  229. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useFileOperations.ts +0 -0
  230. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useKeyboardShortcuts.test.ts +0 -0
  231. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useKeyboardShortcuts.ts +0 -0
  232. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useMenubarInteractions.test.tsx +0 -0
  233. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useMenubarInteractions.ts +0 -0
  234. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useStreamEvents.ts +0 -0
  235. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useTheme.test.ts +0 -0
  236. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/hooks/useTheme.ts +0 -0
  237. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/layouts/MainLayout.test.tsx +0 -0
  238. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/layouts/MainLayout.tsx +0 -0
  239. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/commands.test.ts +0 -0
  240. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/commands.ts +0 -0
  241. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/constants.ts +0 -0
  242. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/fileOperations.test.ts +0 -0
  243. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/fileOperations.ts +0 -0
  244. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/helicalValidation.test.ts +0 -0
  245. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/helicalValidation.ts +0 -0
  246. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/marlin-api.test.ts +0 -0
  247. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/marlin-api.ts +0 -0
  248. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/menuConfig.test.ts +0 -0
  249. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/menuConfig.ts +0 -0
  250. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/numericFields.test.ts +0 -0
  251. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/numericFields.ts +0 -0
  252. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/recentFiles.test.ts +0 -0
  253. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/recentFiles.ts +0 -0
  254. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/retry.test.ts +0 -0
  255. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/retry.ts +0 -0
  256. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/schemas.test.ts +0 -0
  257. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/schemas.ts +0 -0
  258. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/streamFeedback.test.ts +0 -0
  259. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/streamFeedback.ts +0 -0
  260. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/tauri-types.ts +0 -0
  261. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/toastMessages.ts +0 -0
  262. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/validation.test.ts +0 -0
  263. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/validation.ts +0 -0
  264. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/validationErrors.test.ts +0 -0
  265. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/lib/validationErrors.ts +0 -0
  266. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/main.tsx +0 -0
  267. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/stores/projectStore.test.ts +0 -0
  268. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/stores/projectStore.ts +0 -0
  269. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/stores/streamStore.ts +0 -0
  270. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/stores/toastStore.test.ts +0 -0
  271. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/stores/toastStore.ts +0 -0
  272. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/buttons.css +0 -0
  273. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/canvas.css +0 -0
  274. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/dialogs.css +0 -0
  275. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/forms.css +0 -0
  276. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/index.css +0 -0
  277. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/layout.css +0 -0
  278. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/notifications.css +0 -0
  279. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/panels.css +0 -0
  280. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/reset.css +0 -0
  281. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/tabs.css +0 -0
  282. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/tokens.css +0 -0
  283. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/styles/typography.css +0 -0
  284. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/tests/integration/streamLifecycle.test.ts +0 -0
  285. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/tests/integration/workflows.test.ts +0 -0
  286. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/tests/renderWithProviders.tsx +0 -0
  287. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/tests/setup.ts +0 -0
  288. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/tests/storeUtils.ts +0 -0
  289. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/tests/tauriMocks.ts +0 -0
  290. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/types/components.ts +0 -0
  291. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/types/converters.test.ts +0 -0
  292. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/types/converters.ts +0 -0
  293. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/types/project.test.ts +0 -0
  294. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/types/project.ts +0 -0
  295. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src/types/wind-schema.ts +0 -0
  296. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/build.rs +0 -0
  297. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/capabilities/default.json +0 -0
  298. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/icons/128x128.png +0 -0
  299. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/icons/256x256.png +0 -0
  300. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/icons/32x32.png +0 -0
  301. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/icons/512x512.png +0 -0
  302. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/icons/icon.ico +0 -0
  303. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/src/cli_path.rs +0 -0
  304. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/src/cli_process.rs +0 -0
  305. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/src-tauri/src/marlin.rs +0 -0
  306. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/tsconfig.json +0 -0
  307. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/tsconfig.node.json +0 -0
  308. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/vite.config.ts +0 -0
  309. {fiberpath-0.7.1 → fiberpath-0.7.2}/fiberpath_gui/vitest.config.ts +0 -0
  310. {fiberpath-0.7.1 → fiberpath-0.7.2}/mkdocs.yml +0 -0
  311. {fiberpath-0.7.1 → fiberpath-0.7.2}/package-lock.json +0 -0
  312. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/ci/e2e-check-artifacts.ps1 +0 -0
  313. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/ci/e2e-check-artifacts.sh +0 -0
  314. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/ci/e2e-cli-smoke.ps1 +0 -0
  315. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/ci/e2e-cli-smoke.sh +0 -0
  316. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/ci/extract-package-runtime.ps1 +0 -0
  317. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/ci/extract-package-runtime.sh +0 -0
  318. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/ci/find-bundled-cli.ps1 +0 -0
  319. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/ci/find-bundled-cli.sh +0 -0
  320. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/export_schema.py +0 -0
  321. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/generate_schema.py +0 -0
  322. {fiberpath-0.7.1 → fiberpath-0.7.2}/scripts/sync_gui_docs.py +0 -0
  323. {fiberpath-0.7.1 → fiberpath-0.7.2}/setup.cfg +0 -0
  324. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/api/test_stream_route.py +0 -0
  325. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cli/test_axis_format.py +0 -0
  326. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cli/test_cli_json.py +0 -0
  327. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cli/test_cli_smoke.py +0 -0
  328. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cli/test_stream_command.py +0 -0
  329. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/config/__init__.py +0 -0
  330. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/config/test_validator.py +0 -0
  331. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/inputs/helical-balanced.wind +0 -0
  332. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/inputs/simple-hoop.wind +0 -0
  333. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/inputs/skip-bias.wind +0 -0
  334. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/outputs/helical-balanced/output.gcode +0 -0
  335. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/outputs/helical-balanced/preview.png +0 -0
  336. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/outputs/simple-hoop/output.gcode +0 -0
  337. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/outputs/simple-hoop/preview.png +0 -0
  338. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/outputs/skip-bias/output.gcode +0 -0
  339. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/cyclone_reference_runs/outputs/skip-bias/preview.png +0 -0
  340. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/gcode/test_dialects.py +0 -0
  341. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/gcode/test_generator.py +0 -0
  342. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/_generate_fixtures.py +0 -0
  343. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/fixtures/helical_layer.gcode +0 -0
  344. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/fixtures/hoop_layer.gcode +0 -0
  345. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/fixtures/hoop_only_program.gcode +0 -0
  346. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/fixtures/skip_layer.gcode +0 -0
  347. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/test_axis_mapping.py +0 -0
  348. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/test_helpers_machine.py +0 -0
  349. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/test_layer_strategies.py +0 -0
  350. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/test_planner_smoke.py +0 -0
  351. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/planning/test_validators.py +0 -0
  352. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/simulation/test_simulator.py +0 -0
  353. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/simulation/test_simulator_axis_detection.py +0 -0
  354. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/tauri/test_marlin_integration.py +0 -0
  355. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/tauri/test_port_discovery.py +0 -0
  356. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/visualization/test_export_json.py +0 -0
  357. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/visualization/test_plotter.py +0 -0
  358. {fiberpath-0.7.1 → fiberpath-0.7.2}/tests/visualization/test_plotter_axis_detection.py +0 -0
@@ -15,7 +15,7 @@ runs:
15
15
  using: composite
16
16
  steps:
17
17
  - name: Set up Node.js
18
- uses: actions/setup-node@v4
18
+ uses: actions/setup-node@v5
19
19
  with:
20
20
  node-version: ${{ inputs.node-version }}
21
21
  cache: npm
@@ -24,13 +24,13 @@ runs:
24
24
  python-version: ${{ inputs.python-version }}
25
25
 
26
26
  - name: Set up uv
27
- uses: astral-sh/setup-uv@v3
27
+ uses: astral-sh/setup-uv@v8.2.0
28
28
  with:
29
29
  enable-cache: true
30
30
  cache-dependency-glob: "pyproject.toml"
31
31
 
32
32
  - name: Cache Python virtual environment
33
- uses: actions/cache@v4
33
+ uses: actions/cache@v5
34
34
  with:
35
35
  path: .venv
36
36
  key: venv-${{ runner.os }}-${{ inputs.python-version }}-${{ hashFiles('pyproject.toml') }}-${{ inputs.cache-key-suffix }}
@@ -18,7 +18,7 @@ runs:
18
18
  uses: dtolnay/rust-toolchain@stable
19
19
 
20
20
  - name: Cache cargo artifacts
21
- uses: actions/cache@v4
21
+ uses: actions/cache@v5
22
22
  with:
23
23
  path: |
24
24
  ~/.cargo/bin
@@ -13,7 +13,7 @@ jobs:
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
15
  - name: Checkout repository
16
- uses: actions/checkout@v6
16
+ uses: actions/checkout@v7
17
17
 
18
18
  - name: Setup Python environment
19
19
  uses: ./.github/actions/setup-python
@@ -39,7 +39,7 @@ jobs:
39
39
  os: [ubuntu-latest, macos-latest, windows-latest]
40
40
  steps:
41
41
  - name: Checkout repository
42
- uses: actions/checkout@v6
42
+ uses: actions/checkout@v7
43
43
 
44
44
  - name: Setup Python environment
45
45
  uses: ./.github/actions/setup-python
@@ -52,7 +52,7 @@ jobs:
52
52
 
53
53
  - name: Upload coverage
54
54
  if: matrix.os == 'ubuntu-latest'
55
- uses: codecov/codecov-action@v6
55
+ uses: codecov/codecov-action@v7
56
56
  with:
57
57
  files: ./coverage.xml
58
58
  flags: backend
@@ -15,6 +15,7 @@ on:
15
15
  - "setup.cfg"
16
16
  - "mkdocs.yml"
17
17
  - "README.md"
18
+ - "CHANGELOG.md"
18
19
  - "scripts/**"
19
20
  - ".github/workflows/**"
20
21
  - ".github/actions/**"
@@ -32,6 +33,7 @@ on:
32
33
  - "setup.cfg"
33
34
  - "mkdocs.yml"
34
35
  - "README.md"
36
+ - "CHANGELOG.md"
35
37
  - "scripts/**"
36
38
  - ".github/workflows/**"
37
39
  - ".github/actions/**"
@@ -50,7 +52,7 @@ jobs:
50
52
  docs: ${{ steps.filter.outputs.docs }}
51
53
  steps:
52
54
  - name: Checkout repository
53
- uses: actions/checkout@v6
55
+ uses: actions/checkout@v7
54
56
 
55
57
  - name: Detect changed areas
56
58
  id: filter
@@ -18,7 +18,7 @@ jobs:
18
18
  runs-on: ubuntu-latest
19
19
  steps:
20
20
  - name: Checkout repository
21
- uses: actions/checkout@v6
21
+ uses: actions/checkout@v7
22
22
 
23
23
  - name: Setup Python environment
24
24
  uses: ./.github/actions/setup-python
@@ -46,7 +46,7 @@ jobs:
46
46
  working-directory: fiberpath_gui
47
47
  steps:
48
48
  - name: Checkout repository
49
- uses: actions/checkout@v6
49
+ uses: actions/checkout@v7
50
50
 
51
51
  - name: Setup Node.js environment
52
52
  uses: ./.github/actions/setup-node
@@ -69,7 +69,7 @@ jobs:
69
69
  working-directory: fiberpath_gui/src-tauri
70
70
  steps:
71
71
  - name: Checkout repository
72
- uses: actions/checkout@v6
72
+ uses: actions/checkout@v7
73
73
 
74
74
  - name: Setup Rust environment
75
75
  uses: ./.github/actions/setup-rust
@@ -13,7 +13,7 @@ jobs:
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
15
  - name: Checkout repository
16
- uses: actions/checkout@v6
16
+ uses: actions/checkout@v7
17
17
 
18
18
  - name: Setup Python environment
19
19
  uses: ./.github/actions/setup-python
@@ -29,7 +29,7 @@ jobs:
29
29
  runs-on: ubuntu-latest
30
30
  steps:
31
31
  - name: Checkout repository
32
- uses: actions/checkout@v6
32
+ uses: actions/checkout@v7
33
33
 
34
34
  - name: Configure GitHub Pages
35
35
  id: pages
@@ -16,7 +16,7 @@ jobs:
16
16
  working-directory: fiberpath_gui
17
17
  steps:
18
18
  - name: Checkout repository
19
- uses: actions/checkout@v6
19
+ uses: actions/checkout@v7
20
20
 
21
21
  - name: Setup Node.js environment
22
22
  uses: ./.github/actions/setup-node
@@ -44,7 +44,7 @@ jobs:
44
44
  working-directory: fiberpath_gui
45
45
  steps:
46
46
  - name: Checkout repository
47
- uses: actions/checkout@v6
47
+ uses: actions/checkout@v7
48
48
 
49
49
  - name: Setup Node.js environment
50
50
  uses: ./.github/actions/setup-node
@@ -56,7 +56,7 @@ jobs:
56
56
  run: npm run test:coverage
57
57
 
58
58
  - name: Upload coverage
59
- uses: codecov/codecov-action@v6
59
+ uses: codecov/codecov-action@v7
60
60
  with:
61
61
  files: ./fiberpath_gui/coverage/lcov.info
62
62
  flags: gui
@@ -37,7 +37,7 @@ jobs:
37
37
 
38
38
  steps:
39
39
  - name: Checkout repository
40
- uses: actions/checkout@v6
40
+ uses: actions/checkout@v7
41
41
 
42
42
  - name: Download packaged GUI artifact
43
43
  uses: actions/download-artifact@v8
@@ -51,7 +51,7 @@ jobs:
51
51
  os: [windows-latest, macos-latest, ubuntu-latest]
52
52
  steps:
53
53
  - name: Checkout repository
54
- uses: actions/checkout@v6
54
+ uses: actions/checkout@v7
55
55
 
56
56
  - name: Set up Python (no cache for freeze)
57
57
  uses: actions/setup-python@v6
@@ -130,7 +130,7 @@ jobs:
130
130
  working-directory: fiberpath_gui
131
131
  steps:
132
132
  - name: Checkout repository
133
- uses: actions/checkout@v6
133
+ uses: actions/checkout@v7
134
134
 
135
135
  - name: Download frozen CLI artifact
136
136
  uses: actions/download-artifact@v8
@@ -25,7 +25,7 @@ jobs:
25
25
  tag: ${{ steps.check.outputs.tag }}
26
26
  steps:
27
27
  - name: Checkout repository
28
- uses: actions/checkout@v6
28
+ uses: actions/checkout@v7
29
29
  with:
30
30
  fetch-depth: 0
31
31
 
@@ -69,7 +69,7 @@ jobs:
69
69
  runs-on: ubuntu-latest
70
70
  steps:
71
71
  - name: Checkout repository
72
- uses: actions/checkout@v6
72
+ uses: actions/checkout@v7
73
73
 
74
74
  - name: Create SBOM output directory
75
75
  run: mkdir -p sbom
@@ -109,7 +109,7 @@ jobs:
109
109
  runs-on: ubuntu-latest
110
110
  steps:
111
111
  - name: Checkout repository
112
- uses: actions/checkout@v6
112
+ uses: actions/checkout@v7
113
113
 
114
114
  - name: Download SBOM artifacts
115
115
  uses: actions/download-artifact@v8
@@ -249,7 +249,7 @@ jobs:
249
249
  url: https://pypi.org/project/fiberpath/
250
250
  steps:
251
251
  - name: Checkout repository
252
- uses: actions/checkout@v6
252
+ uses: actions/checkout@v7
253
253
 
254
254
  - name: Setup Python environment
255
255
  uses: ./.github/actions/setup-python
@@ -8,6 +8,50 @@ The format is based on Keep a Changelog, and this project follows semantic versi
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.7.2] - 2026-06-24
12
+
13
+ ### Security
14
+
15
+ - Hardened API path policy (`enforce_input_path_policy`) to reject absolute paths (POSIX `/`, Windows drive `C:\`, UNC `\\`), NUL bytes, `..` traversal segments, and empty/whitespace inputs with 400 before any filesystem access. Resolved CodeQL alert #9 ("Uncontrolled data used in path expression").
16
+ - Patched `starlette` CVE-2026-48710 (BadHost) by upgrading to a fixed release.
17
+ - Cleared the GUI dev-tree advisories `js-yaml` (GHSA-h67p-54hq-rp68, merge-key DoS → 4.2.0) and `undici` (GHSA-vmh5-mc38-953g and related → 7.28.0). Both are dev-only; the shipped application is unaffected.
18
+ - Bumped `rand` to 0.8.6 (GHSA-cq8v-f236-94qc). A residual, build-time-only `rand` 0.7.3 is pinned upstream in the Tauri toolchain with no available fix and is tracked in `TODO.md`.
19
+
20
+ ### Changed
21
+
22
+ - API file endpoints now require relative paths; the configured `FIBERPATH_API_ALLOWED_ROOTS` controls which directories they resolve against.
23
+ - Rebuilt user-supplied paths from validated components (`Path(*parts)`) instead of passing raw input to `Path()`, breaking the taint chain for static analysis.
24
+ - API plan/simulate routes map core-engine input errors (`PlanningError`, `SimulationError`) to HTTP 400 via centralized exception handlers instead of surfacing them as 500s, and `/stream` caps the G-code payload at 10 MB.
25
+ - Routed streaming `[DEBUG]`/`[ERROR]` output through the `logging` module instead of `print(..., file=sys.stderr)`, so a normal run is quiet by default while the stdout JSON protocol is unchanged.
26
+ - Upgraded Tauri to 2.11 (Cargo + npm aligned) and refreshed CI actions.
27
+
28
+ ### Fixed
29
+
30
+ - `MarlinStreamer` transport guards now raise `StreamError` instead of `assert`, so they behave identically under `python -O` rather than degrading to a `None` dereference.
31
+ - Tauri `plot_definition`, `plot_preview`, and `validate_wind_definition` no longer leak temporary `.wind`/`.gcode`/`.png` files on error paths; an RAII guard removes them on every exit.
32
+
33
+ ### Removed
34
+
35
+ - Removed the unused `fiberpath/geometry/` stub module (dead code advertising non-cylindrical capability that does not exist; the roadmap is documented instead).
36
+ - Removed dead branches in `planning/layer_strategies.py` (a no-op `build_layer_summary` conditional and an unreachable circuit-divisibility guard superseded by upstream validation).
37
+
38
+ ### Added
39
+
40
+ - `tests/api/test_path_policy.py` — 18 dedicated tests covering all rejected input classes (NUL bytes, POSIX absolute, Windows drive/UNC, `..` traversal with forward and backslash separators, empty/whitespace, absolute-inside-root) and accepted cases (bare filename, nested relative, multiple roots, single-dot normalisation).
41
+ - Integration-level rejection tests in `test_plan_route.py` and `test_simulate_route.py` for absolute-path and traversal inputs.
42
+ - Tests for API error-to-4xx mapping, `MarlinStreamer` transport guards (including a `python -O` subprocess check), streaming logging staying quiet by default, and the Tauri temp-file cleanup guard.
43
+
44
+ ### Documentation
45
+
46
+ - Aligned the README and architecture docs with the implemented scope (cylindrical mandrels; hoop/helical/skip layers), framed geodesic/curved-surface support as roadmap, and removed the stale `examples/complex_surface/` placeholder.
47
+
48
+ ### Dependencies
49
+
50
+ - Tooling/CI: `astral-sh/setup-uv` v8.2.0 (Node 24), `codecov/codecov-action` v7, `actions/checkout` v7.
51
+ - Python (uv): `starlette` 1.3.1, `urllib3` 2.7.0, `idna` 3.15, `pymdown-extensions` 10.21.3.
52
+ - npm: `@types/node` 26, `lucide-react`, `fast-uri` 3.1.2, plus the npm prod and dev minor-patch dependency groups.
53
+ - Cargo: the cargo minor-patch dependency groups.
54
+
11
55
  ## [0.7.1] - 2026-04-16
12
56
 
13
57
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fiberpath
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: Modern filament winding planner, simulator, and G-code toolkit.
5
5
  Author: Cameron K. Brooks
6
6
  License: GNU AFFERO GENERAL PUBLIC LICENSE
@@ -680,6 +680,7 @@ Requires-Dist: rich>=13.7
680
680
  Requires-Dist: typer>=0.12
681
681
  Provides-Extra: api
682
682
  Requires-Dist: fastapi>=0.110; extra == 'api'
683
+ Requires-Dist: starlette>=1.0.1; extra == 'api'
683
684
  Requires-Dist: uvicorn[standard]>=0.24; extra == 'api'
684
685
  Provides-Extra: cli
685
686
  Requires-Dist: rich>=13.7; extra == 'cli'
@@ -708,7 +709,7 @@ Description-Content-Type: text/markdown
708
709
 
709
710
  **Plan, simulate, and manufacture composite parts with precision fiber winding.**
710
711
 
711
- [![Version](https://img.shields.io/badge/version-0.7.0-4c7284)](https://github.com/CameronBrooks11/fiberpath/releases)
712
+ [![Version](https://img.shields.io/badge/version-0.7.2-4c7284)](https://github.com/CameronBrooks11/fiberpath/releases)
712
713
  [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-00695C.svg)](LICENSE)
713
714
  [![Backend CI](https://img.shields.io/github/actions/workflow/status/CameronBrooks11/fiberpath/backend-ci.yml?branch=main&label=Backend%20CI&logo=python&logoColor=white)](https://github.com/CameronBrooks11/fiberpath/actions/workflows/backend-ci.yml)
714
715
  [![GUI CI](https://img.shields.io/github/actions/workflow/status/CameronBrooks11/fiberpath/gui-ci.yml?branch=main&label=GUI%20CI&logo=react&logoColor=white)](https://github.com/CameronBrooks11/fiberpath/actions/workflows/gui-ci.yml)
@@ -729,12 +730,12 @@ Description-Content-Type: text/markdown
729
730
 
730
731
  FiberPath automates the complex process of **filament winding**—wrapping fiber-reinforced composites around mandrels to create lightweight, high-strength cylindrical parts like pressure vessels, pipes, and aerospace structures.
731
732
 
732
- Design multi-layer winding patterns in a visual interface, simulate the full manufacturing process, and stream G-code directly to Marlin-based hardware. FiberPath handles the mathematics of geodesic paths, fiber tension calculations, and machine kinematics so you can focus on part design.
733
+ Design multi-layer winding patterns in a visual interface, simulate the full manufacturing process, and stream G-code directly to Marlin-based hardware. FiberPath handles the winding mathematics hoop and helical path generation, tow coverage, and machine kinematics for cylindrical mandrels — so you can focus on part design.
733
734
 
734
735
  ### Features
735
736
 
736
737
  - **Visual Layer Editor** – Design winding patterns with live preview
737
- - **Geodesic Path Planning** – Automatic computation of stable fiber trajectories
738
+ - **Winding Path Planning** – Automatic hoop, helical, and skip pattern generation for cylindrical mandrels
738
739
  - **Hardware Simulation** – Validate motion before manufacturing
739
740
  - **Direct Machine Control** – Stream G-code to Marlin controllers with pause/resume
740
741
  - **XAB-Native Axis Output** – Standardized rotational-axis output with clear logical axis mapping
@@ -742,6 +743,8 @@ Design multi-layer winding patterns in a visual interface, simulate the full man
742
743
  - **Command-Line Tools** – Scriptable workflows for automation and CI/CD
743
744
  - **Comprehensive Documentation** – Architecture guides, examples, and API reference
744
745
 
746
+ > **Scope & roadmap:** FiberPath currently plans **cylindrical mandrels** with hoop, helical, and skip layers. Non-cylindrical (geodesic) surface support — including tapered and custom mandrels — is planned but not yet implemented.
747
+
745
748
  ## Quick Start
746
749
 
747
750
  ### Option 1: Desktop GUI (Recommended)
@@ -902,10 +905,9 @@ FiberPath consists of four coordinated components:
902
905
 
903
906
  ┌─────────────────────────────────────────────────┐
904
907
  │ Core Engine (Python) │
905
- │ • Geodesic path planning
908
+ │ • Winding path planning (hoop/helical/skip)
906
909
  │ • Layer strategies │
907
910
  │ • G-code generation │
908
- │ • Geometry utilities │
909
911
  └─────────────────────────────────────────────────┘
910
912
 
911
913
  │ imports
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Plan, simulate, and manufacture composite parts with precision fiber winding.**
6
6
 
7
- [![Version](https://img.shields.io/badge/version-0.7.0-4c7284)](https://github.com/CameronBrooks11/fiberpath/releases)
7
+ [![Version](https://img.shields.io/badge/version-0.7.2-4c7284)](https://github.com/CameronBrooks11/fiberpath/releases)
8
8
  [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-00695C.svg)](LICENSE)
9
9
  [![Backend CI](https://img.shields.io/github/actions/workflow/status/CameronBrooks11/fiberpath/backend-ci.yml?branch=main&label=Backend%20CI&logo=python&logoColor=white)](https://github.com/CameronBrooks11/fiberpath/actions/workflows/backend-ci.yml)
10
10
  [![GUI CI](https://img.shields.io/github/actions/workflow/status/CameronBrooks11/fiberpath/gui-ci.yml?branch=main&label=GUI%20CI&logo=react&logoColor=white)](https://github.com/CameronBrooks11/fiberpath/actions/workflows/gui-ci.yml)
@@ -25,12 +25,12 @@
25
25
 
26
26
  FiberPath automates the complex process of **filament winding**—wrapping fiber-reinforced composites around mandrels to create lightweight, high-strength cylindrical parts like pressure vessels, pipes, and aerospace structures.
27
27
 
28
- Design multi-layer winding patterns in a visual interface, simulate the full manufacturing process, and stream G-code directly to Marlin-based hardware. FiberPath handles the mathematics of geodesic paths, fiber tension calculations, and machine kinematics so you can focus on part design.
28
+ Design multi-layer winding patterns in a visual interface, simulate the full manufacturing process, and stream G-code directly to Marlin-based hardware. FiberPath handles the winding mathematics hoop and helical path generation, tow coverage, and machine kinematics for cylindrical mandrels — so you can focus on part design.
29
29
 
30
30
  ### Features
31
31
 
32
32
  - **Visual Layer Editor** – Design winding patterns with live preview
33
- - **Geodesic Path Planning** – Automatic computation of stable fiber trajectories
33
+ - **Winding Path Planning** – Automatic hoop, helical, and skip pattern generation for cylindrical mandrels
34
34
  - **Hardware Simulation** – Validate motion before manufacturing
35
35
  - **Direct Machine Control** – Stream G-code to Marlin controllers with pause/resume
36
36
  - **XAB-Native Axis Output** – Standardized rotational-axis output with clear logical axis mapping
@@ -38,6 +38,8 @@ Design multi-layer winding patterns in a visual interface, simulate the full man
38
38
  - **Command-Line Tools** – Scriptable workflows for automation and CI/CD
39
39
  - **Comprehensive Documentation** – Architecture guides, examples, and API reference
40
40
 
41
+ > **Scope & roadmap:** FiberPath currently plans **cylindrical mandrels** with hoop, helical, and skip layers. Non-cylindrical (geodesic) surface support — including tapered and custom mandrels — is planned but not yet implemented.
42
+
41
43
  ## Quick Start
42
44
 
43
45
  ### Option 1: Desktop GUI (Recommended)
@@ -198,10 +200,9 @@ FiberPath consists of four coordinated components:
198
200
 
199
201
  ┌─────────────────────────────────────────────────┐
200
202
  │ Core Engine (Python) │
201
- │ • Geodesic path planning
203
+ │ • Winding path planning (hoop/helical/skip)
202
204
  │ • Layer strategies │
203
205
  │ • G-code generation │
204
- │ • Geometry utilities │
205
206
  └─────────────────────────────────────────────────┘
206
207
 
207
208
  │ imports
@@ -18,4 +18,6 @@
18
18
 
19
19
  - [ ] Track Dependabot moderate alert #3 (GHSA-wrw7-89jp-8q8g / glib). Current Tauri GTK stack pins `glib` 0.18.x (`^0.18` via `gtk`), so patched `glib` 0.20.0 cannot be adopted yet. Do not block a release solely for this; re-check after upstream Tauri/GTK dependency line moves to non-vulnerable glib.
20
20
 
21
+ - [ ] Track Dependabot low alert (GHSA-cq8v-f236-94qc / `rand`). The `rand 0.8.x` instance was patched to 0.8.6; a residual `rand 0.7.3` remains, pinned via `phf_generator 0.8.0` (`^0.7`) in Tauri's `tauri-build` → `kuchikiki` → `selectors`/`cssparser` chain. It is a **build-time-only** dependency (CSS-parser codegen), not in the shipped runtime, and the advisory (runtime `rand::rng()` soundness) does not apply to it — effectively zero risk. No 0.7.x fix exists; re-check after the Tauri `tauri-utils`/`kuchikiki` dependency line moves off `phf 0.8`. Do not block a release for this.
22
+
21
23
  - [ ] Manual cross-platform validation (waived for v0.6.0, required before v1.0 or first public release): Linux `.deb`/`.AppImage` (Ubuntu 22.04, Debian 12, Fedora 39) and macOS `.dmg` (Intel + Apple Silicon) install, bundled CLI discovery, full workflow (validate → plan → simulate → visualize), serial port, file ops, upgrade, and uninstall. See `planning/roadmap-v6.md` Phases 1 & 2 for the full checklist.
@@ -24,7 +24,7 @@ together and where to extend them.
24
24
  └──────────────────────┘
25
25
  ```
26
26
 
27
- - **Core Engine (`fiberpath/`)** – Immutable planners, geometry helpers, machine abstractions, and
27
+ - **Core Engine (`fiberpath/`)** – Immutable planners, machine abstractions, and
28
28
  G-code emitters. The modules are designed to run without side effects so they can be imported from both CLI and API layers.
29
29
  - **Interface Layer** – `fiberpath_cli` hosts the Typer commands, while `fiberpath_api` turns the
30
30
  same operations into REST endpoints. The desktop GUI wraps the CLI and communicates via Tauri IPC
@@ -35,7 +35,6 @@ together and where to extend them.
35
35
  | Module | Responsibility | Notes |
36
36
  | ---------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
37
37
  | `fiberpath.planning` | Parses `.wind` files, validates machine/layer constraints, produces command sequences. | `PlanOptions` governs verbosity and optional advanced dialect override. |
38
- | `fiberpath.geometry` | Curve/surface math shared between planner and simulator. | Pure functions make it safe for reuse. |
39
38
  | `fiberpath.gcode` | Dialects and writers for Marlin-style controllers. | Extend here when adding custom headers or commands. Axis mapping configured via `MarlinDialect`. |
40
39
  | `fiberpath.simulation` | Time/distance estimations based on planned feed rates. | Feeds CLI `simulate` summaries. Axis-aware for proper rotational calculations. |
41
40
  | `fiberpath.execution` | PySerial streaming, pause/resume, and progress tracking. | Used by CLI streaming and API `/stream`. |
@@ -178,7 +178,7 @@ A helical layer winds at a specified angle, creating a spiral pattern around the
178
178
 
179
179
  - Pressure vessel cylindrical sections
180
180
  - Angled reinforcement (±45° for shear resistance)
181
- - Complex geodesic patterns
181
+ - Angled helical reinforcement patterns
182
182
 
183
183
  ### Skip Layer
184
184
 
@@ -202,7 +202,7 @@ A skip layer rotates the mandrel without winding, allowing for pattern repositio
202
202
 
203
203
  - Pattern alignment between layers
204
204
  - Creating intentional gaps
205
- - Repositioning for non-geodesic patterns
205
+ - Repositioning between layers
206
206
 
207
207
  ## Validation Rules
208
208
 
@@ -36,7 +36,7 @@ hide:
36
36
 
37
37
  ---
38
38
 
39
- **Latest Release:** [v0.7.0](https://github.com/CameronBrooks11/fiberpath/releases/latest){ target=_blank }
39
+ **Latest Release:** [v0.7.2](https://github.com/CameronBrooks11/fiberpath/releases/latest){ target=_blank }
40
40
 
41
41
  - **Desktop GUI** – Windows, macOS, Linux installers (no Python required)
42
42
  - **Python Package** – `pip install fiberpath`
@@ -44,18 +44,18 @@ hide:
44
44
 
45
45
  [:octicons-arrow-right-24: Installation Guide](getting-started.md)
46
46
 
47
- - :material-new-box:{ .lg .middle } **What's New in v0.7.0**
47
+ - :material-new-box:{ .lg .middle } **What's New in v0.7.2**
48
48
 
49
49
  ---
50
50
 
51
- XAB cutover and production-readiness hardening:
51
+ Code-quality, hardening, and dependency-refresh pass:
52
52
 
53
- - Removed legacy XYZ axis-format paths; built-in planning, API, and GUI export now target XAB output
54
- - Simplified GUI surfaces further by removing dead style/component residue and tightening editor/layout boundaries
55
- - Added bundle-budget CI enforcement and refreshed contributor tooling standards for cleaner release gates
56
- - Expanded regression coverage for axis mapping, layer strategy fixtures, and visualization signatures
53
+ - API plan/simulate errors now return clear 4xx responses instead of 500s, and streaming diagnostics moved to the `logging` module
54
+ - Hardened Marlin streaming guards (`StreamError` instead of `assert`) and fixed temporary-file cleanup in the desktop backend
55
+ - Removed dead code (unused geometry module, redundant planner branches) and aligned docs with the cylindrical planning scope
56
+ - Security & dependency refresh: starlette BadHost CVE, js-yaml/undici/rand advisories, and Tauri 2.11
57
57
 
58
- Builds on the v0.6.x cleanup track and establishes the v0.7 baseline.
58
+ Builds on the v0.7 baseline with reliability and maintainability fixes.
59
59
 
60
60
  [:octicons-arrow-right-24: Marlin Streaming Guide](guides/marlin-streaming.md)
61
61