Skip to content

feat(cmyk): add --pdf-cmyk CLI entry point for standalone CMYK post-pass (#632) - #652

Merged
jsboige merged 1 commit into
masterfrom
feat/pdf-cmyk-cli-entrypoint
Jul 2, 2026
Merged

feat(cmyk): add --pdf-cmyk CLI entry point for standalone CMYK post-pass (#632)#652
jsboige merged 1 commit into
masterfrom
feat/pdf-cmyk-cli-entrypoint

Conversation

@jsboige

@jsboige jsboige commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Problème

Le stage CMYK+OutputIntent Ghostscript de #632 ne tournait que dans le cadre d'un run pipeline Release complet :

  • le Mode par défaut omet ConverterMode.PdfCmykPostProcess (flag 1<<15) ;
  • le stage est Release-gated (GetEnabled → EnabledRelease).

Il n'existait aucun moyen d'appliquer le CMYK en standalone sur un bundle déjà généré. C'est pourtant exactement le besoin du tag : la régénération lourde du bundle se fait sur une machine worker sans Ghostscript, et le post-traitement CMYK imprimeur doit tourner sur la seule machine qui a GS (ai-01) — sans re-harvester.

Changement

Ajoute une sous-commande --pdf-cmyk (mirroir des entry-points --validate-* existants) :

  • Mode = ConverterMode.PdfCmykPostProcess seul → aucun harvest, aucune régénération PDF ; le processor découvre les PDFs déjà présents sous Target/ et les convertit en place (atomic File.Move sur succès, skip gracieux si GS absent) ;
  • ForceReleaseParams = true → active le stage Release-gated depuis n'importe quel build config.

GS résout via PATH (préfixer le bin GS avant le lancement, le process .NET hérite du PATH). L'ICC SWOP est auto-extrait de Magick.NET au runtime (USWebCoatedSWOP, même profil que la conversion per-image) → aucun profil manuel requis.

Config-only côté surface publique : +24 lignes dans Program.cs, aucune autre modification. SkipConfigFile=true respecté (pas d'édition JSON). Build 0 erreur.

Vérification end-to-end sur ai-01 (GS 10.07.1)

$ PATH="$GS_BIN:$PATH" Argumentum.AssetConverter.exe --pdf-cmyk --non-interactive
Mode post-traitement CMYK des PDF (#632)
Loaded 16 card sets: ...
PDF CMYK post-process: 64 PDF(s) to convert, GS='gswin64c',
  ICC='C:\...\Temp\argumentum-USWebCoatedSWOP.icc'.
PDF CMYK post-process OK: '...Argumentum_Fallacies_Web_A0_ar.pdf'.   (~10s, A0 pleine taille)

Contrôle du PDF converti (pdfimages -list + grep PDF brut) :

Contrôle Avant Après
Colorspace images rgb 3-comp cmyk 4-comp (178 DeviceCMYK)
OutputIntent absent présent (GTS_PDFX / CGATS TR 001 / SWOP)
Page size / Producer A0 / QuestPDF A0 / GPL Ghostscript 10.07.1

Scope / honnêteté

Lié à #632. Chemin critique tag v0.9.0 (CMYK imprimeur obligatoire).

🤖 Coordinator ai-01

…ass (#632)

The #632 Ghostscript CMYK+OutputIntent stage only ran as part of a full
Release pipeline run (Mode default omits ConverterMode.PdfCmykPostProcess,
and the stage is Release-gated). There was no way to apply it standalone to
an ALREADY-generated bundle — needed because the printer-mandated CMYK step
runs on the one machine that has Ghostscript, on a bundle regenerated by a
worker machine that has none.

Adds a `--pdf-cmyk` subcommand (mirrors the existing --validate-* entry
points): sets Mode = PdfCmykPostProcess only (no harvest, no PDF regen —
discovers PDFs already under Target/ and converts them in place) and forces
Release params so the Release-gated stage is enabled from any build config.
GS resolves via PATH; the SWOP ICC is auto-extracted from Magick.NET at
runtime (no manual profile needed).

Verified end-to-end on ai-01 (GS 10.07.1): converts a full-size A0 PDF to
DeviceCMYK + embeds the SWOP OutputIntent (GTS_PDFX / CGATS TR 001) in ~10s;
pdfimages confirms rgb->cmyk, raw PDF confirms OutputIntent present.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jsboige
jsboige merged commit 5d63707 into master Jul 2, 2026
3 checks passed
@jsboige
jsboige deleted the feat/pdf-cmyk-cli-entrypoint branch July 2, 2026 13:40
jsboige added a commit that referenced this pull request Jul 3, 2026
…EN+FR) (#659)

Consolidated release-notes draft for the v0.9.0 GitHub Release, building on the
po-2023 draft (docs/RELEASE-NOTES-v0.9.0.md) and reflecting the post-bundle-v3
work not yet captured there:

Highlights:
- 8 languages x 10 documents, print-ready (bundle v3, 80 PDFs, PNG-300-lossless)
- Print & Play free + complete: Standard (full game) + Light (sample + Virtues
  families overview, depth<=2, #645/#648-650)
- Print-ready CMYK + SWOP OutputIntent via --pdf-cmyk Ghostscript post-pass
  (#632/#652)
- Rules i18n cleanup (#633->#640), 0 HIGH residual + committed anti-FP scanner

Notable fixes since dossier #591: harvest deadlock (#651), Logger hardening
(#630/#655), Scenarii 6.1.3 title (#653), GSheet Rules sync (#642).

Known limitations: SVG mind maps potentially stale (#636), OWL round-trip
#133, DNN CVEs (separate ops milestone).

EN + FR (impersonal). NOT published - draft docs only, jsboige validates and
pastes into the GitHub Release. Test count flagged as dashboard-baseline
(reported, not empirically re-verified) per [[test-counter-empirical-dotnet-test]].

Base ca5db81.

Co-authored-by: Your <your.email@example.com>
Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 4, 2026
 RENDUS + path CMYK (#675)

Refresh the release-validation dossier (PR #631) to reflect the
2026-07-03/04 state. ai-01 dispatch tbxfhu (tertiary).

Key updates:
- 64→80 PDFs: bundle v3 (10 types × 8 langues, expansion P&P #648-650
  = P&P Standard + P&P Light). Bundle GDrive v3 = 6.5 GB (80 CMYK +
  7 samples + CMYK_COLOR_PROOF.txt).
- Verdict #140 (content, 8 langs) = PASS ai-01 RENDU: carte dense p51
  EN/ES/RU/AR/FA/ZH (RTL AR+FA, CJK), covers, PT #306 fixé, FR Rules
  5 jeux. #119, recto-verso, #216, micro-RU résolu.
- Verdict #632 (colorimetric) = PASS ai-01 RENDU: DeviceCMYK 4-comp +
  GTS_PDFX/OutputIntent on fr+ar+zh.
- Finding 1 (CMYK absent) → RÉSOLU: post-process Ghostscript (#632/#652)
  = 80/80 DeviceCMYK + OutputIntent SWOP. Le path DocumentCardSet.cs
  (oxymore PNG) est remplacé par le post-process GS sur le PDF final.
- Tag v0.9.0: techniquement débloqué (2 verdicts PASS). Reste arbitrages
  jsboige (#636 §1 SVG Virtues, #654 mnémoniques, couplage go-live DNN)
  + finding titre PT (§3.6; note: #640 a résolu le bulk 'English Channel'
  23 occ HIGH, titre Tarot PT spécifique possiblement inclus).

Master ref 3e2fa0ca41cbda. Bundles Debug/Release-v1 préservés.

Relates: #631 #632 #652 #648 #649 #650 #140 #134. ai-01 dispatch tbxfhu.

Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 4, 2026
…tability fixes) (#134) (#689)

The v0.9.0 entry predating bundle v3 missed the print-production and
late-cycle stability work. This refresh brings it in line with master
`21e2c666`, cross-checked against the release-validation dossier v4
(docs/RELEASE-VALIDATION-v0.9.0.md §3.3) and dashboard decisions #26-69.

Added:
- "Print Production (CMYK & Print&Play)" section: Ghostscript post-process
  (#632), `--pdf-cmyk` entry-point (#652), bundle v3 = 80 PDFs DeviceCMYK +
  SWOP OutputIntent (6.18 GB RGB -> 5.30 GB CMYK), P&P Standard/Light
  (#645/#648-650, 64 -> 80 PDFs), GS timeout 180->900s (#670)
- "OWL Ontology (Bilingual EN/FR)" section: Fallacies OWL 5.07 MB (#634
  regen), Virtues OWL (#592/#499 Phase 2), honest scope note (EN+FR only,
  not 8-lang)
- "Fixed - Pipeline Stability (Jun-Jul 2026)" section: harvest deadlock
  #651, serial retry #613/#676, logger Spectre #630/#655, CMYK oxymore,
  Johnny 6.1.3 #653, Rules i18n refonte #640, CSV hygiene #579/#581/#584,
  OWL staleness #634

Corrected (code=truth):
- Magick.NET 14.13.1 -> 14.14.0 (verified in .csproj)
- Test count 548 -> 578 pass / 1 known-fail #133 / 5 skip / 584 total
  (empirical `dotnet test` on Argumentum.AssetConverter.Tests, 2026-07-04,
  .NET 9). Previous counts in docs (548/549/570) were all stale

No existing content regressed; all prior sections preserved.

Co-authored-by: Your <your.email@example.com>
Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 4, 2026
…&P) (#134) (#690)

Aligns the public/canonical release docs with bundle v3 (80 PDFs, DeviceCMYK
+ SWOP, P&P Standard/Light #648-650) and flags the June framework snapshots
as superseded. Dispatch ai-01 `ryxzma` SECONDAIRE (64→80 coherence) +
TERTIAIRE (release-notes scope honesty).

Canonical / public-facing (count + scope fixed):
- RELEASE-NOTES-v0.9.0.md: 64/64 → 80 PDFs (10 types × 8 langs), CMYK via
  Ghostscript #632/#652; OWL honest scope (bilingual EN/FR, NOT 8-lang);
  P&P digital edition free (Light + Standard)
- news-article-v0.9.0.{en,fr}.md: "64 PDFs = 8 × 8" → "80 PDFs = 8 × 10"
  with CMYK + P&P Standard/Light note

Legacy framework snapshots (superseded banner → dossier v4, bodies intact):
- release-dossier/README.md (2026-06-17/19)
- release-v0.9.0-validation-brief.md (2026-06-13)
- v0.9.0-readiness-and-disk-recovery.md (2026-06-13, Part 1 only — Part 2
  disk-recovery stays authoritative)

Bodies of legacy docs intentionally not rewritten (dated evidence preserved);
banner points readers to docs/RELEASE-VALIDATION-v0.9.0.md (v4) for current
truth. DNN UPGRADE-ASSESSMENT "12-Jun regen 64/64" left as-is (explicitly
dated, historically accurate).

Docs-only, no code/CSV/assets.

Co-authored-by: Your <your.email@example.com>
Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 4, 2026
…cution) (#691)

Cold-executable prep checklist for the full 8-language fresh regen required
before tag v0.9.0 (decision #26). Triggered by ai-01 dispatch sde6s0 (primary).

Documents the regen harness code=truth (base master 21e2c66):
- 8 languages (fr canonical + en/ru/pt/es/ar/fa/zh), field suffixes, iteration
- ConverterMode flags (16, all merged) + default Mode + Apply stage ordering
- Regen sequence: clobber -> harvest -> PDF -> mindmaps -> OWL -> CMYK (last)
- Mandatory harvest cache-clobber (no --clean CLI; dotnet clean != clean regen)
- FreeMind GUI RDP-live-foreground prerequisite (XSLT proscribed #184)
- OWL mono-language EN+FR caveat (honest release-notes scoping)
- Per-language verification points (visual verdict = ai-01 lane)
- Pre-regen readiness gate (10-item checklist)

PREP ONLY — no regen launched (desktop non-interactive + content HOLD).
Corrects a sub-agent misread: CMYK (PdfCmykPostProcess #632/#652/#641) IS
merged on master, not worktree-only.

Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 5, 2026
…to look at, per lang) (#700)

Bundle-v3-specific verification guide so jsboige can validate the 80-PDF CMYK
bundle (10 types x 8 langs, post P&P #648-650 + CMYK #632/#652) in ~15 min,
including the languages he doesn't read (ar/fa/zh, +ru). Triggered by ai-01
dispatch yj7u3j (secondary). Mandate "present the dossier cleanly at tag".

Complementary to the existing guides (no duplication):
- validation-guide.fr.md (general procedure, 2026-05-31, pre-P&P expansion)
- non-latin-verification-guide.md (DNN site UI strings, not bundle)

Bundle-v3 guide adds:
- 10 doc types (incl. new P&P Standard/Light #648-650).
- Per-lang sampling: 16 PDFs (2/lang) = Thumbnails p1 + TarotCards p1.
- 3 sense-independent checks (direction RTL, glyph/font tofu, FR-leak #216).
- Per-lang expected strings: ru Cyrillic "Sofizm", pt cover "A Escola dos
  Mentirosos" (#306 fix), ar RTL "Al-Safsata", zh CJK "miuowu".
- CMYK transverse check (pdfimages -list = cmyk 4-comp + SWOP OutputIntent).
- 15-min validation order + defect triage table.

Master dc02e84. Docs-only, no test/build impact.

Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 16, 2026
…6 tests / AIF layer (po-2024 tick 24) (#816)

Sync release-notes canonical figures with the actual post-#807 master state:

- 80 PDFs (10 types × 8 langues), not 64. Print&Play Standard + Light
  were added post-#648-650; the bundle now spans {Tarot, Poker,
  A0 poster, Thumbnails, Mémo, Rules, FallaciesWeb, Print&Play Standard,
  Print&Play Light, +1 expert tier} × 8 langues. Bundle v3
  (2026-07-03) is 80/80 DeviceCMYK + SWOP OutputIntent (verified via
  pdfimages -list, Ghostscript post-process #632/#652).

- 596 tests pass (post-#807 alignement; #133 OWLSharp known-fail cleared
  in #793), not 578.

- AIF attack layer detailed: 145/1408 fallacies + 222/223 vertus with
  deterministic ASPIC+ node map; tiering methodology explained;
  anchor audit results (16 CLEAN / 2 SOFT / 0 erreur).

- CrossLink layer: 1985 cells across 844 fallacies (59.9 percent),
  8 relational predicates (#763).

- Print production hardening: GS timeout 180s -> 900s (#670);
  per-image CMYK oxymore explained (PNG cannot carry CMYK, the
  authoritative CMYK path is the GS post-process).

Out of scope (this PR):
- Tag creation. The release is gated on jsboige visual GO + tag.
- DNN security upgrade (separate post-release op, lane po-2023:jsboige).
- Layer C (~1263 leaves without skos signature, generative pass),
  requires its own gated pilot.

Diff: docs-only, 1 file. 0 code change.

Refs: #134, #632, #648-650, #652, #670, #793, #807.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant