4.1 KiB
Proposal
Why
While verifying the revert-colour-mode-default change, an operational check
found a divergence for one PPD option: after the entrypoint applies
PRINTER_OPTIONS="BRColorMode=None TonerSaveMode=True", the queue shows
BRColorMode ... *None (consistent everywhere) but TonerSaveMode ... *False
even though the queue's PPD copy at /etc/cups/ppd/<queue>.ppd contains
*DefaultTonerSaveMode: True. The rejected tool option
lpadmin -p <queue> -o TonerSaveMode=True (config-only, immediately surfaced)
reproduces the same split. TonerSaveMode is the option that the
APPrinterPreset entries use to implement the "draft prints with toner saving"
behaviour recorded in the spec, so a queue default that only half applies
undermines one of the documented scenarios.
The current spec (Queue defaults are configurable at runtime → Options are
applied on start) is written as a configuration check ("the queue defaults
include TonerSaveMode=False") and is satisfied by the settings file alone, so
it does not pin down whether a job actually receives TonerSaveMode=True. That
gap is why the divergence went unnoticed. This change turns the requirement
into an observable one — the emitted job — and makes whatever the investigation
finds explicit in the spec instead of leaving the contradiction undocumented.
What Changes
- Investigate the
TonerSaveModesplit during apply: determine whether a job with the queue defaultTonerSaveMode=Trueactually emits the toner-save PostScript (statusdict/tonersave→true) or silently falls back to the PPD defaultFalse, and record the root cause in the design/tasks notes. - Spec (
printserver/cups): replace the configuration-only Options are applied on start scenario with an observable job-level scenario; add a scenario that pins down what a job whose queue default conflicts with the PPD default must emit. Add theTonerSaveModeobservable to the colour-mode requirement's scope (BRColorMode only) so the two are not conflated. - Tests (
tests/): add a job-level integration test that applies the documentedPRINTER_OPTIONS="BRColorMode=Vivid TonerSaveMode=False"example, submits a job with the bundled sample, and asserts the emitted PostScript carriesUseCIEColor true(Vivid) andstatusdict ... tonersave ... false(TonerSaveMode) — i.e. the queue default wins over the PPD default in the output. If the investigation shows it cannot win, the test instead asserts the honest current behaviour and the spec records the limitation. - README: state what
PRINTER_OPTIONSqueue defaults do to a job, with the verified example output, and note any option-specific caveat found.
No change to entrypoint.sh plumbing is planned: it already calls
lpadmin -o <option> for every validated key=value pair, and its warning
path for unusable entries stays as is. A code change happens only if the
investigation identifies a server-side cause that is fixable in the image.
Capabilities
New Capabilities
(none)
Modified Capabilities
printserver/cups: the runtime queue-default requirement becomes job-observable, and a scenario covers a queue default that conflicts with the PPD default.
Impact
openspec/specs/printserver/cups/spec.md(requirement text at sync time; the delta lives in this change).- No project test suite exists yet (AGENTS.md: no build/test/lint config) —
this change introduces the first one, a self-contained
tests/test-queue-defaults.shthat drivespodman/podman exec, so the verification is reproducible instead of an ad-hoc shell session. README.md—PRINTER_OPTIONSdocumentation gains the verified job-level behaviour.assets/Brother HL-4150CDN/ppd/BR4150_2.PPD— the sixAPPrinterPresetentries that set*TonerSaveModeare the client that exercises the option; they stay unchanged.entrypoint.sh— unchanged unless the investigation finds a server-side cause.- Out of scope: the colour saturation limitation documented by
revert-colour-mode-default(no server-side lever is known, and none is proposed here).