Files
juergen 509af2a410
ci/woodpecker/push/build Pipeline was successful
implement fix for color mode default
2026-10-20 15:59:53 +02:00

4.7 KiB
Raw Permalink Blame History

Tasks

Aufteilung: 1. Ursache feststellen (blockierend), 2. Testschicht, 3. Spec/README, 4. Serverseitiger Fix nur falls 1 ihn hergibt.

1. Ursache feststellen (Verifikation des Ist-Zustands)

  • 1.1 Jobpfad reproduzieren: Image bauen, Testcontainer mit PRINTER_OPTIONS="BRColorMode=None TonerSaveMode=True" starten, einen Job einreichen (podman exec <c> lp -d <queue> -o raw <sample> oder cupsfilter <sample>), und im versandten PostScript (/var/spool/cups/d<JobId>-*, Job-Nummer aus lpstat -W completed -o) prüfen, ob der Tonerspar-Zweig (statusdict/tonersave … true) enthalten ist. Verifikation: Ergebnis (enthalten/nicht enthalten) mit dem ausgelesenen Spool-Pfad und der CUPS-Version in design.md notieren.
  • 1.2 Zweiten Messpunkt gegen die Queue-Defaults aufnehmen: denselben Job zusätzlich mit explizitem -o BRColorMode=Vivid einreichen und die UseCIEColor-Zeile im Spool mit der des ersten Jobs vergleichen. Verifikation: dokumentierter Unterschied (oder dessen Fehlen) zeigt, ob per-Job-Optionen im selben Pfad sichtbar werden — belegt, dass die Messmethode aus 1.1 trägt.
  • 1.3 Queue-Zustand desselben Containers gegengelesen: lpoptions -p <queue> -l (Sternchen) und grep '^Default' /etc/cups/ppd/<queue>.ppd. Verifikation: die Abweichung aus dem Ausgangsbefund ist entweder bestätigt (*False bei DefaultTonerSaveMode True) oder widerlegt; Ergebnis in design.md festhalten.
  • 1.4 Ergebnis einordnen und die Entscheidung nach Design D3 treffen: erreicht der Queue-Default den Job (Szenario in specs/… bleibt) oder nicht (design.md um das Resultat ergänzen, Szenario auf das verifizierte Verhalten umformulieren, Limitation explizit benennen). Verifikation: design.md enthält den Messwert und die getroffene Entscheidung; die betroffenen Tasks aus 2/3 sind entsprechend markiert. Ohne dieses Ergebnis werden 2.x/3.x nicht abgehakt.

2. Automatisierter Nachweis (neue Testschicht)

  • 2.1 tests/test-queue-defaults.sh anlegen: baut das Image, startet einen Container mit PRINTER_OPTIONS="BRColorMode=Vivid TonerSaveMode=False", wartet auf ready: CUPS on 631/tcp, reicht einen Job ohne print-quality/Preset-Attribute ein und liest das letzte Spool-File (lpstat -W completed -o → /var/spool/cups/d<JobId>-*). Verifikation: Skript läuft lokal durch (bash tests/test-queue-defaults.sh), Ausgabe zeigt den Spool-Pfad und die gefundenen PostScript-Zeilen.
  • 2.2 Assertions gemäß Ergebnis aus 1.4 einbauen: UseCIEColor true für den Queue-Default Vivid und der Tonerspar-Zustand aus dem verifizierten Verhalten für TonerSaveMode=False; zusätzlich muss die UseCIEColor-Zeile bei explizitem -o BRColorMode=None abweichen (Regressionsschutz). Vergleich nur über grep -F auf Zeilen, kein Parsen von PDF/PS-Struktur. Verifikation: Skript endet mit Exit 0 und einer PASS-Zeile pro Assertion; eine absichtlich falsch gesetzte Erwartung lässt es mit Exit ≠ 0 und Klartextzeile scheitern.
  • 2.3 Lebensdauer/Umgebung absichern: Container immer aufräumen (Trap), kurze Wiederholung des Spool-Lesens statt Polling, und im Skriptkopf die verifizierte CUPS-Version notieren. Verifikation: podman ps -a zeigt nach einem Lauf keinen Testcontainer; zweiter Lauf hintereinander ist grün.

3. Spec und README angleichen

  • 3.1 README.md, Abschnitt Environment variables / PRINTER_OPTIONS: eine Zeile ergänzen, was ein Queue-Default für den Ausdruck bedeutet (Queue-Default schlägt den PPD-Default, sichtbar im versandten PostScript), mit Verweis auf das Testskript. Verifikation: grep -n 'PRINTER_OPTIONS' README.md zeigt den neuen Satz; die genannte Assertion stimmt mit 2.2 überein.
  • 3.2 entrypoint.sh-Hinweis prüfen: der bestehende Kommentar bei apply_printer_options (Zeile ~341–345) behauptet, lpadmin würde unbekannte Zuweisungen speichern — mit dem Befund aus 1.x abgleichen und nur bei Bedarf präzisieren. Verifikation: jj diff zeigt entweder keine Änderung an entrypoint.sh oder ausschließlich Kommentar/Log-Text, ohne Verhaltensänderung.

4. Aktualisierung der Hauptspec (Archive-Zeitpunkt)

  • 4.1 Beim Archivieren die Delta-Spec nach openspec/specs/printserver/cups/spec.md übernehmen und dabei die alte Fassung des Requirements Queue defaults are configurable at runtime (Zeilen 69–89) durch die neue, job-beobachtbare Fassung ersetzen. Verifikation: openspec validate --strict ohne Findings; die Hauptspec enthält genau eine Fassung des Requirements.