From 4621d734ff9d454525235d04fbab2bb2b7ef816f Mon Sep 17 00:00:00 2001 From: Gronod Date: Sun, 6 Sep 2026 09:40:18 +0100 Subject: [PATCH 1/3] ci(macos): enable DMG AppleScript background on Gitea runners (#189) Port the GitHub runner fix (d51bae7) to .gitea/workflows/build-macos.yml: warm Finder/System Events before tauri build, and set TAURI_BUNDLER_DMG_IGNORE_CI=true so create-dmg does not skip AppleScript under CI=true. Tighten DMG/.app discovery to the release bundle paths. Closes #189 for the Gitea workflow. --- .gitea/workflows/build-macos.yml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/build-macos.yml b/.gitea/workflows/build-macos.yml index 05d1093..79ed3ff 100644 --- a/.gitea/workflows/build-macos.yml +++ b/.gitea/workflows/build-macos.yml @@ -84,7 +84,23 @@ jobs: echo "SHORT_SHA=${SHORT_SHA}" >> $GITHUB_ENV echo "PREFIX=ICCery_${TAG}-${SHORT_SHA}-macos-${{ matrix.platform.arch }}" >> $GITHUB_ENV + - name: Warm up macOS GUI for DMG layout + shell: bash + run: | + # Tauri's DMG bundler runs Finder AppleScript to set the background + # picture and icon positions. On CI Macs, Finder/Aqua may be idle, + # which causes AppleEvent timeouts (-1712). Wake them before build. + echo "WindowServer: $(pgrep -l WindowServer || echo 'NOT RUNNING')" + echo "console user: $(stat -f '%Su' /dev/console 2>/dev/null || echo unknown)" + echo "whoami: $(whoami)" + open -g -a Finder || true + open -g -a "System Events" || true + osascript -e 'tell application "Finder" to get name' || true + sleep 10 + - name: Build Tauri App + env: + TAURI_BUNDLER_DMG_IGNORE_CI: "true" run: npm run tauri build -- --target ${{ matrix.platform.target }} - name: Prepare Release Assets @@ -93,13 +109,13 @@ jobs: mkdir -p release-assets # Stage DMG package - DMG_FILE=$(find src-tauri/target -type f -name "*.dmg" | head -n 1) + DMG_FILE=$(find src-tauri/target -type f -path "*/release/bundle/dmg/*.dmg" | head -n 1) if [ -n "$DMG_FILE" ] && [ -f "$DMG_FILE" ]; then cp "$DMG_FILE" "release-assets/${PREFIX}.dmg" fi # Stage ZIP archive of .app bundle - APP_DIR=$(find src-tauri/target -type d -name "*.app" | head -n 1) + APP_DIR=$(find src-tauri/target -type d -path "*/release/bundle/macos/*.app" | head -n 1) if [ -n "$APP_DIR" ] && [ -d "$APP_DIR" ]; then APP_PARENT=$(dirname "$APP_DIR") APP_NAME=$(basename "$APP_DIR") -- 2.39.5 From ebcb3cdc2a20b2d960cdb3b42d5912ab9a980e68 Mon Sep 17 00:00:00 2001 From: Gronod Date: Sun, 6 Sep 2026 12:22:37 +0100 Subject: [PATCH 2/3] ci(macos): drop redundant .zip archive from macOS release assets --- .gitea/workflows/build-macos.yml | 7 ------- .github/workflows/build-macos.yml | 7 ------- 2 files changed, 14 deletions(-) diff --git a/.gitea/workflows/build-macos.yml b/.gitea/workflows/build-macos.yml index 79ed3ff..ccf8360 100644 --- a/.gitea/workflows/build-macos.yml +++ b/.gitea/workflows/build-macos.yml @@ -114,13 +114,6 @@ jobs: cp "$DMG_FILE" "release-assets/${PREFIX}.dmg" fi - # Stage ZIP archive of .app bundle - APP_DIR=$(find src-tauri/target -type d -path "*/release/bundle/macos/*.app" | head -n 1) - if [ -n "$APP_DIR" ] && [ -d "$APP_DIR" ]; then - APP_PARENT=$(dirname "$APP_DIR") - APP_NAME=$(basename "$APP_DIR") - (cd "$APP_PARENT" && zip -r "${GITHUB_WORKSPACE}/release-assets/${PREFIX}.zip" "$APP_NAME") - fi - name: Upload Artifacts uses: actions/upload-artifact@v3 diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 2b55223..e0c89ab 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -103,13 +103,6 @@ jobs: cp "$DMG_FILE" "release-assets/${PREFIX}.dmg" fi - # Stage ZIP archive of .app bundle - APP_DIR=$(find src-tauri/target -type d -path "*/release/bundle/macos/*.app" | head -n 1) - if [ -n "$APP_DIR" ] && [ -d "$APP_DIR" ]; then - APP_PARENT=$(dirname "$APP_DIR") - APP_NAME=$(basename "$APP_DIR") - (cd "$APP_PARENT" && zip -r "${GITHUB_WORKSPACE}/release-assets/${PREFIX}.zip" "$APP_NAME") - fi - name: Upload Artifacts uses: actions/upload-artifact@v4 -- 2.39.5 From c5ff3d1a49dc5b45d12b6adb07c6dabdaf7d2a0b Mon Sep 17 00:00:00 2001 From: Gronod Date: Sun, 6 Sep 2026 12:41:32 +0100 Subject: [PATCH 3/3] docs: resolve documentation and license inaccuracies (#214) --- AGENTS.md | 4 ++-- README.md | 2 +- ROADMAP.md | 2 +- THIRDPARTY-LICENSES.md | 30 ++++++++++++++++++------------ src/index.html | 6 +++--- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3d8698e..1c354ca 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -115,7 +115,7 @@ The "Preferences" button opens the native macOS `NSPrintPanel` (not CUPS web UI - Record schema (`VerificationRecord` in `src-tauri/src/quality_store.rs`): - `id`: unique record identifier in the format `vr--`. - `profile_name`: target profile filename. - - `printer`: device name captured at print spooling (`wizardState.printerName`), or "Unknown". + - `printer_name`: device name captured at print spooling (`wizardState.printerName`), or "Unknown". - `avg_de`, `max_de`, `rms_de`: CIEDE2000 metrics from `profcheck` (using `-u` JSON summary). - `patch_count`: number of test patches evaluated. - `status`: classified status using **ICCery verification bands (issue #95)**: @@ -124,7 +124,7 @@ The "Preferences" button opens the native macOS `NSPrintPanel` (not CUPS web UI - `< 3.5`: "Acceptable" (`badge-acceptable`) - `>= 3.5`: "Warning" (`badge-poor`) - `timestamp`: ISO-8601 UTC string. -- Max capacity is 500 records; oldest records evicted on overflow. +- Max capacity is 1,000 records; oldest records evicted on overflow. - Atomic file writes (`.tmp` write followed by `rename`) prevent data corruption. - Tauri IPC command casing: - Nested struct fields (`VerificationRecord`) serialize with `snake_case`. diff --git a/README.md b/README.md index 9ae4e4f..e46f791 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ - **Noise Reduction**: Multi-pass sheet averaging (`average`) to eliminate spectrophotometer noise. 4. **Stage 4 — Profile Calculation (`colprof`)**: Generate high-precision cLUT mathematical ICC/ICM profiles with configurable algorithm quality, OBA/FWA compensation (`-f`), illuminant (`-i`) and observer (`-o`) overrides, viewing-condition transforms (`-c`, `-d`), custom ambient spectrum support, descriptions, and copyright tagging. 5. **Stage 5 — Verification, Drift Analytics & 3D Gamut (`profcheck` + `iccgamut`)**: - - **Longitudinal Printer Drift Analytics (#95)**: Historical verification logging persisted to `verification_history.json` (up to 500 records), an interactive dual-series SVG trend chart with shaded ICCery verification reference bands, consecutive-breach alert recommendation card (detecting drift across distinct dates or $\ge 1$ hour apart), and RFC-4180 compliant CSV export. + - **Longitudinal Printer Drift Analytics (#95)**: Historical verification logging persisted to `verification_history.json` (up to 1,000 records), an interactive dual-series SVG trend chart with shaded ICCery verification reference bands, consecutive-breach alert recommendation card (detecting drift across distinct dates or $\ge 1$ hour apart), and RFC-4180 compliant CSV export. - **Mathematical Accuracy Report**: Peak, Average, and RMS CIEDE2000 metrics with robust parsing of both Argyll JSON summaries (`-u`) and legacy plain-text reports. - **Interactive 3D Gamut Viewer**: CIELAB coordinate scaffold with crisp CSS2D labels, per-vertex true-colour profile gamut shading, layer visibility toggles and opacity sliders, camera reset (press **R**), touch controls, and bundled sRGB reference wireframe comparison. - 📊 **CGATS Dataset Interoperability (#94)**: Native parser for external CGATS and Argyll `.ti3` datasets with canonical normalization (0–255 scaling, field aliasing, metadata synthesis) and direct-jump workflows to Stage 4 (Profile Calculation) and Stage 5 (Verification). diff --git a/ROADMAP.md b/ROADMAP.md index 4d489ae..2a3e238 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -104,7 +104,7 @@ ICCery is a native, cross-platform desktop application built with: - [x] **macOS CI Cross-Compilation Testing**: Hardened `.gitea/workflows/build-macos.yml` by compiling Apple Silicon tests with `--no-run` on Intel runner hosts to avoid architecture execution mismatch. ### Milestone 12 — Future Workflow & Advanced Analytics (`v0.8.2`) -- [x] **Printer Drift Tracking & Verification Analytics (#95)**: Track longitudinal printer drift in Stage 5 over time with historical run logging in `verification_history.json` (500 records), interactive dual-series SVG trend chart with ICCery verification reference bands, consecutive-breach alert recommendation card, and RFC-4180 CSV export. +- [x] **Printer Drift Tracking & Verification Analytics (#95)**: Track longitudinal printer drift in Stage 5 over time with historical run logging in `verification_history.json` (1,000 records), interactive dual-series SVG trend chart with ICCery verification reference bands, consecutive-breach alert recommendation card, and RFC-4180 CSV export. - [x] **XY Automated Scanning Tables (#93)**: Full Stage 3 support for automated XY scanning tables (GretagMacbeth SpectroScan, X-Rite i1iO) with pure multi-line prompt classification, fiducial alignment prompts, 4-step sequence checklist, and graceful head parking on cancel. - [ ] ~~**Multi-Language Localization (#96)**~~: *Closed — Won't Fix* (English UI retained as standard color-management terminology). diff --git a/THIRDPARTY-LICENSES.md b/THIRDPARTY-LICENSES.md index 0ed91df..dc13118 100644 --- a/THIRDPARTY-LICENSES.md +++ b/THIRDPARTY-LICENSES.md @@ -23,20 +23,26 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -## Delaunator -Copyright (c) 2017, Mapbox +## quickhull3d +MIT License -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. ## Tauri Framework & Rust Dependencies Copyright (c) 2019-present, Tauri Programme within The Commons Conservancy. diff --git a/src/index.html b/src/index.html index e79a503..9e4adc1 100644 --- a/src/index.html +++ b/src/index.html @@ -1059,9 +1059,9 @@

Copyright (c) 2010-2023 three.js authors

-
Delaunator
-

Copyright (c) 2017, Mapbox

- +
quickhull3d
+

MIT License

+
Tauri Framework & Rust Dependencies

Copyright (c) 2019-present, Tauri Programme within The Commons Conservancy.

-- 2.39.5