# UI Machine File Helpers

## Purpose

`runtime/ui/ini-panel/machine-file-summary.js` contains small host-boundary
helpers for summarizing machine text file save/load actions. These helpers are
pure so browser UI panels, SDK-facing wrappers, and Node smoke tests can share
the same data shape without parsing log text.

The helpers do not implement CNC behavior. They only describe OPFS path mapping
and captured text lengths for machine files staged by the UI.

## `createMachineFileSaveSummary(paths, gcodePath)`

`paths` is the object returned by `saveMachineTextFiles(...)`.
`gcodePath` is the OPFS path returned by `saveGcodeProgram(...)`.

The returned summary has this shape:

```js
{
  iniOpfsPath: "linuxcnc/machines/xyzab-tdr/machine.ini",
  toolTableOpfsPath: "linuxcnc/machines/xyzab-tdr/tool.tbl",
  parameterOpfsPath: "linuxcnc/machines/xyzab-tdr/linuxcnc.var",
  gcodeOpfsPath: "linuxcnc/gcode/ui-session.ngc"
}
```

## `createMachineFileLoadSummary(files)`

`files` is the object returned by `loadMachineTextFiles(...)`.

The returned summary has this shape:

```js
{
  iniBytes: 26,
  toolTableBytes: 13,
  parameterBytes: 7
}
```

## Log Helpers

- `machineFileSaveLogLines(summary)` renders the staged OPFS paths.
- `machineFileLoadLogLines(summary)` renders the loaded byte lengths.

## Boundary Rules

- Do not parse G-code text in these helpers.
- Do not infer tool, parameter, kinematics, planner, or modal semantics.
- Do not derive new CNC behavior from the staged file names or lengths.
- Keep new fields limited to host/runtime boundary facts already produced by
  the LinuxCNC-owned runtime or UI staging layer.

## Validation

Run the focused Node smoke after changing these helpers:

```bash
wasm-port/tests/ui/node/verify_ini_panel_machine_file_summary.sh
```

The aggregate UI Node smoke is:

```bash
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
```
