Files
gronod ecbf46723b
macOS CI / build-and-test (push) Skipped
feat(print): #218 Stage 2 paper-source selection + orientation dropdown
- Detect vendor tray keys in CupsParsers with InputSlot/MediaSource/EPIJ_FdSo/EPIJ_PSrc/CNIJMediaSupply roster; EPIJ_FdSo wins over EPIJ_PSrc.
- PrinterTray now carries raw token + display name; PrinterCapabilities exposes trayKey, trayDefault and tray-specific quality maps.
- CupsService enumerates trays from the detected key, enriches labels from PPD, seeds selection from CUPS default, and precomputes per-tray media→quality constraints.
- MediaQualityConstraints resolves quality availability from both selected media and selected tray, falling back to the media-only map.
- TicketWriteResolver emits the selected tray key=token in the locked write order between PageSize and media key.
- PrintPanelService applies the Stage 2 tray token to PMPrintSettings on open and captures the tray back from the full roster plus AP_D_InputSlot.
- PrintSessionViewModel keeps selectedTrayToken, applies capture-back, preserves unknown captured tokens as synthetic trays, and passes tray into spool overrides.
- Stage2View replaces portrait/landscape buttons with an orientation dropdown (printerOrientationSelect) while preserving portrait/landscape semantics and orientation-requested=3|4.
- Add/update core, UI and fixture tests for tray detection, enumeration, PPD labels, defaults, unknown-token synthesis, panel capture, ticket write order and tray-aware quality clamping.
- Update docs/10-print-system.md, docs/11-print-macos.md, docs/21-ui-reference.md and docs/24-issues-invariants.md.

Verified on the macOS 12.7.6 x86_64 CI runner: xcodebuild build-for-testing and ICCeryCoreTests pass (557 tests, 0 failures).
2026-09-22 19:19:33 +01:00
..

ICCery Rewrite Specification

Product: ICCery — printer ICC/ICM profiling frontend for ArgyllCMS
Source analysed: git.i3omb.com/gronod/ICCery v0.8.5 (main, merge #229)
Related: gronod/argyllcms (fork of ArgyllCMS 3.5.0), gronod/ICCery-CPU (TargetPrint)
Current stack (do not reuse): Tauri v2 + Rust host + vanilla JS + Three.js
Licence: ICCery GUI is proprietary EULA; ArgyllCMS binaries are AGPLv3 and must remain subprocess-isolated (stdin/stdout/stderr only — never link)

This folder is a complete functional specification of the existing application so it can be reimplemented in a different stack under the same name, using the same graphical assets (CMY ice-cream-cone wordmark).

How to use these documents

Read in this order if you are implementing:

  1. 01-overview.md — product, wizard, platforms
  2. 02-architecture.md — process isolation, modules, events
  3. 03-ipc-and-process-manager.md — spawn / stdin / kill contract
  4. 04-argyll-binaries.md — every Argyll CLI invocation
  5. 05-argyll-fork.md — -u JSON protocols, instlist, -Y l, Windows pipe fix
  6. Wizard stages: 06 → 07 → 08 → 09 → 15 → 16 → 17
  7. Print (critical): 10 → 11-print-macos.md → 12 → 13 → 14
  8. 18-gamut-viewer.md
  9. 21-ui-reference.md — every control id
  10. 24-issues-invariants.md — bugs that must not be repeated
  11. 25-rewrite-notes.md — stack-agnostic idiosyncrasies
  12. 26-v2-mac-ticket-plan.md — reviewed Gitea milestone/ticket plan for the macOS SwiftUI rewrite (executable; supersedes the 2026-09-08 draft)

Non-goals of the original (do not reintroduce)

  • Display calibration wizard (dispwin / dispread) — won't-fix (#90)
  • i18n (en/de/fr/ja) — won't-fix (#96); Argyll diagnostics are English-only
  • Linking against Argyll as a library (AGPL contamination)

Source map (legacy Tauri tree)

Area Path
Wizard HTML src/index.html
Frontend modules src/js/*.js
Styles src/styles/main.css
Logo src/assets/ICCery-logo.svg
Rust host src-tauri/src/
Print backends src-tauri/src/print/{mod,macos,windows,unix}.rs
Argyll sidecars src-tauri/argyll/<platform>/ (not in git; npm run fetch-argyll)
Bundled sRGB gamut src/assets/sRGB.gam

Analysed at 2026-09-08 from Gitea (109 ICCery issues, 13 Argyll-fork issues, 3 ICCery-CPU issues) plus a full source read of v0.8.5.