Milestone 11 — Printer settings completeness & dialog binding (#183, #180, #181, #186) #199

Merged
gronod merged 11 commits from milestone/m11-print-settings into develop 2026-09-16 00:12:00 +01:00
Owner

This PR is opened for CI only — merge is DEFERRED to a later session pending the Actions run and the hardware gate (R6/R12). Do not merge.

Issue completion matrix

Issue Summary Feature PR Merge tip
#183 Stage 2 paper-size + quality selection: CUPS caps parse, LpArgs emit, picker UI #193 51c3073
#180 Epson EPIJ_Qual seven-option quality enumeration with driver order + PPD labels #194 c9b423b
#181 Canon PPD locale precedence (unqualified > en_US > en > first-qualified), UTF-8-first/Latin-1-fallback decode, <XX> hex escapes #195 1767792
#186 NSPrintPanel bound to selected queue with paper/quality/media/orientation preselected + capture-return #196 6adbf99

Integration commits on this head

  • Phase 6.0 docs hygiene — PR #197 (docs/21 a11y-id roster: paperSizeGroup, printerPaperSizeSelect, qualityGroup, printerQualitySelect)
  • Phase 6 develop sync — PR #198 (merged origin/develop@62a45d9 in via chore/m11-sync-develop, tree-empty, no rebase)

Gate evidence

Full host-arch gate on this exact head SHA 19f619ad98fc8a5c18481517388e29e4033326fc (x86_64):

  • ICCeryCoreTests: 483 passed / 0 failed
  • ICCeryUITests: 67 passed / 0 failed — real ICCeryUITests.xctest pass summary, no UI-skip warning
  • Log: build/m11-sync-gate.log

Phase 5 milestone gate at 6adbf99 (pre-sync, same tree): Core 483/0, UI 67/0.

Deferred

  • Hardware gate (real Epson EPIJ_Qual enumeration, real Canon Pro9500 media labels, driver-PDE preselect acceptance via capture echo, lp argv) — milestone exit gate, not a PR blocker.
  • Milestone 34 remains open.

Refs #183
Refs #180
Refs #181
Refs #186

**This PR is opened for CI only — merge is DEFERRED to a later session pending the Actions run and the hardware gate (R6/R12). Do not merge.** ## Issue completion matrix | Issue | Summary | Feature PR | Merge tip | |---|---|---|---| | #183 | Stage 2 paper-size + quality selection: CUPS caps parse, `LpArgs` emit, picker UI | #193 | `51c3073` | | #180 | Epson `EPIJ_Qual` seven-option quality enumeration with driver order + PPD labels | #194 | `c9b423b` | | #181 | Canon PPD locale precedence (unqualified > en_US > en > first-qualified), UTF-8-first/Latin-1-fallback decode, `<XX>` hex escapes | #195 | `1767792` | | #186 | NSPrintPanel bound to selected queue with paper/quality/media/orientation preselected + capture-return | #196 | `6adbf99` | ## Integration commits on this head - Phase 6.0 docs hygiene — PR #197 (`docs/21` a11y-id roster: `paperSizeGroup`, `printerPaperSizeSelect`, `qualityGroup`, `printerQualitySelect`) - Phase 6 develop sync — PR #198 (merged `origin/develop@62a45d9` in via `chore/m11-sync-develop`, tree-empty, no rebase) ## Gate evidence Full host-arch gate on this exact head SHA `19f619ad98fc8a5c18481517388e29e4033326fc` (x86_64): - ICCeryCoreTests: **483 passed / 0 failed** - ICCeryUITests: **67 passed / 0 failed** — real `ICCeryUITests.xctest` pass summary, no UI-skip warning - Log: `build/m11-sync-gate.log` Phase 5 milestone gate at `6adbf99` (pre-sync, same tree): Core 483/0, UI 67/0. ## Deferred - Hardware gate (real Epson `EPIJ_Qual` enumeration, real Canon Pro9500 media labels, driver-PDE preselect acceptance via capture echo, `lp` argv) — milestone exit gate, not a PR blocker. - Milestone 34 remains open. Refs #183 Refs #180 Refs #181 Refs #186
gronod added 11 commits 2026-09-15 22:26:05 +01:00
feat(print): Stage 2 paper size + quality selection (#183)
macOS CI / build-and-test (push) Skipped
37d1f7eb24
Devin-AI: Devin <devin@cognition.ai>
Co-authored-by: Devin <devin@cognition.ai>
fix(print): enumerate all EPIJ_Qual quality options (#180)
macOS CI / build-and-test (push) Skipped
79209eb911
The Phase 1 (#183) quality plumbing already covers detection,
extraction, capture, and lp emission — this change proves the Epson
path end-to-end with recorded fixtures.

- CupsParserTests: replace the synthetic cupsPrintQuality listing with
  the recorded XP-55 line (301 302 *303 308 304 305 307 — driver order,
  308 between 303 and 304); assert all seven ids enumerate unsorted,
  the * default is 303, all seven PPD labels resolve, and EPIJ_Qual
  wins detection over OutputMode/Resolution (R11).
- CupsOptionsFilterTests: captured EPIJ_Qual + canonical quality keys
  survive the filter (roster verified complete post-#183 — no source
  change needed; EPIJ_Quality kept as harmless alias, R16).
- LpArgsTests: explicit quality 305 emits -o EPIJ_Qual=305.
- PrintSessionViewModelTests + UI lpoptions fixture: recorded
  seven-choice line feeds the picker; Stage 2 picker lists all seven
  entries in driver order (new UI test).

Devin-AI: Devin <devin@cognition.ai>
Co-authored-by: Devin <devin@cognition.ai>
Refs #181

Co-Authored-By: Devin <devin@cognition.ai>
Refs #186

Co-Authored-By: Devin <devin@cognition.ai>
docs(ui): add M11 printer settings a11y ids to stage-2 roster
macOS CI / build-and-test (push) Skipped
d228594bd3
Refs #183
Merge branch 'develop' into chore/m11-sync-develop
macOS CI / build-and-test (push) Skipped
macOS CI / build-and-test (pull_request) Successful in 42m51s
macOS CI / package (pull_request) Skipped
19f619ad98
gronod merged commit 5e696ff3e9 into develop 2026-09-16 00:12:00 +01:00
Author
Owner

M11 milestone-closure summary

PR #199 merged into develop — merge commit 5e696ff3e9b21b5263e83d495de582363aeecdda (style=merge, expected head 19f619a verified pre-merge, branch retained).

Gate evidence

  • Local full gate at head 19f619a (x86_64): ICCeryCoreTests 483/0, ICCeryUITests 67/0, real xctest pass summary, no UI-skip warning (build/m11-sync-gate.log).
  • Pre-merge PR CI: Actions run 37196 — Core 483/0, UI 66 executed / 1 skipped (known no-Metal testResetCameraInteractsWithScene) / 0 failed.
  • Post-merge develop CI: Actions run 37303 on 5e696ff — first attempt flaked with 2 UI assertion failures (testSpotReadButtonDisabledDuringChartread, testViewGamutOpensSceneKitSheet) on a tree identical to 19f619a (verified git diff --quiet); rerun green: Core unit step success, UI 66 executed / 1 skipped / 0 failed, package job success (DMG artifact uploaded).

Hardware gate evidence (R6/R12 — now closed)

Verified on real queues Epson_XP_55_Series (lpd) and Canon_Pro9500_II_series (smb), app build at 19f619a:

  1. Epson: lpoptions -l shows EPIJ_Qual: 301 302 *303 308 304 305 307 — all seven choices; in-app Stage 2 quality picker lists all seven with English labels (Fast Economy … Best Quality). ✓
  2. Canon: CNIJMediaType enumerates 18 choices; PPD carries unqualified English labels + 19 qualified locales incl. Thai — picker shows English labels only, no Thai. ✓
  3. Panel binding: printer properties opened with a non-default queue selected — panel printer popup bound to the selected queue; paper/quality/media/orientation preselected to match ICCery. ✓
  4. Capture echo: value changed in dialog → "Settings captured" notice; CUPS job tickets for the resulting spools carry the captured keys — job 42 (Epson): EPIJ_Qual=307, PageSize=A4, EPIJ_PageSize=A4, EPIJ_Medi=15, orientation-requested=portrait; job 43 (Canon): CNIJMediaType=0, PageSize=A4, orientation-requested=portrait; both carry AP.ColorMatchingMode=AP_ApplicationColorMatching + AP_ColorMatchingMode=AP_ApplicationColorMatching suppression. ✓

Issue → PR map

Issue Feature PR Merge tip
#183 #193 51c3073
#180 #194 c9b423b
#181 #195 1767792
#186 #196 6adbf99

Plus integration: #197 (docs hygiene), #198 (develop sync). Milestone 34 closing with zero open issues.

## M11 milestone-closure summary PR #199 merged into `develop` — merge commit `5e696ff3e9b21b5263e83d495de582363aeecdda` (style=merge, expected head `19f619a` verified pre-merge, branch retained). ### Gate evidence - Local full gate at head `19f619a` (x86_64): ICCeryCoreTests **483/0**, ICCeryUITests **67/0**, real xctest pass summary, no UI-skip warning (`build/m11-sync-gate.log`). - Pre-merge PR CI: Actions run **37196** — Core 483/0, UI 66 executed / 1 skipped (known no-Metal `testResetCameraInteractsWithScene`) / 0 failed. - Post-merge develop CI: Actions run **37303** on `5e696ff` — first attempt flaked with 2 UI assertion failures (`testSpotReadButtonDisabledDuringChartread`, `testViewGamutOpensSceneKitSheet`) on a **tree identical** to `19f619a` (verified `git diff --quiet`); rerun green: Core unit step success, UI **66 executed / 1 skipped / 0 failed**, package job success (DMG artifact uploaded). ### Hardware gate evidence (R6/R12 — now closed) Verified on real queues `Epson_XP_55_Series` (lpd) and `Canon_Pro9500_II_series` (smb), app build at `19f619a`: 1. Epson: `lpoptions -l` shows `EPIJ_Qual: 301 302 *303 308 304 305 307` — all seven choices; in-app Stage 2 quality picker lists all seven with English labels (Fast Economy … Best Quality). ✓ 2. Canon: `CNIJMediaType` enumerates 18 choices; PPD carries unqualified English labels + 19 qualified locales incl. Thai — picker shows English labels only, no Thai. ✓ 3. Panel binding: printer properties opened with a non-default queue selected — panel printer popup bound to the selected queue; paper/quality/media/orientation preselected to match ICCery. ✓ 4. Capture echo: value changed in dialog → "Settings captured" notice; CUPS job tickets for the resulting spools carry the captured keys — job 42 (Epson): `EPIJ_Qual=307`, `PageSize=A4`, `EPIJ_PageSize=A4`, `EPIJ_Medi=15`, `orientation-requested=portrait`; job 43 (Canon): `CNIJMediaType=0`, `PageSize=A4`, `orientation-requested=portrait`; both carry `AP.ColorMatchingMode=AP_ApplicationColorMatching` + `AP_ColorMatchingMode=AP_ApplicationColorMatching` suppression. ✓ ### Issue → PR map | Issue | Feature PR | Merge tip | |---|---|---| | #183 | #193 | `51c3073` | | #180 | #194 | `c9b423b` | | #181 | #195 | `1767792` | | #186 | #196 | `6adbf99` | Plus integration: #197 (docs hygiene), #198 (develop sync). Milestone 34 closing with zero open issues.
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#199