- codesign -f -s - every fetched Mach-O, then codesign -dvv verify —
an unsigned sidecar now fails the script (#165)
- Replace the 8-cusp reference_gamuts stub with the real v0.8.5
src/assets/sRGB.gam (448 verts / 892 faces) used by the Stage 5
gamut overlay (#185)
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
- scripts/fetch-argyll.sh: POSIX sh port of fetch-argyll.mjs; queries
the Gitea release API for the *_macOS_universal_bin.tgz asset,
extracts Argyll_V*/bin, chmod+x, strips quarantine xattr; honors
ARGYLL_SERVER_URL / ARGYLL_REPO / ARGYLL_RELEASE_TAG / GITEA_TOKEN.
Verified end-to-end: 51 universal tools from v3.5.0-ICCery1.8.
- BinaryResolver: settings argyll_binary_dir override (existence-gated)
→ bundled Argyll/<platform>/, macos-universal preferred when instlist
marker present, else macos-arm64/macos-x86_64; constructed path
returned even when absent (spawn surfaces process:error). Mock and
reference-gamut helpers.
- Vendored tracked resources: mocks/{chartread,colprof,profcheck}.mock
+ reference_gamuts/sRGB.gam from ICCery v1, copied as a folder
reference so the Argyll/ subtree structure survives into the bundle.
- Build phase rsyncs Vendor/Argyll/ → Contents/Resources/Argyll/.
- AppDelegate: killAll via terminateLater so children are signaled
before teardown (#147/#149).
- 6 resolver tests + fetch script smoke-verified against real release.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
- actor ProcessManager: runStreaming + runCaptured (concurrent pipe
drain — no 64 KiB deadlock), sendStdin with independent stdin map
(#84), kill/killAll, duplicate-id rejection (#116)
- Multicast AsyncStream<ProcessEvent> bus: stdout/stderr/exit/error/
jsonRow (ROW_COLORS_JSON: prefix stripped)
- exit emitted exactly once, gated on both pipes reaching EOF so
buffered output is never lost on fast exits or kills
- ARGYLL_NOT_INTERACTIVE=1 on every child; argv logged with ~ home
sanitization; subprocess stdout→info, stderr→warn
- ProcessLineDecoder (byte-split at \n, UTF-8 safe, CRLF, unterminated
tail flush), JSONAccumulator (multiline JSON for instlist/profcheck/
manifest), ProcessID conventions
- 19 new tests incl. large-output captured run and stdin round-trip
- Fixup: entitlements gain com.apple.security.device.usb; sidebar
preset/Calibrate disabled and only Stage 1 enabled per #1 AC
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
XcodeGen-managed project (project.yml), SwiftUI single-window app
1280x800 / min 1100x700, dark theme tokens from docs/21, 270pt sidebar
with logo/preset select/Calibrate/stepper 1-5, notice banner, five
stage placeholders, ICCeryCore SPM package with AppPaths + WizardStage,
Swift Testing plumbing. Sandbox off, hardened runtime on, bundle id
com.gronod.iccery2.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>