fiberpath 0.6.1__tar.gz → 0.7.0__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 (337) hide show
  1. {fiberpath-0.6.1 → fiberpath-0.7.0}/.gitattributes +6 -1
  2. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/gui-ci.yml +11 -4
  3. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/gui-packaging.yml +1 -1
  4. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/release.yml +5 -5
  5. {fiberpath-0.6.1 → fiberpath-0.7.0}/.gitignore +3 -3
  6. fiberpath-0.7.0/.pre-commit-config.yaml +36 -0
  7. {fiberpath-0.6.1 → fiberpath-0.7.0}/.vscode/extensions.json +1 -1
  8. fiberpath-0.7.0/.vscode/launch.json +35 -0
  9. {fiberpath-0.6.1 → fiberpath-0.7.0}/CHANGELOG.md +44 -7
  10. {fiberpath-0.6.1 → fiberpath-0.7.0}/PKG-INFO +14 -21
  11. {fiberpath-0.6.1 → fiberpath-0.7.0}/README.md +13 -20
  12. {fiberpath-0.6.1 → fiberpath-0.7.0}/TODO.md +1 -5
  13. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/architecture/axis-system.md +5 -34
  14. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/architecture/overview.md +6 -10
  15. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/development/contributing.md +2 -1
  16. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/development/dependency-policy.md +1 -1
  17. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/development/packaging.md +1 -1
  18. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/development/release-process.md +10 -2
  19. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/development/tooling.md +20 -6
  20. fiberpath-0.6.1/planning/roadmap-backlog.md → fiberpath-0.7.0/docs/feature-backlog.md +5 -5
  21. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/getting-started.md +3 -5
  22. fiberpath-0.7.0/docs/guides/axis-mapping.md +49 -0
  23. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/index.md +9 -9
  24. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/reference/api.md +1 -4
  25. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/reference/concepts.md +2 -3
  26. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/reference/planner-math.md +3 -3
  27. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/troubleshooting.md +3 -3
  28. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/rocketry/AvBay(470mm)single.wind +1 -1
  29. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/rocketry/CarbonMotorTube(1295mm).wind +1 -1
  30. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/rocketry/MainChute(585mm).wind +1 -1
  31. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/gcode/dialects.py +3 -7
  32. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/planning/machine.py +3 -6
  33. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/simulation/simulator.py +9 -10
  34. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/visualization/plotter.py +8 -9
  35. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/routes/plan.py +2 -5
  36. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/schemas.py +0 -7
  37. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/plan.py +4 -19
  38. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/.gitignore +1 -1
  39. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/architecture/cli-integration.md +4 -13
  40. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/architecture/state-management.md +1 -3
  41. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/development.md +4 -3
  42. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/guides/performance.md +18 -0
  43. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/guides/schemas.md +7 -7
  44. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/guides/styling.md +1 -1
  45. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/overview.md +2 -2
  46. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/reference/type-safety.md +9 -9
  47. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/testing.md +3 -3
  48. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/package-lock.json +2 -2
  49. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/package.json +2 -1
  50. fiberpath-0.7.0/fiberpath_gui/perf/bundle-baseline.json +11 -0
  51. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/schemas/wind-schema.json +1 -1
  52. fiberpath-0.7.0/fiberpath_gui/scripts/check-bundle-budget.mjs +141 -0
  53. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/App.tsx +23 -63
  54. fiberpath-0.7.0/fiberpath_gui/src/components/MenuBar.tsx +249 -0
  55. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StatusBar.tsx +1 -1
  56. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/ConnectionSection.tsx +5 -128
  57. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/FileStreamingSection.css +13 -4
  58. fiberpath-0.7.0/fiberpath_gui/src/components/StreamTab/FileStreamingSection.tsx +165 -0
  59. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/ManualControlSection.tsx +11 -75
  60. fiberpath-0.7.0/fiberpath_gui/src/components/canvas/VisualizationCanvas.tsx +211 -0
  61. fiberpath-0.7.0/fiberpath_gui/src/components/dialogs/AboutDialog.tsx +81 -0
  62. fiberpath-0.7.0/fiberpath_gui/src/components/dialogs/BaseDialog.tsx +52 -0
  63. fiberpath-0.7.0/fiberpath_gui/src/components/dialogs/CliUnavailableDialog.tsx +227 -0
  64. fiberpath-0.7.0/fiberpath_gui/src/components/dialogs/DiagnosticsDialog.tsx +162 -0
  65. fiberpath-0.7.0/fiberpath_gui/src/components/dialogs/ExportConfirmationDialog.tsx +148 -0
  66. fiberpath-0.7.0/fiberpath_gui/src/components/editors/HelicalLayerEditor.tsx +221 -0
  67. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/editors/HoopLayerEditor.tsx +1 -1
  68. fiberpath-0.7.0/fiberpath_gui/src/components/editors/LayerNumericField.tsx +61 -0
  69. fiberpath-0.7.0/fiberpath_gui/src/components/editors/SkipLayerEditor.tsx +82 -0
  70. fiberpath-0.7.0/fiberpath_gui/src/components/forms/MachineSettingsForm.tsx +83 -0
  71. fiberpath-0.7.0/fiberpath_gui/src/components/forms/MandrelForm.tsx +116 -0
  72. fiberpath-0.7.0/fiberpath_gui/src/components/forms/TowForm.tsx +109 -0
  73. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/layers/LayerRow.tsx +39 -26
  74. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/layers/LayerStack.tsx +1 -1
  75. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/panels/BottomPanel.tsx +1 -1
  76. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/panels/LeftPanel.tsx +1 -1
  77. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/panels/RightPanel.tsx +1 -1
  78. fiberpath-0.7.0/fiberpath_gui/src/hooks/canvas/usePreviewGeneration.ts +111 -0
  79. fiberpath-0.7.0/fiberpath_gui/src/hooks/stream/useConnectionActions.ts +87 -0
  80. fiberpath-0.7.0/fiberpath_gui/src/hooks/stream/useManualCommandActions.ts +68 -0
  81. fiberpath-0.7.0/fiberpath_gui/src/hooks/stream/useStreamingActions.ts +170 -0
  82. fiberpath-0.7.0/fiberpath_gui/src/hooks/useDebouncedValue.ts +17 -0
  83. fiberpath-0.7.0/fiberpath_gui/src/hooks/useFileOperations.ts +73 -0
  84. fiberpath-0.7.0/fiberpath_gui/src/hooks/useMenubarInteractions.ts +64 -0
  85. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/hooks/useStreamEvents.ts +23 -41
  86. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/commands.ts +27 -10
  87. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/fileOperations.ts +49 -9
  88. fiberpath-0.7.0/fiberpath_gui/src/lib/helicalValidation.ts +110 -0
  89. fiberpath-0.7.0/fiberpath_gui/src/lib/menuConfig.ts +187 -0
  90. fiberpath-0.7.0/fiberpath_gui/src/lib/numericFields.ts +18 -0
  91. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/schemas.test.ts +0 -1
  92. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/schemas.ts +0 -1
  93. fiberpath-0.7.0/fiberpath_gui/src/lib/streamFeedback.ts +285 -0
  94. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/validation.test.ts +6 -6
  95. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/validation.ts +10 -2
  96. fiberpath-0.7.0/fiberpath_gui/src/lib/validationErrors.test.ts +41 -0
  97. fiberpath-0.7.0/fiberpath_gui/src/lib/validationErrors.ts +124 -0
  98. {fiberpath-0.6.1/fiberpath_gui/src/state → fiberpath-0.7.0/fiberpath_gui/src/stores}/projectStore.test.ts +32 -9
  99. {fiberpath-0.6.1/fiberpath_gui/src/state → fiberpath-0.7.0/fiberpath_gui/src/stores}/projectStore.ts +45 -9
  100. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/stores/streamStore.ts +26 -0
  101. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/buttons.css +0 -1
  102. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/canvas.css +2 -3
  103. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/dialogs.css +0 -14
  104. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/forms.css +0 -19
  105. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/index.css +2 -2
  106. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/layout.css +0 -50
  107. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/panels.css +4 -79
  108. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/reset.css +1 -1
  109. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/tabs.css +1 -1
  110. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/tokens.css +0 -76
  111. fiberpath-0.7.0/fiberpath_gui/src/styles/typography.css +68 -0
  112. fiberpath-0.7.0/fiberpath_gui/src/tests/integration/streamLifecycle.test.ts +248 -0
  113. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/tests/integration/workflows.test.ts +4 -4
  114. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/types/converters.test.ts +5 -10
  115. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/types/converters.ts +3 -4
  116. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/types/project.ts +0 -2
  117. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/types/wind-schema.ts +0 -0
  118. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/Cargo.lock +1 -1
  119. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/Cargo.toml +1 -1
  120. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/src/main.rs +1 -8
  121. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/tauri.conf.json +1 -1
  122. {fiberpath-0.6.1 → fiberpath-0.7.0}/pyproject.toml +1 -1
  123. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/ci/e2e-check-artifacts.ps1 +55 -55
  124. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/ci/e2e-cli-smoke.ps1 +52 -52
  125. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/ci/extract-package-runtime.ps1 +61 -61
  126. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/ci/extract-package-runtime.sh +1 -1
  127. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/ci/find-bundled-cli.ps1 +60 -60
  128. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/ci/find-bundled-cli.sh +1 -1
  129. {fiberpath-0.6.1 → fiberpath-0.7.0}/setup.cfg +1 -1
  130. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/api/test_plan_route.py +2 -2
  131. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/api/test_simulate_route.py +3 -3
  132. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/api/test_stream_route.py +1 -1
  133. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/api/test_stream_route_errors.py +1 -1
  134. fiberpath-0.7.0/tests/cli/test_axis_format.py +87 -0
  135. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cli/test_cli_json.py +1 -1
  136. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/gcode/test_dialects.py +10 -24
  137. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/planning/_generate_fixtures.py +1 -1
  138. fiberpath-0.7.0/tests/planning/fixtures/helical_layer.gcode +4525 -0
  139. fiberpath-0.7.0/tests/planning/fixtures/hoop_layer.gcode +251 -0
  140. fiberpath-0.7.0/tests/planning/fixtures/hoop_only_program.gcode +214 -0
  141. fiberpath-0.7.0/tests/planning/fixtures/skip_layer.gcode +3 -0
  142. fiberpath-0.7.0/tests/planning/test_axis_mapping.py +143 -0
  143. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/planning/test_planner_smoke.py +17 -13
  144. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/simulation/test_simulator.py +2 -2
  145. fiberpath-0.7.0/tests/simulation/test_simulator_axis_detection.py +80 -0
  146. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/visualization/test_plotter.py +8 -14
  147. fiberpath-0.7.0/tests/visualization/test_plotter_axis_detection.py +83 -0
  148. {fiberpath-0.6.1 → fiberpath-0.7.0}/uv.lock +1 -1
  149. fiberpath-0.6.1/docs/guides/axis-mapping.md +0 -182
  150. fiberpath-0.6.1/fiberpath_gui/src/components/FileField.tsx +0 -61
  151. fiberpath-0.6.1/fiberpath_gui/src/components/MenuBar.tsx +0 -362
  152. fiberpath-0.6.1/fiberpath_gui/src/components/ResultCard.tsx +0 -15
  153. fiberpath-0.6.1/fiberpath_gui/src/components/StatusText.tsx +0 -30
  154. fiberpath-0.6.1/fiberpath_gui/src/components/StreamTab/FileStreamingSection.tsx +0 -395
  155. fiberpath-0.6.1/fiberpath_gui/src/components/StreamTab/index.ts +0 -10
  156. fiberpath-0.6.1/fiberpath_gui/src/components/canvas/VisualizationCanvas.tsx +0 -234
  157. fiberpath-0.6.1/fiberpath_gui/src/components/dialogs/AboutDialog.tsx +0 -129
  158. fiberpath-0.6.1/fiberpath_gui/src/components/dialogs/CliUnavailableDialog.tsx +0 -233
  159. fiberpath-0.6.1/fiberpath_gui/src/components/dialogs/DiagnosticsDialog.tsx +0 -230
  160. fiberpath-0.6.1/fiberpath_gui/src/components/dialogs/ExportConfirmationDialog.tsx +0 -215
  161. fiberpath-0.6.1/fiberpath_gui/src/components/editors/HelicalLayerEditor.tsx +0 -342
  162. fiberpath-0.6.1/fiberpath_gui/src/components/editors/SkipLayerEditor.tsx +0 -97
  163. fiberpath-0.6.1/fiberpath_gui/src/components/forms/MachineSettingsForm.tsx +0 -93
  164. fiberpath-0.6.1/fiberpath_gui/src/components/forms/MandrelForm.tsx +0 -111
  165. fiberpath-0.6.1/fiberpath_gui/src/components/forms/TowForm.tsx +0 -110
  166. fiberpath-0.6.1/fiberpath_gui/src/components/tabs/StreamTab.tsx +0 -6
  167. fiberpath-0.6.1/fiberpath_gui/src/styles/typography.css +0 -127
  168. fiberpath-0.6.1/planning/gui-framework-migration-evaluation-plan.md +0 -159
  169. fiberpath-0.6.1/planning/roadmap-v7.md +0 -232
  170. fiberpath-0.6.1/tests/cli/test_axis_format.py +0 -200
  171. fiberpath-0.6.1/tests/planning/fixtures/helical_layer.gcode +0 -4525
  172. fiberpath-0.6.1/tests/planning/fixtures/hoop_layer.gcode +0 -251
  173. fiberpath-0.6.1/tests/planning/fixtures/hoop_only_program.gcode +0 -214
  174. fiberpath-0.6.1/tests/planning/fixtures/skip_layer.gcode +0 -3
  175. fiberpath-0.6.1/tests/planning/test_axis_mapping.py +0 -277
  176. fiberpath-0.6.1/tests/simulation/test_simulator_axis_detection.py +0 -89
  177. fiberpath-0.6.1/tests/visualization/test_plotter_axis_detection.py +0 -98
  178. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/actions/setup-node/action.yml +0 -0
  179. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/actions/setup-python/action.yml +0 -0
  180. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/actions/setup-rust/action.yml +0 -0
  181. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/dependabot.yml +0 -0
  182. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/backend-ci.yml +0 -0
  183. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/ci-check.yml +0 -0
  184. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/dependency-audit.yml +0 -0
  185. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/docs-ci.yml +0 -0
  186. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/docs-deploy.yml +0 -0
  187. {fiberpath-0.6.1 → fiberpath-0.7.0}/.github/workflows/gui-e2e-smoke.yml +0 -0
  188. {fiberpath-0.6.1 → fiberpath-0.7.0}/.vscode/settings.json +0 -0
  189. {fiberpath-0.6.1 → fiberpath-0.7.0}/LICENSE +0 -0
  190. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/development/ci-cd.md +0 -0
  191. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/guides/marlin-streaming.md +0 -0
  192. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/guides/visualization.md +0 -0
  193. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/guides/wind-format.md +0 -0
  194. {fiberpath-0.6.1 → fiberpath-0.7.0}/docs/vm-testing.md +0 -0
  195. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/README.md +0 -0
  196. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/complex_surface/README.md +0 -0
  197. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/multi_layer/README.md +0 -0
  198. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/multi_layer/input.wind +0 -0
  199. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/rocketry/AvBay(470mm)triple.gcode +0 -0
  200. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/rocketry/AvBay(470mm)triple.wind +0 -0
  201. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/rocketry/CarbonMotorTube(1295mm).gcode +0 -0
  202. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/rocketry/MainChute(585mm).gcode +0 -0
  203. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/simple_cylinder/README.md +0 -0
  204. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/simple_cylinder/input.wind +0 -0
  205. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/sized_simple_cylinder/README.md +0 -0
  206. {fiberpath-0.6.1 → fiberpath-0.7.0}/examples/sized_simple_cylinder/input.wind +0 -0
  207. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/__init__.py +0 -0
  208. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/config/__init__.py +0 -0
  209. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/config/schemas.py +0 -0
  210. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/config/validator.py +0 -0
  211. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/execution/__init__.py +0 -0
  212. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/execution/marlin.py +0 -0
  213. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/gcode/__init__.py +0 -0
  214. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/gcode/generator.py +0 -0
  215. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/geometry/__init__.py +0 -0
  216. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/geometry/curves.py +0 -0
  217. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/geometry/intersections.py +0 -0
  218. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/geometry/surfaces.py +0 -0
  219. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/math_utils.py +0 -0
  220. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/planning/__init__.py +0 -0
  221. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/planning/calculations.py +0 -0
  222. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/planning/exceptions.py +0 -0
  223. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/planning/helpers.py +0 -0
  224. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/planning/layer_strategies.py +0 -0
  225. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/planning/planner.py +0 -0
  226. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/planning/validators.py +0 -0
  227. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/simulation/__init__.py +0 -0
  228. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/visualization/__init__.py +0 -0
  229. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath/visualization/export_json.py +0 -0
  230. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/__init__.py +0 -0
  231. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/main.py +0 -0
  232. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/package-lock.json +0 -0
  233. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/path_policy.py +0 -0
  234. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/routes/__init__.py +0 -0
  235. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/routes/simulate.py +0 -0
  236. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/routes/stream.py +0 -0
  237. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_api/routes/validate.py +0 -0
  238. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/__init__.py +0 -0
  239. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/__main__.py +0 -0
  240. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/interactive.py +0 -0
  241. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/main.py +0 -0
  242. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/output.py +0 -0
  243. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/plot.py +0 -0
  244. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/simulate.py +0 -0
  245. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/stream.py +0 -0
  246. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_cli/validate.py +0 -0
  247. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/.nvmrc +0 -0
  248. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/.stylelintrc.json +0 -0
  249. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/README.md +0 -0
  250. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/bundled-cli/.gitkeep +0 -0
  251. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/architecture/streaming-state.md +0 -0
  252. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/docs/architecture/tech-stack.md +0 -0
  253. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/generate-types.json +0 -0
  254. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/index.html +0 -0
  255. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/scripts/check-css-vars.mjs +0 -0
  256. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/CliHealthWarning.tsx +0 -0
  257. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/ErrorBoundary.tsx +0 -0
  258. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/ErrorNotificationToast.tsx +0 -0
  259. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/ConnectionSection.css +0 -0
  260. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/KeyboardShortcuts.css +0 -0
  261. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/KeyboardShortcuts.tsx +0 -0
  262. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/ManualControlSection.css +0 -0
  263. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/StreamControls.css +0 -0
  264. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/StreamControls.tsx +0 -0
  265. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/StreamLog.css +0 -0
  266. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/StreamLog.tsx +0 -0
  267. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/StreamTab.css +0 -0
  268. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/StreamTab/StreamTab.tsx +0 -0
  269. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/TabBar.tsx +0 -0
  270. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/Toast/ToastContainer.css +0 -0
  271. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/Toast/ToastContainer.tsx +0 -0
  272. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/canvas/CanvasControls.tsx +0 -0
  273. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/canvas/CenterCanvas.tsx +0 -0
  274. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/canvas/LayerScrubber.tsx +0 -0
  275. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/components/tabs/MainTab.tsx +0 -0
  276. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/contexts/CliHealthContext.tsx +0 -0
  277. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/contexts/ErrorNotificationContext.tsx +0 -0
  278. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/hooks/useCliHealth.ts +0 -0
  279. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/hooks/useKeyboardShortcuts.ts +0 -0
  280. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/hooks/useTheme.test.ts +0 -0
  281. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/hooks/useTheme.ts +0 -0
  282. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/layouts/MainLayout.tsx +0 -0
  283. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/constants.ts +0 -0
  284. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/marlin-api.ts +0 -0
  285. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/recentFiles.ts +0 -0
  286. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/retry.ts +0 -0
  287. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/tauri-types.ts +0 -0
  288. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/lib/toastMessages.ts +0 -0
  289. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/main.tsx +0 -0
  290. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/stores/toastStore.ts +0 -0
  291. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/styles/notifications.css +0 -0
  292. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/tests/setup.ts +0 -0
  293. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src/types/components.ts +0 -0
  294. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/build.rs +0 -0
  295. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/capabilities/default.json +0 -0
  296. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/icons/128x128.png +0 -0
  297. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/icons/256x256.png +0 -0
  298. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/icons/32x32.png +0 -0
  299. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/icons/512x512.png +0 -0
  300. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/icons/icon.ico +0 -0
  301. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/src/cli_path.rs +0 -0
  302. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/src/cli_process.rs +0 -0
  303. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/src-tauri/src/marlin.rs +0 -0
  304. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/tsconfig.json +0 -0
  305. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/tsconfig.node.json +0 -0
  306. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/vite.config.ts +0 -0
  307. {fiberpath-0.6.1 → fiberpath-0.7.0}/fiberpath_gui/vitest.config.ts +0 -0
  308. {fiberpath-0.6.1 → fiberpath-0.7.0}/mkdocs.yml +0 -0
  309. {fiberpath-0.6.1 → fiberpath-0.7.0}/package-lock.json +0 -0
  310. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/ci/e2e-check-artifacts.sh +0 -0
  311. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/ci/e2e-cli-smoke.sh +0 -0
  312. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/export_schema.py +0 -0
  313. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/freeze_cli.py +0 -0
  314. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/generate_schema.py +0 -0
  315. {fiberpath-0.6.1 → fiberpath-0.7.0}/scripts/sync_gui_docs.py +0 -0
  316. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cli/test_cli_smoke.py +0 -0
  317. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cli/test_stream_command.py +0 -0
  318. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/config/__init__.py +0 -0
  319. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/config/test_validator.py +0 -0
  320. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/inputs/helical-balanced.wind +0 -0
  321. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/inputs/simple-hoop.wind +0 -0
  322. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/inputs/skip-bias.wind +0 -0
  323. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/outputs/helical-balanced/output.gcode +0 -0
  324. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/outputs/helical-balanced/preview.png +0 -0
  325. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/outputs/simple-hoop/output.gcode +0 -0
  326. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/outputs/simple-hoop/preview.png +0 -0
  327. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/outputs/skip-bias/output.gcode +0 -0
  328. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/cyclone_reference_runs/outputs/skip-bias/preview.png +0 -0
  329. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/execution/test_marlin_streamer.py +0 -0
  330. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/gcode/test_generator.py +0 -0
  331. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/geometry/test_surfaces.py +0 -0
  332. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/planning/test_helpers_machine.py +0 -0
  333. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/planning/test_layer_strategies.py +0 -0
  334. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/planning/test_validators.py +0 -0
  335. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/tauri/test_marlin_integration.py +0 -0
  336. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/tauri/test_port_discovery.py +0 -0
  337. {fiberpath-0.6.1 → fiberpath-0.7.0}/tests/visualization/test_export_json.py +0 -0
@@ -1,5 +1,10 @@
1
+ * text=auto eol=lf
2
+ *.bat text eol=crlf
3
+ *.cmd text eol=crlf
4
+ *.ps1 text eol=crlf
5
+
1
6
  *.gcode linguist-generated=true
2
7
  *.gco linguist-generated=true
3
8
  *.gcnc linguist-generated=true
4
9
  *.ngc linguist-generated=true
5
- *.log linguist-generated=true
10
+ *.log linguist-generated=true
@@ -26,12 +26,9 @@ jobs:
26
26
  with:
27
27
  install-linux-deps: "true"
28
28
 
29
- - name: Run ESLint
29
+ - name: Run TypeScript type check
30
30
  run: npm run lint
31
31
 
32
- - name: Run TypeScript compiler
33
- run: npx tsc --noEmit
34
-
35
32
  - name: Run Stylelint (CSS)
36
33
  run: npm run lint:css
37
34
 
@@ -69,6 +66,9 @@ jobs:
69
66
  - name: Build Vite assets
70
67
  run: npm run build
71
68
 
69
+ - name: Enforce bundle budget
70
+ run: npm run perf:bundle
71
+
72
72
  - name: Verify build output
73
73
  run: |
74
74
  if [ ! -d "dist" ]; then
@@ -77,6 +77,13 @@ jobs:
77
77
  fi
78
78
  echo "Build successful - dist/ directory created"
79
79
 
80
+ - name: Upload bundle metrics artifact
81
+ uses: actions/upload-artifact@v4
82
+ with:
83
+ name: gui-bundle-metrics
84
+ path: fiberpath_gui/perf/reports/bundle-metrics.json
85
+ if-no-files-found: error
86
+
80
87
  - name: Setup Rust environment
81
88
  uses: ./.github/actions/setup-rust
82
89
  with:
@@ -160,7 +160,7 @@ jobs:
160
160
  # Windows: Verify actual installer files were created
161
161
  MSI_COUNT=$(find src-tauri/target/release/bundle/msi -name "*.msi" 2>/dev/null | wc -l)
162
162
  NSIS_COUNT=$(find src-tauri/target/release/bundle/nsis -name "*.exe" 2>/dev/null | wc -l)
163
-
163
+
164
164
  if [ "$MSI_COUNT" -gt 0 ] || [ "$NSIS_COUNT" -gt 0 ]; then
165
165
  echo "[OK] Windows installers created successfully:"
166
166
  find src-tauri/target/release/bundle -type f \( -name "*.msi" -o -name "*.exe" \) -exec ls -lh {} \;
@@ -175,17 +175,17 @@ jobs:
175
175
  base: prevTag,
176
176
  head: newTag
177
177
  });
178
-
178
+
179
179
  // Categorize commits
180
180
  const added = [];
181
181
  const fixed = [];
182
182
  const changed = [];
183
-
183
+
184
184
  comparison.commits.forEach(commit => {
185
185
  const msg = commit.commit.message.split('\n')[0];
186
186
  const sha = commit.sha.substring(0, 7);
187
187
  const entry = `- ${msg} (\`${sha}\`)`;
188
-
188
+
189
189
  const lower = msg.toLowerCase();
190
190
  if (lower.startsWith('add') || lower.startsWith('feat')) {
191
191
  added.push(entry);
@@ -195,7 +195,7 @@ jobs:
195
195
  changed.push(entry);
196
196
  }
197
197
  });
198
-
198
+
199
199
  if (added.length > 0) {
200
200
  notes += `### Added\n${added.join('\n')}\n\n`;
201
201
  }
@@ -205,7 +205,7 @@ jobs:
205
205
  if (changed.length > 0) {
206
206
  notes += `### Changed\n${changed.join('\n')}\n\n`;
207
207
  }
208
-
208
+
209
209
  notes += `**Full Changelog:** https://github.com/${repo.owner}/${repo.repo}/compare/${prevTag}...${newTag}\n`;
210
210
  } else {
211
211
  notes += `Initial release.\n`;
@@ -188,9 +188,9 @@ cython_debug/
188
188
  .abstra/
189
189
 
190
190
  # Visual Studio Code
191
- # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
191
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
192
192
  # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
193
- # and can be added to the global gitignore or merged into this file. However, if you prefer,
193
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
194
194
  # you could uncomment the following to ignore the entire vscode folder
195
195
  # .vscode/
196
196
 
@@ -218,4 +218,4 @@ __marimo__/
218
218
  # temporary files
219
219
  temp/
220
220
  tmp/
221
- .codex
221
+ .codex
@@ -0,0 +1,36 @@
1
+ minimum_pre_commit_version: "3.7.0"
2
+ default_stages: [pre-commit]
3
+
4
+ repos:
5
+ - repo: https://github.com/pre-commit/pre-commit-hooks
6
+ rev: v5.0.0
7
+ hooks:
8
+ - id: trailing-whitespace
9
+ - id: end-of-file-fixer
10
+ - id: check-merge-conflict
11
+ - id: check-added-large-files
12
+
13
+ - repo: https://github.com/astral-sh/ruff-pre-commit
14
+ rev: v0.14.0
15
+ hooks:
16
+ - id: ruff-check
17
+ args: [--fix]
18
+ files: ^(fiberpath|fiberpath_api|fiberpath_cli|tests)/.*\.py$
19
+ - id: ruff-format
20
+ files: ^(fiberpath|fiberpath_api|fiberpath_cli|tests)/.*\.py$
21
+
22
+ - repo: local
23
+ hooks:
24
+ - id: gui-typecheck
25
+ name: gui typecheck (tsc)
26
+ entry: npm --prefix fiberpath_gui run lint
27
+ language: system
28
+ pass_filenames: false
29
+ files: ^fiberpath_gui/src/.*\.(ts|tsx)$
30
+
31
+ - id: gui-css-lint
32
+ name: gui css lint (stylelint)
33
+ entry: npm --prefix fiberpath_gui run lint:css
34
+ language: system
35
+ pass_filenames: false
36
+ files: ^fiberpath_gui/src/.*\.css$
@@ -23,4 +23,4 @@
23
23
  // CI/CD
24
24
  "github.vscode-github-actions"
25
25
  ]
26
- }
26
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "FiberPath GUI: Tauri Dev",
6
+ "type": "node-terminal",
7
+ "request": "launch",
8
+ "command": "cd fiberpath_gui && npm run tauri dev"
9
+ },
10
+ {
11
+ "name": "FiberPath GUI: Vite Dev Server",
12
+ "type": "node-terminal",
13
+ "request": "launch",
14
+ "command": "cd fiberpath_gui && npm run dev"
15
+ },
16
+ {
17
+ "name": "FiberPath GUI: Vitest (Watch)",
18
+ "type": "node-terminal",
19
+ "request": "launch",
20
+ "command": "cd fiberpath_gui && npm run test"
21
+ },
22
+ {
23
+ "name": "FiberPath GUI: Vitest (Coverage)",
24
+ "type": "node-terminal",
25
+ "request": "launch",
26
+ "command": "cd fiberpath_gui && npm run test:coverage"
27
+ },
28
+ {
29
+ "name": "FiberPath Rust Backend: cargo run",
30
+ "type": "node-terminal",
31
+ "request": "launch",
32
+ "command": "cd fiberpath_gui/src-tauri && cargo run"
33
+ }
34
+ ]
35
+ }
@@ -8,15 +8,52 @@ The format is based on Keep a Changelog, and this project follows semantic versi
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.7.0] - 2026-04-08
12
+
11
13
  ### Added
12
14
 
13
- - Documented critical helical coverage defect: `lockDegrees` compatibility with `patternNumber` is not fully validated and can allow partial mandrel coverage without a planner error for incompatible combinations (for example `lockDegrees=270`, `patternNumber=3`).
14
- - Documented required compatibility rule for helical coverage safety: `(2 × lockDegrees) % (360 / patternNumber) == 0`.
15
- - Documented planned validator hardening to reject `lockDegrees`/`patternNumber` combinations that produce overlapping or aliased in-pattern positions.
16
- - Documented planned behavior fix where `skipIndex` is currently schema-validated but not yet applied to helical in-pattern visit order.
17
- - Documented planned schema normalization for `skipInitialNearLock` from nullable boolean to `bool` with default `false`.
18
- - Documented required docs correction scope for `lockDegrees`, `patternNumber`, and coverage-vs-ply-count semantics, including clarification that feed-rate clamping in planner math is planned, not currently implemented.
19
- - Documented required example updates for compatibility: `examples/rocketry/AvBay(470mm).wind` layer 1 and `examples/rocketry/MainChute(585mm).wind` layer 1 should use `lockDegrees=540` instead of `270`.
15
+ - Added GUI bundle-budget enforcement (`npm run perf:bundle`) with CI gating and machine-readable report output.
16
+ - Added stricter repository hygiene checks through pre-commit integration for Python lint/format and GUI type/CSS validation.
17
+
18
+ ### Changed
19
+
20
+ - Completed the XAB-only axis cutover across core planning, simulation, plotting, CLI, API, and GUI export workflows.
21
+ - Removed legacy XYZ axis-format options from built-in interfaces and aligned fixtures/examples with XAB defaults.
22
+ - Simplified GUI component/style surfaces by removing dead CSS/component paths and tightening shared editor/form boundaries.
23
+ - Hardened packaging/CI helper scripts for bundled CLI discovery and cross-platform release reliability.
24
+
25
+ ### Fixed
26
+
27
+ - Fixed regression tests and fixtures that drifted during axis-format migration, including layer-strategy and plot-signature expectations.
28
+ - Fixed pre-commit Ruff hook compatibility by migrating from the legacy `ruff` alias to `ruff-check`.
29
+
30
+ ### Documentation
31
+
32
+ - Updated release-facing docs to position v0.7.0 as current and reflect XAB-only behavior in user/developer guides.
33
+ - Documented helical coverage compatibility caveats and follow-up validation/schema hardening scope in roadmap/release notes.
34
+
35
+ ### Internal
36
+
37
+ - Synchronized release version metadata across Python (`pyproject.toml`, `uv.lock`), npm (`package.json`, `package-lock.json`), and Tauri (`Cargo.toml`, `Cargo.lock`, `tauri.conf.json`).
38
+
39
+ ## [0.6.2] - 2026-04-07
40
+
41
+ ### Added
42
+
43
+ - Added stream-domain action hooks (`useConnectionActions`, `useStreamingActions`, `useManualCommandActions`) and consolidated stream feedback helpers for consistent toast/log behavior.
44
+ - Added focused integration coverage for stream lifecycle transitions in `streamLifecycle.test.ts`.
45
+ - Added shared React UI primitives/utilities including `LayerNumericField`, `numericFields`, `helicalValidation`, `usePreviewGeneration`, and `BaseDialog`.
46
+
47
+ ### Changed
48
+
49
+ - Completed the v0.6.2 React hotspot cleanup roadmap (Waves A-D), including StreamTab domain decomposition, menu/file orchestration cleanup, and canvas/editor component simplification.
50
+ - Standardized store boundaries by moving `projectStore` into `src/stores` and removing StreamTab wrapper path indirection.
51
+ - Updated release-facing docs to reflect v0.6.2 as the current release.
52
+
53
+ ### Fixed
54
+
55
+ - Removed remaining imperative `alert(...)` UI fallback paths in favor of app-level notifications.
56
+ - Eliminated final inline-style residue in streaming UI components to keep styling maintainable and class-driven.
20
57
 
21
58
  ## [0.6.1] - 2026-04-07
22
59
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fiberpath
3
- Version: 0.6.1
3
+ Version: 0.7.0
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
@@ -708,7 +708,7 @@ Description-Content-Type: text/markdown
708
708
 
709
709
  **Plan, simulate, and manufacture composite parts with precision fiber winding.**
710
710
 
711
- [![Version](https://img.shields.io/badge/version-0.6.1-4c7284)](https://github.com/CameronBrooks11/fiberpath/releases)
711
+ [![Version](https://img.shields.io/badge/version-0.7.0-4c7284)](https://github.com/CameronBrooks11/fiberpath/releases)
712
712
  [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-00695C.svg)](LICENSE)
713
713
  [![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
714
  [![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)
@@ -733,11 +733,11 @@ Design multi-layer winding patterns in a visual interface, simulate the full man
733
733
 
734
734
  ### Features
735
735
 
736
- - **Visual Layer Editor** – Design winding patterns with real-time 3D preview
736
+ - **Visual Layer Editor** – Design winding patterns with live preview
737
737
  - **Geodesic Path Planning** – Automatic computation of stable fiber trajectories
738
738
  - **Hardware Simulation** – Validate motion before manufacturing
739
739
  - **Direct Machine Control** – Stream G-code to Marlin controllers with pause/resume
740
- - **Flexible Axis Mapping** – Support for XAB rotational or XYZ linear axis configurations
740
+ - **XAB-Native Axis Output** – Standardized rotational-axis output with clear logical axis mapping
741
741
  - **Cross-Platform Desktop GUI** – Native Windows, macOS, and Linux applications
742
742
  - **Command-Line Tools** – Scriptable workflows for automation and CI/CD
743
743
  - **Comprehensive Documentation** – Architecture guides, examples, and API reference
@@ -819,18 +819,19 @@ pytest
819
819
  ```sh
820
820
  # Generate G-code from a .wind configuration
821
821
  fiberpath plan examples/simple_cylinder/input.wind -o output.gcode
822
-
823
- # Specify axis format for your machine
824
- fiberpath plan input.wind -o output.gcode --axis-format xab
825
822
  ```
826
823
 
827
- ### Visualizing Toolpaths
824
+ ### Visualizing Toolpaths (2D)
828
825
 
829
826
  ```sh
830
827
  # Create 2D unwrapped plot
831
828
  fiberpath plot output.gcode --output preview.png --scale 0.8
829
+ ```
832
830
 
833
- # Interactive 3D simulation (GUI)
831
+ ### Simulating Jobs
832
+
833
+ ```sh
834
+ # Simulation summary (time/material estimates; no interactive 3D viewer)
834
835
  fiberpath simulate output.gcode
835
836
  ```
836
837
 
@@ -853,7 +854,7 @@ The GUI provides two main workflows:
853
854
  **Main Tab:**
854
855
 
855
856
  - Visual layer editor with add/remove/reorder
856
- - Real-time 3D canvas preview
857
+ - Real-time unwrapped toolpath preview
857
858
  - Parameter forms for mandrel, tow, and machine settings
858
859
  - Export to G-code or save as `.wind` project file
859
860
 
@@ -888,7 +889,7 @@ FiberPath consists of four coordinated components:
888
889
  ┌─────────────────────────────────────────────────┐
889
890
  │ Desktop GUI (Tauri + React) │
890
891
  │ • Visual layer editor │
891
- │ • 3D canvas preview
892
+ │ • 2D preview canvas │
892
893
  │ • Serial communication controls │
893
894
  └───────────────┬─────────────────────────────────┘
894
895
  │ IPC calls
@@ -927,21 +928,13 @@ See [Architecture Documentation](https://cameronbrooks11.github.io/fiberpath/arc
927
928
 
928
929
  ## Axis Configuration
929
930
 
930
- FiberPath supports two axis mapping formats:
931
-
932
- **XAB (Rotational) - Default**:
931
+ FiberPath uses XAB rotational-axis output in built-in workflows:
933
932
 
934
933
  - `X` = Carriage position (linear, mm)
935
934
  - `A` = Mandrel rotation (rotational, degrees)
936
935
  - `B` = Delivery head rotation (rotational, degrees)
937
936
 
938
- **XYZ (Legacy)**:
939
-
940
- - `X` = Carriage position (linear, mm)
941
- - `Y` = Mandrel rotation (treated as linear, degrees)
942
- - `Z` = Delivery head rotation (treated as linear, degrees)
943
-
944
- Use `--axis-format xab` (default) for new projects. The XYZ format maintains compatibility with legacy systems like Cyclone.
937
+ Legacy XYZ programs should be re-generated under current versions. Simulation and plotting reject auto-detected XYZ files with an explicit error so stale programs are surfaced early.
945
938
 
946
939
  ## Documentation
947
940
 
@@ -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.6.1-4c7284)](https://github.com/CameronBrooks11/fiberpath/releases)
7
+ [![Version](https://img.shields.io/badge/version-0.7.0-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)
@@ -29,11 +29,11 @@ Design multi-layer winding patterns in a visual interface, simulate the full man
29
29
 
30
30
  ### Features
31
31
 
32
- - **Visual Layer Editor** – Design winding patterns with real-time 3D preview
32
+ - **Visual Layer Editor** – Design winding patterns with live preview
33
33
  - **Geodesic Path Planning** – Automatic computation of stable fiber trajectories
34
34
  - **Hardware Simulation** – Validate motion before manufacturing
35
35
  - **Direct Machine Control** – Stream G-code to Marlin controllers with pause/resume
36
- - **Flexible Axis Mapping** – Support for XAB rotational or XYZ linear axis configurations
36
+ - **XAB-Native Axis Output** – Standardized rotational-axis output with clear logical axis mapping
37
37
  - **Cross-Platform Desktop GUI** – Native Windows, macOS, and Linux applications
38
38
  - **Command-Line Tools** – Scriptable workflows for automation and CI/CD
39
39
  - **Comprehensive Documentation** – Architecture guides, examples, and API reference
@@ -115,18 +115,19 @@ pytest
115
115
  ```sh
116
116
  # Generate G-code from a .wind configuration
117
117
  fiberpath plan examples/simple_cylinder/input.wind -o output.gcode
118
-
119
- # Specify axis format for your machine
120
- fiberpath plan input.wind -o output.gcode --axis-format xab
121
118
  ```
122
119
 
123
- ### Visualizing Toolpaths
120
+ ### Visualizing Toolpaths (2D)
124
121
 
125
122
  ```sh
126
123
  # Create 2D unwrapped plot
127
124
  fiberpath plot output.gcode --output preview.png --scale 0.8
125
+ ```
128
126
 
129
- # Interactive 3D simulation (GUI)
127
+ ### Simulating Jobs
128
+
129
+ ```sh
130
+ # Simulation summary (time/material estimates; no interactive 3D viewer)
130
131
  fiberpath simulate output.gcode
131
132
  ```
132
133
 
@@ -149,7 +150,7 @@ The GUI provides two main workflows:
149
150
  **Main Tab:**
150
151
 
151
152
  - Visual layer editor with add/remove/reorder
152
- - Real-time 3D canvas preview
153
+ - Real-time unwrapped toolpath preview
153
154
  - Parameter forms for mandrel, tow, and machine settings
154
155
  - Export to G-code or save as `.wind` project file
155
156
 
@@ -184,7 +185,7 @@ FiberPath consists of four coordinated components:
184
185
  ┌─────────────────────────────────────────────────┐
185
186
  │ Desktop GUI (Tauri + React) │
186
187
  │ • Visual layer editor │
187
- │ • 3D canvas preview
188
+ │ • 2D preview canvas │
188
189
  │ • Serial communication controls │
189
190
  └───────────────┬─────────────────────────────────┘
190
191
  │ IPC calls
@@ -223,21 +224,13 @@ See [Architecture Documentation](https://cameronbrooks11.github.io/fiberpath/arc
223
224
 
224
225
  ## Axis Configuration
225
226
 
226
- FiberPath supports two axis mapping formats:
227
-
228
- **XAB (Rotational) - Default**:
227
+ FiberPath uses XAB rotational-axis output in built-in workflows:
229
228
 
230
229
  - `X` = Carriage position (linear, mm)
231
230
  - `A` = Mandrel rotation (rotational, degrees)
232
231
  - `B` = Delivery head rotation (rotational, degrees)
233
232
 
234
- **XYZ (Legacy)**:
235
-
236
- - `X` = Carriage position (linear, mm)
237
- - `Y` = Mandrel rotation (treated as linear, degrees)
238
- - `Z` = Delivery head rotation (treated as linear, degrees)
239
-
240
- Use `--axis-format xab` (default) for new projects. The XYZ format maintains compatibility with legacy systems like Cyclone.
233
+ Legacy XYZ programs should be re-generated under current versions. Simulation and plotting reject auto-detected XYZ files with an explicit error so stale programs are surfaced early.
241
234
 
242
235
  ## Documentation
243
236
 
@@ -1,9 +1,5 @@
1
1
  # TODO
2
2
 
3
- Tasks for Cam todo:
4
-
5
- - [ ] Remove untracked links and references to old files through out the docs.
6
-
7
3
  - [ ] Add reprapdiscount smart graphics display to our machine and then document the process of connecting it to Marlin. More importantly, create documentation (need to think thru the best format for this) for the Marlin configuration itself for the machine as well as the physical wiring of everything.
8
4
 
9
5
  - [ ] Review logic of how the various patterns are constructing and give tool tips or tables or aids or something or other to help users understand what the patterns are doing and how to use them effectively. The only relevant one right now is helical where it often gives circuit mismatch errors but its unclear where the raised number values come from / derive from their inputs in the properties panel.
@@ -20,6 +16,6 @@ Tasks for Cam todo:
20
16
 
21
17
  - [ ] Fix zooming behavior in the plot viewer so it expands the entire image not within the image bounds since this becomes an issue for larger (exceeds bounds) or smaller (impossible to look at properly) images
22
18
 
23
- - [ ] 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 cut v0.6.1 solely for this; re-check after upstream Tauri/GTK dependency line moves to non-vulnerable glib.
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.
24
20
 
25
21
  - [ ] 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.
@@ -7,7 +7,7 @@ This document provides a technical deep dive into FiberPath's axis mapping syste
7
7
  FiberPath uses a **logical-to-physical axis mapping** approach:
8
8
 
9
9
  1. **Planner operates on logical axes:** Carriage, Mandrel, Delivery Head
10
- 2. **Dialect converts to physical axes:** X/A/B or X/Y/Z depending on configuration
10
+ 2. **Dialect converts to physical axes:** Built-in output uses X/A/B; custom mappings are optional
11
11
  3. **Planning logic remains unchanged:** Same algorithms work for all output formats
12
12
 
13
13
  This design allows:
@@ -72,24 +72,6 @@ Maps logical axes to Marlin's native rotational axes:
72
72
  - Mandrel → A (rotational)
73
73
  - Delivery → B (rotational)
74
74
 
75
- ### XYZ Mapping (Legacy)
76
-
77
- ```python
78
- MARLIN_XYZ_LEGACY = AxisMapping(
79
- carriage="X",
80
- mandrel="Y",
81
- delivery="Z",
82
- is_rotational_mandrel=False,
83
- is_rotational_delivery=False
84
- )
85
- ```
86
-
87
- Maps rotational logical axes to linear physical axes:
88
-
89
- - Carriage → X (linear)
90
- - Mandrel → Y (linear, but represents degrees)
91
- - Delivery → Z (linear, but represents degrees)
92
-
93
75
  ## MarlinDialect Class
94
76
 
95
77
  The `MarlinDialect` class wraps an `AxisMapping` with Marlin-specific features:
@@ -129,12 +111,6 @@ carriage=50.0, mandrel=180.0, delivery=90.0, feed=2000
129
111
  G1 X50.0 A180.0 B90.0 F2000
130
112
  ```
131
113
 
132
- **Output XYZ:**
133
-
134
- ```text
135
- G1 X50.0 Y180.0 Z90.0 F2000
136
- ```
137
-
138
114
  ## Planning Flow
139
115
 
140
116
  ### 1. Wind Definition Parsed
@@ -160,7 +136,7 @@ commands = [
160
136
  The G-code writer (`fiberpath.gcode.generator`) uses the selected dialect:
161
137
 
162
138
  ```python
163
- dialect = MARLIN_XAB_STANDARD # or MARLIN_XYZ_LEGACY
139
+ dialect = MARLIN_XAB_STANDARD
164
140
  gcode = dialect.format_move(carriage, mandrel, delivery, feed)
165
141
  ```
166
142
 
@@ -206,14 +182,9 @@ To support a new controller (e.g., FANUC):
206
182
  ]
207
183
  ```
208
184
 
209
- 3. **Register in CLI/API:**
210
-
211
- Add to `fiberpath_cli/plan.py` and `fiberpath_api/routes/plan.py`:
185
+ 3. **Use in core integration:**
212
186
 
213
- ```python
214
- if axis_format == "fanuc":
215
- dialect = FANUC_STANDARD
216
- ```
187
+ Pass it through `PlanOptions(dialect=...)` in direct Python integrations.
217
188
 
218
189
  ### Custom Axis Configurations
219
190
 
@@ -292,7 +263,7 @@ gcode = dialect.format_move(carriage_pos, mandrel_angle, delivery_angle, feed)
292
263
 
293
264
  - ⚠️ Adds abstraction layer (slight complexity)
294
265
  - ⚠️ Dialect-specific optimizations require care
295
- - ⚠️ Must ensure all code paths use dialect correctly
266
+ - ⚠️ Must ensure advanced/custom integrations pass dialects consistently
296
267
 
297
268
  ## Future Enhancements
298
269
 
@@ -34,7 +34,7 @@ together and where to extend them.
34
34
 
35
35
  | Module | Responsibility | Notes |
36
36
  | ---------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
37
- | `fiberpath.planning` | Parses `.wind` files, validates machine/layer constraints, produces command sequences. | `PlanOptions` governs verbosity and dialect selection. |
37
+ | `fiberpath.planning` | Parses `.wind` files, validates machine/layer constraints, produces command sequences. | `PlanOptions` governs verbosity and optional advanced dialect override. |
38
38
  | `fiberpath.geometry` | Curve/surface math shared between planner and simulator. | Pure functions make it safe for reuse. |
39
39
  | `fiberpath.gcode` | Dialects and writers for Marlin-style controllers. | Extend here when adding custom headers or commands. Axis mapping configured via `MarlinDialect`. |
40
40
  | `fiberpath.simulation` | Time/distance estimations based on planned feed rates. | Feeds CLI `simulate` summaries. Axis-aware for proper rotational calculations. |
@@ -48,18 +48,14 @@ FiberPath uses a logical-to-physical axis mapping system that separates planning
48
48
  - **Mandrel**: Mandrel rotation (degrees)
49
49
  - **Delivery Head**: Delivery head rotation (degrees)
50
50
 
51
- These logical axes are mapped to physical controller axes via the `MarlinDialect` configuration:
51
+ FiberPath's built-in output format is:
52
52
 
53
53
  - **XAB (Standard)**: Carriage=X, Mandrel=A, Delivery=B - Uses Marlin's native rotational axis support
54
- - **XYZ (Legacy)**: Carriage=X, Mandrel=Y, Delivery=Z - Compatibility mode for systems where rotational axes were configured as linear
55
54
 
56
- The dialect is selected via:
55
+ CLI and API always emit XAB output in v0.7.0+. Advanced integrations can still pass a custom
56
+ `MarlinDialect` to the core planner API when needed.
57
57
 
58
- - CLI: `--axis-format xab|xyz` (default: `xab`)
59
- - API: `"axis_format": "xab"|"xyz"` field (default: `"xab"`)
60
- - Core: `PlanOptions(dialect=MARLIN_XAB_STANDARD|MARLIN_XYZ_LEGACY)`
61
-
62
- This design allows the same planning logic to produce G-code for different machine configurations without modification.
58
+ This design keeps planning logic machine-independent while keeping the default product path simple and deterministic.
63
59
 
64
60
  **See [Axis System Architecture](axis-system.md) for technical details** on the mapping system, dialect implementation, and extension points.
65
61
 
@@ -81,7 +77,7 @@ shapes without introducing FastAPI or Typer dependencies in the core.
81
77
  - **New planner strategies:** Add implementations under `fiberpath/planning/layer_strategies.py`
82
78
  and wire them through `plan_wind`.
83
79
  - **Alternate machine dialects:** Create new dialect definitions under `fiberpath/gcode/dialects.py`
84
- with custom `AxisMapping` configurations. Swap them in via CLI flags or API parameters.
80
+ with custom `AxisMapping` configurations. Use them directly via the core API where needed.
85
81
  - **GUI panels:** Implement a new Tauri command in `fiberpath_gui/src-tauri/src/main.rs`, call the
86
82
  relevant CLI entry point, and expose it via `src/lib/commands.ts` for React components.
87
83
 
@@ -29,10 +29,11 @@ Thanks for investing time in the project! This guide explains how to set up a de
29
29
  - **Tests:** `uv run pytest` exercises all unit/integration suites. Add targeted tests for new planner logic, CLI behavior, or API endpoints.
30
30
  - **Docs:** Keep `docs/*.md` in sync with feature work. Significant planner or simulator changes usually deserve updates to `docs/architecture.md` or `docs/planner-math.md`.
31
31
  - **Dependency hygiene:** Follow `docs/development/dependency-policy.md` for cadence, SLA, and defer/exception handling.
32
+ - **Commit-time automation:** Install and use pre-commit hooks (`pre-commit install`) so baseline Python and GUI checks run before each commit.
32
33
 
33
34
  ## Pull Request Checklist
34
35
 
35
- 1. `uv run ruff check`
36
+ 1. `pre-commit run --all-files`
36
37
  2. `uv run mypy`
37
38
  3. `uv run pytest`
38
39
  4. Update documentation and add changelog entries in `CHANGELOG.md` when behavior changes.
@@ -17,7 +17,7 @@ Applies to:
17
17
 
18
18
  - Patch updates: monthly
19
19
  - Minor updates: quarterly review window
20
- - Major updates: dedicated release slot (for example, a migration-focused release like v0.6.1 or similar)
20
+ - Major updates: dedicated release slot (for example, a migration-focused release like v0.7.0 or similar)
21
21
 
22
22
  ## Ownership
23
23
 
@@ -154,7 +154,7 @@ GitHub Actions workflow (`.github/workflows/gui-packaging.yml`) handles full pro
154
154
  ## Future Enhancements
155
155
 
156
156
  - **Code signing:** macOS (`developer-id`) and Windows (`signtool` + certificate) when credentials available
157
- - **Auto-updates:** Tauri updater for in-app version checks and downloads (planned post-v0.6.1)
157
+ - **Auto-updates:** Tauri updater for in-app version checks and downloads (planned post-v0.7.0)
158
158
  - **Bundle optimization:** Reduce frozen CLI size through dependency analysis
159
159
  - **Universal macOS binaries:** Single `.dmg` supporting both Intel and Apple Silicon (currently separate builds)
160
160