|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## 1.9.3 - 2026-10-06 |
| 4 | + |
| 5 | +- Consolidate user-facing export into three paths: FULL source-preserving normalization, EXPANDED controller postprocessing from resolved execution, and DXF geometry output. Remove Plot Data and separate cycle-export modes from the current export contract. |
| 6 | +- Replace controller-specific conversion code with one EXPANDED JSON-profile engine. Add bundled `fanuc_mill`, `fanuc_lathe_a`, `fanuc_lathe_b`, `sinumerik_iso` and `sinumerik_840d` profiles for motion, comments, arcs, positioning, reference returns, tool/spindle/coolant signals, dwell, units and program wrappers. |
| 7 | +- Make controller conversion an EXPANDED-only operation. FULL keeps the source controller/dialect and unfolds only flow/label-dependent constructs that cannot safely survive normalization: evaluated Macro B, IF/GOTO/WHILE, G65/M98/M99 and FANUC turning G70–G76. |
| 8 | +- Support four explicit EXPANDED arc outputs (relative IJK, absolute IJK, radius and linearized). Native SINUMERIK profiles emit absolute centers with `AC(...)`, radius with `CR=`, and preserve source comments through `;` formatting. |
| 9 | +- Treat Target CNC as a syntax/post-profile selector only: EXPANDED is one universal serializer, so every user output option (coordinates, sequence numbers, delimiter, leading zero, modal feed, decimal precision, force decimal, plus sign, arc output and start/end program text) remains available and is honored across FANUC→FANUC, FANUC→SINUMERIK ISO, FANUC→SINUMERIK native and SINUMERIK→FANUC. Profile values are defaults, not overrides. Remove the `allowProgramStartOverride` user-facing restriction so SINUMERIK keeps the mandatory `G290`/`G291` frame first and emits user start text after it. |
| 10 | +- Implement Safety Line in the EXPANDED serializer through a profile-declared `program.safety` block, so no visible export setting is silently ignored. Route serialization cancellation into the FULL/EXPANDED serializers so Cancel stops a heavy export instead of only the final write. |
| 11 | +- Reorganize the Export Data dialog into two visually separated columns without group titles, rename `As source (no conversion)` to `Auto (source controller)`, drop the old address-force control, and drive option availability by export mode only. A concrete Target CNC no longer disables ordinary formatting controls. |
| 12 | +- Move mandatory frame-word output and word ordering into the post profile: `format.words` now defines `order` and `required` for `motion`, `X`, `Y`, `Z`, `A`, `B`, `C`, `I`, `J`, `K` and `R`, with per-word `decimals`/`sign` in the same object. Address requiredness is a property of the specific post/controller, so it now lives in the profile (`format.words.required`) instead of a separate generic axis setting; `required=true` forces an address when it has a resolved value, `motion.required=false` makes the motion code modal, an axis entry is only valid when declared in `supports.axes`, and `F` is excluded because feed is managed by Modal Feed. |
| 13 | +- Add bundled `fanuc_mill_multiaxis` and `sinumerik_840d_multiaxis` post profiles that declare `supports.axes` `X/Y/Z/A/B/C` and emit explicit resolved rotary coordinates. They preserve export ability for programs with explicit rotary axes without weakening the three-axis `fanuc_mill` and `sinumerik_840d` profiles; TCP/tilted-plane/CYCLE800 semantics remain unsupported on both. |
| 14 | +- Unify GUI, single-file `export` and `batch-export` on one `ExportRequest`/`write_export` contract. The GUI only fills the shared request from the dialog; all target mapping, option resolution, conversion and atomic writing happen in the shared export service, so CLI and batch output is byte-identical to the GUI for the same settings. |
| 15 | +- Add a mandatory batch-export semantic regression gate (`tests/export/test_batch_export_semantics.py`, `tests/export_signatures.py`) that runs the four conversion scenarios and re-executes every successfully exported program, comparing the strict per-motion trajectory signature with the source and reporting a conversion that cannot preserve it. |
| 16 | +- Refine the three-axis conversion guard so a selected kinematics profile, G65 arguments and non-rotary turning A/C words do not masquerade as rotary geometry; actual rotary/TWP/TCP use remains fail-closed. |
| 17 | +- Correct DXF planar-arc OCS/direction handling, including tilted-plane normals and exact 180-degree arcs, while keeping analytical arcs/circles where representable and sampled polylines for multi-turn/helical geometry. |
| 18 | +- Replace the stale batch helper set with four explicit conversion scripts for FANUC mill → SINUMERIK native, FANUC mill → SINUMERIK ISO-M, FANUC lathe Type A → Type B, and SINUMERIK native → FANUC mill; outputs go to `tmp/test_export`. |
| 19 | +- Add export-contract regression coverage: the 1.9.2 golden corpus remains a semantic reference, while current FULL/EXPANDED behavior and post profiles are tested as the release contract rather than requiring historical text serialization. |
| 20 | + |
3 | 21 | ## 1.9.2 - 2026-10-05 |
4 | 22 |
|
5 | 23 | - Shorten sandbox test7 playback to a brief Play followed by 10% slider steps and completion; retain complete continuous playback for the flange and turning Stock Removal. |
|
0 commit comments