File dialogs & artefact helpers (#6) #36

Merged
gronod merged 2 commits from feat/6-file-dialogs into milestone/m1-foundation 2026-09-08 19:06:27 +01:00
Owner

Implements issue #6 (M1).

  • PathSecurity.sanitizeBasename — rejects /, \, .., empty; never invents a default basename (#60).
  • PathSecurity.resolveSafeCwd — explicit dir → Documents → Home → app-data; never returns empty (#59).
  • AtomicFileWriter.tmp + replaceItemAt/move; parent dirs created (#213 convention).
  • ArtefactProbeverify_stage_artefacts (.ti1/.ti2/.ti3/profile + profilePath), .icm-over-.icc resolution with .icc macOS default (#69), artefact enumeration covering .tif, .N.tif, _NN.tif, _passN.ti3, and the CAL_ namespace.
  • FileDialogServiceNSOpenPanel/NSSavePanel wrappers: directory (Documents default), .ti1/.ti2/existing-target, .ti3, .icc/.icm, .cal, save panel.

Also includes the #3 follow-up commit: ad-hoc sign+verify in fetch-argyll.sh, and the real 448v/892f sRGB.gam.

Verified: 40/40 tests pass.

Closes #6

Implements issue #6 (M1). - `PathSecurity.sanitizeBasename` — rejects `/`, `\`, `..`, empty; never invents a default basename (#60). - `PathSecurity.resolveSafeCwd` — explicit dir → Documents → Home → app-data; never returns empty (#59). - `AtomicFileWriter` — `.tmp` + `replaceItemAt`/move; parent dirs created (#213 convention). - `ArtefactProbe` — `verify_stage_artefacts` (`.ti1`/`.ti2`/`.ti3`/profile + `profilePath`), `.icm`-over-`.icc` resolution with `.icc` macOS default (#69), artefact enumeration covering `.tif`, `.N.tif`, `_NN.tif`, `_passN.ti3`, and the `CAL_` namespace. - `FileDialogService` — `NSOpenPanel`/`NSSavePanel` wrappers: directory (Documents default), `.ti1`/`.ti2`/existing-target, `.ti3`, `.icc`/`.icm`, `.cal`, save panel. Also includes the #3 follow-up commit: ad-hoc sign+verify in `fetch-argyll.sh`, and the **real** 448v/892f `sRGB.gam`. Verified: 40/40 tests pass. Closes #6
gronod added the
Priority
Medium
3
Project/ICCery-v2Feature/Backend
labels 2026-09-08 19:06:19 +01:00
gronod added 2 commits 2026-09-08 19:06:21 +01:00
- 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>
- PathSecurity: basename sanitisation (reject / \ .., empty); resolveSafeCwd explicit - Documents - Home - app-data (#59, #60)
- AtomicFileWriter: .tmp + rename/replaceItemAt, parent dirs (#213)
- ArtefactProbe: verify_stage_artefacts, .icm-over-.icc resolution (#69), enumeration incl. .N.tif/_NN.tif/_passN.ti3/CAL_
- FileDialogService: NSOpenPanel/NSSavePanel wrappers (v2 select_* equivalents)
- 11 new tests; 40/40 total green

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
gronod merged commit 3d206e27c1 into milestone/m1-foundation 2026-09-08 19:06:27 +01:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gronod/iccery-v2-mac#36