Feature: Stage 1 - Patch Set Configuration & targen Integration #3

Closed
opened 2026-08-21 10:29:29 +01:00 by gronod · 0 comments
Owner

Description

Implement the Stage 1 Target Generation wizard step. The user configures colour patch parameters and the Rust backend spawns targen via ProcessManager to generate a .ti1 target definition file.

Toolchain Context

  • Backend: Rust (Tauri 2) — spawns targen as a sidecar binary resolved via commands::resolve_binary()
  • Frontend: Vanilla JS in Tauri webview, communicates via window.__TAURI__.core.invoke()
  • IPC: Process events streamed via process:stdout / process:stderr / process:exit Tauri event channels defined in src-tauri/src/events.rs

Implementation Plan

Backend (Rust)

  1. New Tauri command commands::run_targen(app, state, config) in src-tauri/src/commands.rs:
    • Accept a TargenConfig struct (serde-deserialisable): { colour_space: "rgb"|"cmyk", patch_count: u32, white_patches: Option<u32>, black_patches: Option<u32>, basename: String }
    • Resolve binary path via resolve_binary(app, "targen")
    • Build argument vector: ["-v", "-d", <2|4>, "-f", <count>, "-e", <white>, "-B", <black>, <basename>]
    • Spawn via state.spawn(app, "targen", binary, args)
  2. File validation: After process exits, verify .ti1 file exists at expected path. Emit process:complete event with file metadata or error.
  3. Working directory management: Add cwd parameter to ProcessManager::spawn() so targen writes output to a user-selected project directory.

Frontend (JavaScript)

  1. Stage 1 panel (src/index.html #stage-1):
    • Colour space toggle (RGB / CMYK) → maps to -d 2 / -d 4
    • Patch count selector: preset dropdown (Draft 400, Standard 800, High 1500, Ultra 2500) + custom numeric input
    • Neutral axis boost: optional white patch count (-e) and black patch count (-B) inputs
    • "Generate Target" button triggers invoke('run_targen', { config })
  2. Progress feedback: Listen to process:stdout events; display raw targen output in a collapsible log panel. Show spinner during execution.
  3. Completion: On process:exit with code 0, auto-advance stepper to Stage 2. On error, display stderr output with retry option.

New/Modified Files

  • [MODIFY] src-tauri/src/commands.rs — add run_targen command and TargenConfig struct
  • [MODIFY] src-tauri/src/process_manager.rs — add cwd support to spawn()
  • [MODIFY] src/index.html — expand Stage 1 form controls
  • [NEW] src/js/targen.js — Stage 1 frontend logic (invoke, event listeners, validation)
  • [MODIFY] src/styles/main.css — form styling for new controls

Acceptance Criteria

  • User can select RGB or CMYK colour space
  • User can select patch count from presets or enter a custom value
  • Clicking "Generate" spawns targen and produces a valid .ti1 file
  • Stderr/stdout output visible in collapsible log panel
  • Errors are surfaced to the user with a retry option
  • Wizard auto-advances to Stage 2 on success

References

### Description Implement the Stage 1 Target Generation wizard step. The user configures colour patch parameters and the Rust backend spawns `targen` via `ProcessManager` to generate a `.ti1` target definition file. ### Toolchain Context - **Backend**: Rust (Tauri 2) — spawns `targen` as a sidecar binary resolved via `commands::resolve_binary()` - **Frontend**: Vanilla JS in Tauri webview, communicates via `window.__TAURI__.core.invoke()` - **IPC**: Process events streamed via `process:stdout` / `process:stderr` / `process:exit` Tauri event channels defined in `src-tauri/src/events.rs` ### Implementation Plan #### Backend (Rust) 1. **New Tauri command** `commands::run_targen(app, state, config)` in `src-tauri/src/commands.rs`: - Accept a `TargenConfig` struct (serde-deserialisable): `{ colour_space: "rgb"|"cmyk", patch_count: u32, white_patches: Option<u32>, black_patches: Option<u32>, basename: String }` - Resolve binary path via `resolve_binary(app, "targen")` - Build argument vector: `["-v", "-d", <2|4>, "-f", <count>, "-e", <white>, "-B", <black>, <basename>]` - Spawn via `state.spawn(app, "targen", binary, args)` 2. **File validation**: After process exits, verify `.ti1` file exists at expected path. Emit `process:complete` event with file metadata or error. 3. **Working directory management**: Add `cwd` parameter to `ProcessManager::spawn()` so targen writes output to a user-selected project directory. #### Frontend (JavaScript) 1. **Stage 1 panel** (`src/index.html` `#stage-1`): - Colour space toggle (RGB / CMYK) → maps to `-d 2` / `-d 4` - Patch count selector: preset dropdown (Draft 400, Standard 800, High 1500, Ultra 2500) + custom numeric input - Neutral axis boost: optional white patch count (`-e`) and black patch count (`-B`) inputs - "Generate Target" button triggers `invoke('run_targen', { config })` 2. **Progress feedback**: Listen to `process:stdout` events; display raw targen output in a collapsible log panel. Show spinner during execution. 3. **Completion**: On `process:exit` with code 0, auto-advance stepper to Stage 2. On error, display stderr output with retry option. #### New/Modified Files - `[MODIFY]` `src-tauri/src/commands.rs` — add `run_targen` command and `TargenConfig` struct - `[MODIFY]` `src-tauri/src/process_manager.rs` — add `cwd` support to `spawn()` - `[MODIFY]` `src/index.html` — expand Stage 1 form controls - `[NEW]` `src/js/targen.js` — Stage 1 frontend logic (invoke, event listeners, validation) - `[MODIFY]` `src/styles/main.css` — form styling for new controls ### Acceptance Criteria - [ ] User can select RGB or CMYK colour space - [ ] User can select patch count from presets or enter a custom value - [ ] Clicking "Generate" spawns targen and produces a valid `.ti1` file - [ ] Stderr/stdout output visible in collapsible log panel - [ ] Errors are surfaced to the user with a retry option - [ ] Wizard auto-advances to Stage 2 on success ### References - [README.md §4 — Stage 1: Patch Set Creation](README.md#4-stage-1-patch-set-creation-targen) - Upstream ArgyllCMS `targen`: [gronod/argyllcms](https://git.i3omb.com/gronod/argyllcms) - Existing process manager: `src-tauri/src/process_manager.rs`
gronod added this to the Milestone 2: Target Generation Pipeline milestone 2026-08-21 10:29:29 +01:00
Sign in to join this conversation.