diff --git a/.gitattributes b/.gitattributes index 80c806c..989f9d0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,2 @@ -# Preserve verbatim dependency patch context and recorded tool output. +# Preserve verbatim dependency patch context. patches/*.patch -whitespace -openspec/changes/archive/**/evidence/*.txt -whitespace diff --git a/README.md b/README.md index c44a572..a2328ed 100644 --- a/README.md +++ b/README.md @@ -309,20 +309,21 @@ The PT-2730 USB interface can be held by only one process. A dev/spike container holding the device must be stopped before this container starts; both cannot own the device at once. -## Design decisions +## Specifications -The reasoning behind the architecture, including several corrections, is recorded -as ADRs in [`docs/adr/`](docs/adr/README.md) - why this is its own PAPPL -application, why the USB scheme is custom, why media is advertised at nominal tape -width, why the app owns the PNG filter, how offline and job chaining work, and why -the licence is GPL-3.0. +The canonical [server architecture](openspec/specs/server-architecture/spec.md) +specification defines the PAPPL application, core/adapter boundary, USB access, +physical media, PNG route, batch lifecycle, deployment, and licensing decisions. +Detailed contracts live in [label rendering](openspec/specs/label-rendering/spec.md), +[batch printing](openspec/specs/batch-printing/spec.md), and +[printer devices](openspec/specs/printer-device/spec.md). ## OpenSpec workflow [OpenSpec](https://openspec.dev/docs/setup) tracks proposed changes in `openspec/changes/` and accepted specifications in `openspec/specs/`. Project -constraints live in `openspec/config.yaml`; the existing ADRs remain the record -of design decisions. +constraints live in `openspec/config.yaml`; accepted specifications are the +canonical record of the server's contracts and architecture. The repository includes six Codex skills in `.agents/skills/`. Start a new Codex session after setup to load them: diff --git a/docs/adr/0001-own-pappl-application.md b/docs/adr/0001-own-pappl-application.md deleted file mode 100644 index 32ea6b6..0000000 --- a/docs/adr/0001-own-pappl-application.md +++ /dev/null @@ -1,30 +0,0 @@ -# 1. Build our own PAPPL printer application - -**Status:** Accepted - -## Context - -The goal is to expose a Brother P-touch label printer as a driverless IPP Everywhere device so any -client can discover and print to it. Two credible routes existed: extend LPrint (which already -supports label printers, including some Brother models) or build a dedicated PAPPL application. - -This was re-examined mid-project, after the protocol core already worked, precisely because "just use -LPrint" is the obvious question a reviewer would ask. - -## Decision - -Build our own PAPPL application. - -## Consequences - -- Full control over the raster path, which turned out to matter repeatedly: per-line flushing to - avoid overrunning the PT-2730 buffer, a custom USB scheme, our own PNG filter, and cutter - sequencing. Several of these are not expressible as LPrint configuration. -- We own the maintenance burden, including tracking PAPPL releases. -- The pure protocol core (`src/protocol.c`, `src/tables.c`, `src/raster.c`, `src/cutter.c`) is - independent of PAPPL and unit-tested without hardware. - -## Alternatives considered - -- **Extend LPrint.** Rejected: adding a model means fitting its driver model, and the behaviours we - needed (cut/chain planning, PNG-derived page length, custom device scheme) sit outside it. diff --git a/docs/adr/0002-custom-ptouch-usb-scheme.md b/docs/adr/0002-custom-ptouch-usb-scheme.md deleted file mode 100644 index 8656573..0000000 --- a/docs/adr/0002-custom-ptouch-usb-scheme.md +++ /dev/null @@ -1,45 +0,0 @@ -# 2. Custom `ptouch://` USB device scheme - -**Status:** Accepted - -## Context - -PAPPL ships a `usb://` device scheme. On the PT-2730 it hangs: the scheme issues an IEEE-1284 -GET_DEVICE_ID request that the printer never answers, and the M0 spike reproduced the hang reliably. - -A second problem appeared later: in a container with no hotplug uevents, a process-lifetime libusb -context goes stale across a replug, so the device is never found again. - -## Decision - -Register a custom `ptouch://` scheme (`papplDeviceAddScheme`) implemented directly on libusb, and -create a fresh `libusb_context` per operation rather than holding one for the process lifetime. - -URIs are model-based (`ptouch://Brother/PT-2730`) and resolved to a device by VID/PID at open time, -so a URI stays valid across replug and bus renumbering. PT-2730 is the only implemented print path. -Validate `PTOUCH_MODEL` before discovery: omission or an empty value selects PT-2730; unknown or -recognized-but-unsupported values fail startup rather than falling back. Recognized unsupported -devices appear in discovery diagnostics but are never offered as printable devices or opened. - -Count every matching device before discovery reports a candidate and before opening claims one. -Zero means offline; exactly one can be used; multiple PT-2730 units are ambiguous and none is -claimed. Keep the same queue and model URI when absent or ambiguous, so unplugging a duplicate or -replugging the sole supported printer can restore availability without queue replacement. Never -choose by enumeration order, serial number, or a device-ID probe. - -## Consequences - -- No dependence on IEEE-1284 device IDs, so no hang. -- Replug works without restarting the process. -- USB access is guarded centrally and at the short-timeout reader. `pt_usb_read_status` takes the - owning printer's URI and rejects a non-supported transport before accessing connection data. - PAPPL has no public accessor for a device connection's URI; callers pass - `papplPrinterGetDeviceURI`, never an inferred URI based on USB presence. Socket test status uses - the driver's explicit test path, and an attached Brother cannot change its transport type. -- Hardware-free adapter tests inject zero, one, or two devices, unsupported models, claim failures, - and a changed node after replug. A real PAPPL socket fixture confirms rejected reads never - inspect network connection data or issue a USB transfer. These tests do not certify hardware. - -## Alternatives considered - -- **Fix/avoid the `usb://` hang upstream.** Out of our control and slower than owning the transport. diff --git a/docs/adr/0003-pure-core-separate-from-adapter.md b/docs/adr/0003-pure-core-separate-from-adapter.md deleted file mode 100644 index a284f05..0000000 --- a/docs/adr/0003-pure-core-separate-from-adapter.md +++ /dev/null @@ -1,28 +0,0 @@ -# 3. Keep a pure C core separate from the PAPPL adapter - -**Status:** Accepted - -## Context - -Physical printer tests consume tape and may require a power cycle. Keeping protocol -and planning logic independent of hardware makes most checks fast and repeatable. - -## Decision - -Split the code: - -- **Pure core** - `protocol.c` (command byte builders), `tables.c` (device and tape tables), - `raster.c` (line packing), `status.c` (status parsing), `cutter.c` (cut/chain planning). No PAPPL, - no libusb, no I/O. -- **Adapter** - `driver.c`, `main.c`, `device_usb.c`, `filter_png.c`. PAPPL callbacks and transport. - -The core builds and unit-tests on a laptop with CTest and no hardware. - -## Consequences - -- Protocol and planning logic is testable in milliseconds. The cutter plan in particular is exercised - by table-driven tests covering cut modes, copies, and chaining. -- Bugs in planning are caught before they cost a hardware run. The cross-job chaining P0 (see - ADR-0008) was caught in review partly because the logic was reviewable in one small pure function. -- A discipline is required: behaviour that belongs in the core must not drift into the adapter, or it - loses its tests. diff --git a/docs/adr/0004-strict-width-guard.md b/docs/adr/0004-strict-width-guard.md deleted file mode 100644 index b8e74ff..0000000 --- a/docs/adr/0004-strict-width-guard.md +++ /dev/null @@ -1,36 +0,0 @@ -# 4. Strict tape and PNG content geometry - -**Status:** Accepted - -## Context - -A client can select a page width that differs from the physical tape. A matching -page width also does not prove that a centered PNG fits the printable window: -PAPPL can clip source pixels while the old page-width guard accepts the job. - -## Decision - -Reject page/tape width mismatches before raster, using confirmed loaded media. -Use the shared `pt_tape_geometry` definition for publication and the canonical -printable window. There is no configurable width-recovery policy. Custom media accepts the -advertised ±0.01 mm rounding tolerance around a nominal tape width; the physical -window remains fixed and a different cassette still fails before raster. - -At `print-scaling=none`, preflight the oriented PNG's physical content before -calling PAPPL's renderer. Accept an imageable-width design that fits the page. -Accept a nominal-width canvas only after verifying that every pixel outside the -physical window is white, then remove those blank margins before placement. -Reject oversized cross-tape content and content exceeding an explicit page's -length instead of silently clipping it. Preserve orientation and square DPI; -no DPI means 180 dpi. JPEG keeps PAPPL's standard placement path. - -## Consequences - -Wrong tape and oversized 1:1 PNGs fail visibly without page raster. Explicit -standard scaling remains distinct from a server-selected recovery policy. -Clients can use `media-ready` to design for the actual tape and margins. - -## Alternatives considered - -A server-selected fit/crop fallback would change the design's physical size or -lose content without the client's instruction. Keep strict rejection instead. diff --git a/docs/adr/0005-nominal-media-size-with-margins.md b/docs/adr/0005-nominal-media-size-with-margins.md deleted file mode 100644 index affb2be..0000000 --- a/docs/adr/0005-nominal-media-size-with-margins.md +++ /dev/null @@ -1,46 +0,0 @@ -# 5. Nominal tape width and one canonical imageable window - -**Status:** Accepted (supersedes the original M3 geometry decision) - -## Context - -The PT-2730's 128-dot head is narrower than 24 mm tape. Advertising only the -printable width as media made 24 mm tape appear as roughly 18 mm media. Integer -conversions of symmetric physical margins also gave the renderer and driver -different printable windows, clipping edge pixels on otherwise valid designs. - -## Decision - -Advertise nominal physical width as `media-size`. Use one shared tape geometry -helper at 180 dpi to derive nominal pixel width, the exact imageable pixel count, -an exclusive canonical pixel interval, and publishable physical margins. -Supported widths are 6/9/12/18/24 mm, with 32/52/76/120/128 imageable dots. - -Left and right IPP margins may differ slightly so conversion back to printer -pixels agrees with the canonical interval and PAPPL's image-placement arithmetic. -The printer-wide minimum margin permits every supported tape; each actual -`media-ready` and default carries its own margins. Selected margins cannot expand -the physical printable window. Per-width custom ranges admit only ±0.01 mm -rounding around the nominal width, retaining the submitted dimensions and -physical imageable guard. This accommodates CUPS metric-to-point conversion. -CUPS 2.4 PPDs still apply one global maximum custom margin, so full-width designs -need a named preset or standard media-col with the published tape margins; -explicit client margins are never silently replaced. - -`cupsWidth` remains the full nominal page width. The adapter extracts the -canonical physical window from each full raster line and centers it in the head. -Physical tape comparison therefore uses full nominal page width, while PNG source -preflight uses the physical imageable width. Do not mix these coordinate spaces. - -## Consequences - -Clients see the tape size they bought, including 18 mm ready-media that was -previously rejected by the printer-wide margin bound. One definition serves -publication, validation, and extraction. 36 mm remains unadvertised because its -imageable width exceeds the head. - -## Alternatives considered - -Printable-as-media-size requires every client to compensate for a false physical -size. Relying on a CUPS version change does not correct the geometry: CUPS computes -full media width and represents margins through its image box. diff --git a/docs/adr/0006-own-png-filter.md b/docs/adr/0006-own-png-filter.md deleted file mode 100644 index 38845de..0000000 --- a/docs/adr/0006-own-png-filter.md +++ /dev/null @@ -1,42 +0,0 @@ -# 6. Standard PNG route with optional image-derived length - -**Status:** Accepted - -## Context - -PAPPL places PNGs on selected/default media. Without a concrete page length, -continuous tape labels formerly received the fixed 100 mm default. The first -owned filter corrected that case but overwrote explicit lengths and exposed a -private raster MIME that could never be printed directly. - -## Decision - -Keep libpng decoding and PAPPL's existing image renderer. Set the driver's format -to `image/png`, register `image/png -> image/png` for the owned filter, and provide -a real PNG `printfile_cb` using the same path. PAPPL selects the matching driver -filter before its built-in PNG-to-PWG filter, and deduplicates the public PNG MIME. -No private destination type or always-failing raw callback is needed. - -Build options after loaded-media confirmation. Preserve submitted named media or -`media-col.media-size.y-dimension`. Only when concrete length is omitted, derive -length from the oriented image and its square DPI metadata, falling back to 180 -dpi. Source-only/margin-only collections do not constitute an explicit size. -Update all length-derived header fields together; use the 5 to 300 mm limits. - -Pin automatic orientation from the source aspect before deriving page length: -tall/square images use portrait and wide images use reverse-landscape (90 degrees -clockwise), while explicit orientation remains authoritative. Decode the complete -PNG, verify 1:1 physical content and blank nominal margins as described in ADR-0004, -and then call `papplJobFilterImage`. Its copy loop expands the job's copies exactly -once and drives the production raster callbacks. - -## Consequences - -Explicit 50 mm PNG pages stay 50 mm. Omitted lengths retain the PNG convenience, -including deliberate white padding and minimum-length padding. Overlong or -oversized 1:1 content fails before page output. Standard scaling requests remain -PAPPL's responsibility. JPEG keeps its standard selected/default media sizing; -this decision adds no JPEG decoder or automatic length promise. - -Real IPP tests verify MIME routing, copy counts, named and collection geometry, -asymmetric orientation markers, physical margins, and length boundaries. diff --git a/docs/adr/0007-offline-is-a-state.md b/docs/adr/0007-offline-is-a-state.md deleted file mode 100644 index 66be373..0000000 --- a/docs/adr/0007-offline-is-a-state.md +++ /dev/null @@ -1,48 +0,0 @@ -# 7. Offline is a printer state, not an absent printer - -**Status:** Accepted - -## Context - -The printer object used to be created only if a device was found at startup. With the printer switched -off there was no printer at all: IPP returned `client-error-not-found`, indistinguishable from a -broken server or a wrong URI, the web UI showed nothing, and recovery needed a container restart. - -Meanwhile the driver already knew how to report `offline` - that code simply never ran, because there -was no printer object to attach reasons to. - -## Decision - -Always create the printer. When no device is present at startup, create it on -`ptouch://Brother/PT-2730` and mark it `offline` immediately. Validate configuration -first: PT-2730 is the only implemented model, and an unsupported value cannot select -a fallback device. - -Jobs submitted while offline are accepted and queued; PAPPL pauses the queue and retries the device. -When the printer appears, the queue resumes with no restart. - -## Consequences - -- Clients can distinguish "printer switched off" from "server broken". -- A job queued while offline prints when the printer returns. -- **Media staleness became possible:** a printer created offline carries a placeholder 12 mm media - default. The first queued job was built from it and then faulted. Fixed by refreshing the live tape - in the PNG filter before the page geometry exists - `r_startjob` is too late, because the header - already exists there and can only be faulted, not repaired. That refresh is a barrier: if the tape - cannot be read it faults explicitly rather than building a wrong page. -- The device node must be a **bind mount**, not compose `devices:` - see ADR-0009. -- USB presence does not establish readiness. An unclaimable device, incomplete or - malformed status, unsupported cassette, or printer error leaves the queue - unavailable. Idle polling and job-owned refresh share the same publication path. -- Each queue owns its run and media-confirmation state through PAPPL driver - extension data. Status queries do not initialize the printer or finalize an - unfinished tape run. -- An interrupted raster/print command can leave output uncertain. Block later work - and report recovery required, even if a later status reply is clean or USB - reopens. The conservative recovery sequence is to power-cycle the printer, - then restart the server and inspect failed jobs before explicit resubmission. - Do not automatically reset, cut, replay, or append to the uncertain buffer. - Server restart alone does not establish a safe physical tape state, and the - container's process-local queue/state is not promised to survive it. The authorized - integrated PT-2730 acceptance verified blocking after truncated raster and - successful power-cycle/server-restart recovery without replay or ghost output. diff --git a/docs/adr/0008-cross-job-chaining.md b/docs/adr/0008-cross-job-chaining.md deleted file mode 100644 index eecf6d3..0000000 --- a/docs/adr/0008-cross-job-chaining.md +++ /dev/null @@ -1,81 +0,0 @@ -# 8. Job-defined batches with explicit finishing and safe continuation - -**Status:** Accepted; revised by simplify-print-server. - -## Context - -Queue contents and idle time do not describe whether a client wants a batch -finished. Earlier queue-drain finalization could miss jobs arriving during -printing. FF followed by an empty EJECT also failed on the PT-2730. - -The former copy-based planner treated copies as labels, failed multi-label -raster with one copy, and imposed a 64-copy ceiling. PAPPL's legacy finishing -bitmask also loses registered 60/63 and the chain-only collection selection. -Sending ESC @ into a held run can wedge the printer, so preserving healthy -continuation remains necessary. - -## Decision - -One IPP job defines one batch. Expand PNG copies once; process actual raster -labels without requiring a declared total. Resolve original standard attributes -and the current synchronized printer default using one driver preset table: - -| Preset | Between-label cuts | Final cut | Standard IPP selection | -|--------|--------------------|-----------|------------------------| -| Chain-only | Yes | No | finishings-col template ptouch-chain | -| Chain-and-final | Yes | Yes | 60; compatibility alias 11 | -| No label cuts | No | No | 3; collection no-value | -| Final-only | No | Yes | 63 | - -The implementation-defined name ptouch-chain uses the standard finishing -collection; it adds no independent vendor attribute or private enum. It remains -per-job, because it cannot be represented losslessly as an enum printer default. -The initial canonical default is trim (11). Enum and collection updates to -representable defaults must stay synchronized; conflicting updates are rejected. - -Precut prepares the first actual label of every nonempty batch, including none. -Later autocut depends only on between-label policy. The next batch releases the -held prior end without a discarded leader. Thus none/none creates separate -joined strips rather than one permanently joined multi-job strip. - -Keep constant-size job state with two policy flags, actual-label progress, -one pending print command, and a failure latch. A next valid label releases the -prior complete label with FF and waits for receiving-ready. Successful batch end -releases the last label with FF for continuation, or late chain-off/EJECT when -finishing. Hold this decision until actual successful end-of-input; do not fully -feed and eject each label or buffer another raster image. - -The queue owns closed/healthy-open/uncertain state and media confirmation. -Reset only a known closed run. Idle/job status queries confirm cassette and -errors without initialization or finalization. A canceled or rejected follower -that sent no page output preserves the previous healthy run. Ambiguous transfer, -decode, or readiness failures block further output until printer power-cycle -followed by server restart. Cleanup emits no pending feed, cut, or replay and -is idempotent. - -Bounded pinned PAPPL corrections allow advertised enums/templates, original job -attributes, and synchronized defaults through the ordinary IPP boundary. The -CUPS/PAPPL raster correction distinguishes malformed termination from EOF. -Neither patch introduces a raster parser, spooler, or generic finishing engine. -See patches/README.md for causes, version/security policy, and removal criteria. - -## Consequences - -Default printing now cuts labels free; clients wanting continuation request it -explicitly. Cached CUPS defaults must be refreshed through standard queue -settings. Retire optional precut and old cutter environment settings. PNG copies -support 1–999 while streaming raster advertises one copy with actual multi-label -documents. Generic dialogs may not expose the chain-only template. - -Run state is process-local, and unfinished-run restart is unsupported. Complete -a healthy run deliberately before restart; recover uncertain output explicitly -without promising queue persistence or automatic resubmission. - -The eight-label direct-protocol PT-2730 gate on 24 mm tape passed all four modes, -mandatory precut, late finalization, and continuation without discarded leaders. -The separately authorized 21-label integrated acceptance on 12 mm tape also -passed PNG copies, unknown-count raster, idle/offline continuation, cassette -change, uncertain-output blocking, and explicit recovery. The operator confirmed -rectangles, different label lengths, orientation, and no ghost output. These -results certify the tested PT-2730 cases; 6/9/18 mm retain software-only coverage. -See tests/HARDWARE-ACCEPTANCE.md and the change's validation.md. diff --git a/docs/adr/0009-deployment-topology.md b/docs/adr/0009-deployment-topology.md deleted file mode 100644 index c50da25..0000000 --- a/docs/adr/0009-deployment-topology.md +++ /dev/null @@ -1,25 +0,0 @@ -# 9. Container USB hotplug and reverse-proxy requirements - -**Status:** Accepted - -## Context - -A containerized printer application needs access to USB devices after unplug, -replug, and power cycles. Deployments may also place IPP behind a reverse proxy -or share a container network with printing clients. - -## Decision - -- Bind-mount `/dev/bus/usb` and allow USB character devices with - `device_cgroup_rules: ['c 189:* rwm']`. Individual `devices:` mappings cover only - nodes present when the container starts and cannot handle new hotplug nodes. -- Provide `nofile` limits of 65536 for the image's dbus and Avahi services. -- If using a reverse proxy, forward a Host value accepted by PAPPL, such as - `ptouch.local:8000`. PAPPL rejects other hostnames with HTTP 400. -- Printing clients on a shared container network can use a stable network alias. - -## Consequences - -USB hotplug works without recreating the container for each new device node. -Network exposure, DNS-SD discovery, TLS termination and client access are choices -for each deployment, independent of the application's printing contract. diff --git a/docs/adr/0010-gpl-licensing.md b/docs/adr/0010-gpl-licensing.md deleted file mode 100644 index 1f4e9fc..0000000 --- a/docs/adr/0010-gpl-licensing.md +++ /dev/null @@ -1,22 +0,0 @@ -# 10. GPL-3.0-only, because the protocol core is derived work - -**Status:** Accepted - -## Context - -The project reuses the Brother P-touch raster protocol and device/tape tables from -hannesweisbach/ptouch-print, and the cutter planning logic from its macOS fork. Both are GPL-3.0. - -## Decision - -License the project **GPL-3.0-only**, with attribution to upstream in `LICENSE`, `README.md` and -`THIRD_PARTY_NOTICES.md`. - -## Consequences - -- A permissive licence (MIT/Apache) is not available: GPL is copyleft, and roughly 18% of the C code - (`protocol.*`, `tables.*`, plus the cutter) is derived from GPL-3.0 sources. The volume is small but - it is the irreplaceable part - device IDs, per-model flags, tape geometry and the raster command - bytes. -- Relicensing would require a clean-room re-derivation of exactly that core, which is not worth it. -- PAPPL (Apache-2.0) and libusb (LGPL-2.1) are compatible and impose no additional constraint. diff --git a/docs/adr/README.md b/docs/adr/README.md deleted file mode 100644 index 3476779..0000000 --- a/docs/adr/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Architecture Decision Records - -Decisions that shaped this project, with the reasoning and the consequences that followed. Several -record a mistake and its correction, because the correction is the useful part. - -| ADR | Decision | -|-----|----------| -| [0001](0001-own-pappl-application.md) | Build our own PAPPL application rather than extending LPrint | -| [0002](0002-custom-ptouch-usb-scheme.md) | Custom `ptouch://` USB scheme over libusb, per-operation contexts | -| [0003](0003-pure-core-separate-from-adapter.md) | Pure C core, unit-testable without hardware | -| [0004](0004-strict-width-guard.md) | Strict tape and PNG content geometry | -| [0005](0005-nominal-media-size-with-margins.md) | Advertise nominal tape width with real margins | -| [0006](0006-own-png-filter.md) | Standard PNG route with image-derived length when media length is omitted | -| [0007](0007-offline-is-a-state.md) | Offline is a printer state, not an absent printer | -| [0008](0008-cross-job-chaining.md) | Four batch finishing presets and efficient continuation | -| [0009](0009-deployment-topology.md) | Container USB hotplug and reverse-proxy requirements | -| [0010](0010-gpl-licensing.md) | GPL-3.0-only, forced by derived protocol code | diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/README.md b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/README.md deleted file mode 100644 index 459a6fb..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# Retained validation evidence - -`ptouch-integrated-12mm.tar.gz` contains the authorized hardware session's -IPP requests, generated label fixtures, output offsets, transparent USB capture, -status packets, candidate logs, and original-service restoration records. -Compiled helper binaries and the container image are excluded. `usb-capture.c` -is the transparent bulk-transfer recorder used for that session. - -The four `gate-24mm-*.prn` files are the earlier bounded direct-protocol -captures. Operator observations for both sessions are recorded in ../validation.md; -command captures alone are not proof of physical cuts. - -`claude-implementation-review.txt` is the independent pre-fix review. -`named-raster-*` and `driver-png-*` retain failing reproductions and passing -regressions. `cups-review-fixes.txt` records a normal isolated driverless queue, -including fitting rounded Custom sizes, oversized rejection, PDF copies, and -exact standard media-col dimensions. `final-deploy.txt` and `final-smoke.txt` record the successful final runtime -build, all eleven CTest suites, and real IPP printing into an isolated sink. - -## SHA-256 - -``` -6976a9ad2173cd2384553dbbc796e9cd2d691e804b24d07a6c2614a2dcc1bb26 claude-implementation-review.txt -c2a12c6afb48d6845e50159b94549a68930d2b2cbc2f2a588fc1d7bdf6cf29f2 cups-review-fixes.txt -0ba921089301497c71781f0c93d1b883ee1e77810869f33f0ccd4da8f68db8fe driver-png-before-driver.txt -a255b89275d5ffbfdd6fe02fe3eda0bf01cffbfc9d9bd38d43a20a90cd8fd187 driver-png-before.txt -d878c2f1b4d7b133d4ccb1cb2f5fc00662205b14b6f00e90c9ec54e816b54446 driver-png-final.txt -71443e9397730f2449eb690db02661cf2706fcde4052ef076141c725277dbd0d driver-png-report.md -6182ee24a6399f3c346ef639f17fd19feec0612b2081a70d95c1d8f5c1ad56fd final-deploy.txt -2fb62cf7c6539397952c24c3a3835d851e041c14d4334a280ea46344d4c31e31 final-openspec.txt -8e0907ac2e06ce6d980929a7bd976b292b614324f061e841c9a889ef089e802e final-smoke.txt -f1dda2d3b836a41244c07bf179d8d4d6e24d3fc5af3125358b438756a79c985b gate-24mm-chain-2.prn -e0a02dbc762f1f5ed4e78d945d0d73f31df4361d3aea275c0011a8a3f3a43be5 gate-24mm-each-2.prn -d20e3679e6f50a5df46a444908f9aef688f9f53dda1792485b91b9bca8e2ac70 gate-24mm-end-2.prn -2fc856162c8de5df5e7d29b64f0c78a1ddacf751bb9fc972a875ef8bdf39ed3a gate-24mm-none-2.prn -2ee229a298a9899b409d4dd4a4d13b6016012646d2861fb65dc51458a7e55919 named-raster-after.txt -9d87b6f454ab216a2901e25823e1837fb278b4e237c812377e79d3735667e270 named-raster-bad-context.txt -53dfac86f7aeb46fc64a3ee3b44beb4deb2fc31daa8ddbf9029260341c75e9c9 named-raster-before.txt -2fa53e31ed148030bd15849808f0fb37f2622bda08baa69b25792807f44a1260 named-raster-clean.txt -fc6f3896959cd7c55b9a5f8996e7cd922238acbec52f51c5c389e647af66d5fb named-raster-duplicate.txt -63f8ab34e450f6369310561dc2b13344cc47b472e9272b9aa1e1616c91f385af named-raster-finishings-followup.txt -c40cc79aeb33f1ac458e1ec86ceed30adb33f991327d4b96e3b61b49ffef8488 ptouch-integrated-12mm.tar.gz -584aa8ecb351c08f15ed67169c186fb69db6eece4713c5c2d1ca914f6ccc8c31 usb-capture.c -``` diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/claude-implementation-review.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/claude-implementation-review.txt deleted file mode 100644 index edaf678..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/claude-implementation-review.txt +++ /dev/null @@ -1,55 +0,0 @@ -I found one verified correctness defect in the implementation. It is medium severity and has a two-line fix. I found no material regressions in the cut lifecycle, failure cleanup and uncertain-output latch, USB selection, the CUPS decoder patch, or the default bridge. Two things remain unverified ordinary-CUPS cases that the tests skip, and some docs are stale and should be fixed before archive. - -## Verified defects - -**1. Medium: a size given only by name inside `media-col` is not treated as an explicit size. PNG then replaces it with the image-derived length.** -- **Where:** `src/filter_png.c:83-96` (`pt_explicit_length`) only looks at `media-col.media-size.y-dimension` and the top-level `media` keyword. -- **Trigger:** PAPPL accepts `media-col { media-size-name "om_12x50mm_12x50mm" }`. It validates the name against `media-supported` (`printer-ipp.c:2270-2294`), and `_papplMediaColImport` (`printer-support.c:551-559`) sets the 50 mm length from the name and prefers the name over x/y dimensions. -- **Consequence:** `pt_explicit_length` returns false, so `pt_set_page_length` overwrites the 50 mm with the image length (25.4 mm for 180 rows). This breaks "explicit geometry honored" for any IPP client that sends a size name rather than dimensions. CUPS sends dimensions, which is why your CUPS fixture passed. [verified by source path; not exercised by any test] -- **Same gap in the raster patch:** `patches/pappl-1.4.11-raster.patch:94-95` computes `explicit_width`/`explicit_length` from top-level `media` or `media-size` x/y only. So a contradictory size given by name is not rejected. This is less harmful because the raster page's own geometry still prints, but it misses the "contradictory explicit geometry fails visibly" requirement for this form. -- **Fix:** in both places, also treat `media-col.media-size-name` as explicit when `pwgMediaForPWG(name)` resolves with `length > 0`. Add one PNG case to `run_image`: `media-col` with only the size name should give 354 rows. - -**2. Low: idle status polling can mark the printer offline while a job is printing.** -- **Where:** `src/driver.c:588-606`. -- **Trigger:** PAPPL decides whether to run the status callback while holding its lock, then releases the lock and calls it (`printer-ipp.c:1783-1789`, `printer-accessors.c:528-532`). If a job starts in that gap, `papplPrinterOpenDevice` returns NULL. The new code then sets OFFLINE, sets media to unconfirmed, and logs "present but cannot be opened or claimed". The old code cleared OFFLINE in this case. -- **Consequence:** clients can briefly see a false `offline` reason and a misleading error log while a healthy job prints. The next idle poll clears it, and no output is affected. -- **Fix:** in the NULL-open branch, return without publishing when `papplPrinterGetState(printer) == IPP_PSTATE_PROCESSING`. Keep OFFLINE for the genuinely unclaimable case. - -**3. Low: some docs are stale and contradict the recorded evidence.** -- These still say integrated or recovery acceptance is pending: - - ADR-0008, last paragraph. - - ADR-0007: "Physical recovery remains part of the PT-2730 hardware acceptance gate". - - `tests/FINISHINGS.md`, last paragraph. - - `tests/CUT-PROBE.md`, intro and gate-result paragraph. - - `validation.md`, "Hardware gate": "remain pending". -- `validation.md` reports "39 of 42 overall" in one place and 41/42 elsewhere. -- `docs/adr/README.md` still lists the old titles for 0004 and 0008. -- Evidence is cited as `vault:/tmp/...` and local `/tmp/...`, which will not survive a reboot. -- **Fix:** update these before sync/archive, and move retained evidence somewhere durable or describe it as ephemeral. - -## Assumptions and gaps (need one check each) - -- **[assumption] Multi-copy PDF through CUPS may be rejected.** Without a `document-format`, PAPPL advertises `copies-supported 1-999` (`printer-ipp.c:77-84`). If the generated CUPS queue passes copies=N to the backend for a PDF it converts to PWG raster, the patched validation rejects copies≠1. CUPS's default error policy may then stop the queue. `check-cups.py` only sends PDFs with one copy. **Check:** `lp -n 2` on the two-label PDF through the driverless queue. If it fails, decide the behavior explicitly; quietly printing once would be worse. -- **[assumption] Custom lengths through CUPS may be rejected for 6/9/12/24 mm.** CUPS normally takes a single printer-wide minimum margin for custom sizes. Your published minimums are 53/57 centimm. For 12 mm that gives a left offset of 3 px, below `g.left_px` = 4, so `r_startpage` would reject it. This would be truthful but surprising. **Check:** `lp -o media=Custom.12x40mm label.png`. -- **[verified] JPEG geometry is not refreshed first.** PAPPL's JPEG filter builds print options before `r_startjob` refreshes the tape. After an offline start or an unpolled cassette change, a JPEG fails visibly with a width-mismatch error and sends no output. This behavior is not new, and the spec scenario only promises it for PNG. No action is needed beyond being aware of it. - -## Your two diagnostic nuances - -- **`job-impressions-completed=1` on the aborted incomplete job:** this is not a contract defect. PAPPL counts the page as soon as it starts, before any rows are decoded or any callback runs (`job-process.c:645`). It records input pages, not proven physical output. The authoritative signals are correct: job aborted, a format-error reason, no FF/EJECT, and the latch reporting `other` with the recovery log. No change is needed; at most, note this meaning in the README. -- **10 s client timeout on the streamed raster job:** this was a test-client setting, not a product defect. PAPPL replies to a streamed raster Print-Job only after end-job, so the reply time equals the physical print time. CUPS's backend waited through your multi-label PDF runs. Generic clients with short timeouts could report a failure for a job that actually completed. That is how PAPPL streaming works and predates this change, and nothing here replays the job. - -## Areas reviewed with no material issue - -- **Deferred FF / final EJECT:** a label's print command waits until the next label passes validation or end-job succeeds. A failed next-label validation leaves the run uncertain rather than finalizing it. -- **Precut and continuation:** ESC @ is sent only for a known closed run, and precut happens only on the first label of each batch. -- **Cleanup:** the run is marked uncertain before any setup is sent; cleanup is idempotent; a rejected or canceled follower that sent nothing leaves the previous run intact. -- **Finishings resolution:** enum handling covers 60+63, 63+60, none alongside other values, and 11/60 as equivalents; it is consistent with the patch's `_papplTrimSelection`. -- **Dependency patches:** the CUPS patch is correct; errors are cleared when a stream opens (`raster-stream.c:450`), so a failure does not carry over to the next job on the same thread. PAPPL regenerates its driver attributes only in `SetDriverData`, so the bridge's replacements survive `SetReadyMedia`. The version-pin guards fail closed. - -## Avoidable complexity - -- **[design preference] Duplicate lifecycle in the probe:** the cut probe's `batch` sequence (`tests/cut_probe.c` `run_batch`) is a second implementation of the lifecycle the driver now runs and that passed physical testing. After archive, consider trimming it to the historical diagnostic sequences, so the probe and driver cannot drift apart. -- **Redundant CI step:** the first workflow step (`target: build`) repeats the CTest run that the runtime image build already does through the same stage. It is harmless but redundant. -- **Accepted trade-off, not a defect:** rebuilding CUPS and pinning its version is the largest maintenance cost. Every Debian CUPS security release will turn CI red until the patch is refreshed, which blocks unrelated publishes in the meantime. You approved this. - -Nothing else I found adds substantial unnecessary machinery for your stated goals. diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/cups-review-fixes.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/cups-review-fixes.txt deleted file mode 100644 index dd2fec4..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/cups-review-fixes.txt +++ /dev/null @@ -1,1186 +0,0 @@ --- The C compiler identification is GNU 12.2.0 --- Detecting C compiler ABI info --- Detecting C compiler ABI info - done --- Check for working C compiler: /usr/bin/cc - skipped --- Detecting C compile features --- Detecting C compile features - done --- Found Python3: /usr/bin/python3 (found version "3.11.2") found components: Interpreter --- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.1") --- Checking for module 'pappl' --- Found pappl, version 1.4.11 --- Checking for module 'libusb-1.0' --- Found libusb-1.0, version 1.0.26 --- Checking for module 'libpng' --- Found libpng, version 1.6.39 --- Configuring done --- Generating done --- Build files have been written to: /tmp/review-build -[ 27%] Building C object CMakeFiles/ptcore.dir/src/raster.c.o -[ 27%] Building C object CMakeFiles/ptcore.dir/src/protocol.c.o -[ 27%] Building C object CMakeFiles/ptcore.dir/src/tables.c.o -[ 36%] Building C object CMakeFiles/ptcore.dir/src/status.c.o -[ 45%] Building C object CMakeFiles/ptcore.dir/src/cutter.c.o -[ 54%] Linking C static library libptcore.a -[ 54%] Built target ptcore -[ 72%] Building C object CMakeFiles/ptouch-app.dir/src/main.c.o -[ 72%] Building C object CMakeFiles/ptouch-app.dir/src/device_usb.c.o -[ 81%] Building C object CMakeFiles/ptouch-app.dir/src/driver.c.o -[ 90%] Building C object CMakeFiles/ptouch-app.dir/src/filter_png.c.o -[100%] Linking C executable ptouch-app -[100%] Built target ptouch-app -"/tmp/cups-queue-epm9urlw/request.test": - Get-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - requested-attributes (keyword) = all - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 10218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - charset-configured (charset) = utf-8 - charset-supported (1setOf charset) = us-ascii,utf-8 - client-info-supported (1setOf keyword) = client-name,client-patches,client-string-version,client-version - compression-supported (1setOf keyword) = deflate,gzip,none - copies-default (integer) = 1 - device-uuid (uri) = urn:uuid:62ed3f5d-64a1-3080-57a1-bfcbe8c2bd2f - document-format-default (mimeMediaType) = application/octet-stream - generated-natural-language-supported (naturalLanguage) = en - ipp-versions-supported (1setOf keyword) = 1.1,2.0 - job-hold-until-default (keyword) = no-hold - job-hold-until-supported (1setOf keyword) = day-time,evening,indefinite,night,no-hold,second-shift,third-shift,weekend - job-hold-until-time-supported (boolean) = true - job-ids-supported (boolean) = true - job-k-octets-supported (rangeOfInteger) = 0-101803280 - job-priority-default (integer) = 50 - job-priority-supported (integer) = 1 - job-sheets-default (nameWithoutLanguage) = none - job-sheets-supported (nameWithoutLanguage) = none - multiple-document-handling-supported (1setOf keyword) = separate-documents-uncollated-copies,separate-documents-collated-copies - multiple-document-jobs-supported (boolean) = false - multiple-operation-time-out (integer) = 60 - multiple-operation-time-out-action (keyword) = abort-job - natural-language-configured (naturalLanguage) = en - notify-events-default (keyword) = job-completed - notify-events-supported (1setOf keyword) = document-completed,document-config-changed,document-created,document-fetchable,document-state-changed,document-stopped,job-completed,job-config-changed,job-created,job-fetchable,job-progress,job-state-changed,job-stopped,printer-config-changed,printer-finishings-changed,printer-media-changed,printer-queue-order-changed,printer-restarted,printer-shutdown,printer-state-changed,printer-stopped,resource-canceled,resource-config-changed,resource-created,resource-installed,resource-changed,printer-created,printer-deleted,system-config-changed,system-state-changed,system-stopped - notify-lease-duration-default (integer) = 3600 - notify-lease-duration-supported (rangeOfInteger) = 0-86400 - notify-max-events-supported (integer) = 100 - notify-pull-method-supported (keyword) = ippget - operations-supported (1setOf enum) = Print-Job,Validate-Job,Create-Job,Send-Document,Cancel-Job,Get-Job-Attributes,Get-Jobs,Get-Printer-Attributes,Pause-Printer,Resume-Printer,Set-Printer-Attributes,Get-Printer-Supported-Values,Create-Printer-Subscriptions,Create-Job-Subscriptions,Get-Subscription-Attributes,Get-Subscriptions,Renew-Subscription,Cancel-Subscription,Get-Notifications,Enable-Printer,Disable-Printer,Pause-Printer-After-Current-Job,Cancel-Current-Job,Cancel-Jobs,Cancel-My-Jobs,Close-Job,Identify-Printer,Hold-Job,Release-Job,Hold-New-Jobs,Release-Held-New-Jobs - orientation-requested-supported (1setOf enum) = portrait,landscape,reverse-landscape,reverse-portrait,none - pdl-override-supported (keyword) = attempted - print-content-optimize-supported (1setOf keyword) = auto,graphic,photo,text-and-graphic,text - print-processing-attributes-supported (1setOf keyword) = print-color-mode,printer-resolution - print-quality-supported (1setOf enum) = draft,normal,high - print-scaling-supported (1setOf keyword) = auto,auto-fit,fill,fit,none - printer-get-attributes-supported (keyword) = document-format - printer-info (textWithoutLanguage) = ptouch - printer-name (nameWithoutLanguage) = ptouch - printer-uuid (uri) = urn:uuid:62ed3f5d-64a1-3080-57a1-bfcbe8c2bd2f - requesting-user-uri-supported (boolean) = true - smi55357-device-uri (uri) = socket://127.0.0.1:54813 - smi55357-driver (keyword) = brother_ptouch - uri-security-supported (1setOf keyword) = tls,none - which-jobs-supported (1setOf keyword) = completed,not-completed,all - printer-id (integer) = 1 - color-supported (boolean) = false - document-format-preferred (mimeMediaType) = image/urf - document-format-supported (1setOf mimeMediaType) = application/octet-stream,image/pwg-raster,image/urf,image/png,image/jpeg - ipp-features-supported (keyword) = ipp-everywhere - job-creation-attributes-supported (1setOf keyword) = copies,document-format,document-name,ipp-attribute-fidelity,job-hold-until,job-hold-until-time,job-name,job-priority,job-retain-until,job-retain-until-interval,job-retain-until-time,media,media-col,multiple-document-handling,orientation-requested,print-color-mode,print-content-optimize,print-quality,printer-resolution,finishings,finishings-col - jpeg-features-supported (1setOf keyword) = arithmetic,cmyk,progressive - jpeg-k-octets-supported (rangeOfInteger) = 0-101803280 - jpeg-x-dimension-supported (rangeOfInteger) = 0-16384 - jpeg-y-dimension-supported (rangeOfInteger) = 1-16384 - landscape-orientation-requested-preferred (enum) = 4 - media-bottom-margin-supported (integer) = 0 - media-col-supported (1setOf keyword) = media-bottom-margin,media-left-margin,media-right-margin,media-size,media-size-name,media-top-margin,media-source,media-type - media-source-supported (1setOf keyword) = main-roll,auto - media-supported (1setOf keyword) = om_6x25mm_6x25mm,om_6x50mm_6x50mm,om_6x100mm_6x100mm,om_9x25mm_9x25mm,om_9x50mm_9x50mm,om_9x100mm_9x100mm,om_12x25mm_12x25mm,om_12x50mm_12x50mm,om_12x100mm_12x100mm,om_18x25mm_18x25mm,om_18x50mm_18x50mm,om_18x100mm_18x100mm,om_24x25mm_24x25mm,om_24x50mm_24x50mm,om_24x100mm_24x100mm,roll_min_6x5mm,roll_max_24x300mm - media-top-margin-supported (integer) = 0 - media-type-supported (keyword) = labels - mopria-certified (textWithoutLanguage) = 1.3 - output-bin-supported (keyword) = face-down - pages-per-minute (integer) = 20 - print-color-mode-supported (1setOf keyword) = bi-level,monochrome - printer-device-id (textWithoutLanguage) = MFG:Brother;MDL:PT-2730;CMD:PT-CBP; - printer-kind (keyword) = label - printer-make-and-model (textWithoutLanguage) = Brother PT-2730 - printer-output-tray (octetString) = type=unRemovableBin;maxcapacity=-2;remaining=-2;status=0;name=face-down;stackingorder=firstToLast;pagedelivery=faceDown; - printer-resolution-supported (resolution) = 180dpi - printer-settable-attributes (1setOf keyword) = copies-default,media-col-default,media-col-ready,media-default,media-ready,multiple-document-handling-default,orientation-requested-default,print-color-mode-default,print-content-optimize-default,print-quality-default,printer-contact-col,printer-geo-location,printer-location,printer-organization,printer-organizational-unit,printer-resolution-default,finishings-col-default,finishings-default - pwg-raster-document-resolution-supported (resolution) = 180dpi - pwg-raster-document-type-supported (1setOf keyword) = black_1,black_8 - sides-supported (keyword) = one-sided - urf-supported (1setOf keyword) = V1.5,W8,DEVW8,PQ3-4-5,FN3-11,IS0-9,MT5,OB10,RS180 - finishings-supported (1setOf enum) = none,trim,trim-after-pages,trim-after-job - finishings-ready (1setOf enum) = none,trim,trim-after-pages,trim-after-job - finishings-col-supported (keyword) = finishing-template - finishing-template-supported (1setOf keyword) = trim,trim-after-pages,trim-after-job,ptouch-chain - finishings-col-database (1setOf collection) = {finishing-template=trim},{finishing-template=trim-after-pages},{finishing-template=trim-after-job},{finishing-template=ptouch-chain} - finishings-col-ready (1setOf collection) = {finishing-template=trim},{finishing-template=trim-after-pages},{finishing-template=trim-after-job},{finishing-template=ptouch-chain} - media-size-supported (1setOf collection) = {x-dimension=599-601 y-dimension=500-30000},{x-dimension=899-901 y-dimension=500-30000},{x-dimension=1199-1201 y-dimension=500-30000},{x-dimension=1799-1801 y-dimension=500-30000},{x-dimension=2399-2401 y-dimension=500-30000} - media-left-margin-supported (1setOf integer) = 53,63,74,83,297 - media-right-margin-supported (1setOf integer) = 57,71,74,85,297 - finishings-default (enum) = trim - finishings-col-default (collection) = {finishing-template=trim} - printer-is-accepting-jobs (boolean) = true - printer-state (enum) = idle - printer-state-message (textWithoutLanguage) = Idle. - printer-state-reasons (keyword) = none - copies-supported (rangeOfInteger) = 1-999 - identify-actions-default (keyword) = none - job-spooling-supported (keyword) = spool - media-col-default (collection) = {media-bottom-margin=0 media-left-margin=63 media-right-margin=71 media-size={x-dimension=1200 y-dimension=10000} media-size-name=om_12x100mm_12x100mm media-source=main-roll media-top-margin=0 media-type=labels} - media-col-ready (collection) = {media-bottom-margin=0 media-left-margin=63 media-right-margin=71 media-size={x-dimension=1200 y-dimension=10000} media-size-name=om_12x100mm_12x100mm media-source=main-roll media-top-margin=0 media-type=labels} - media-default (keyword) = om_12x100mm_12x100mm - media-ready (keyword) = om_12x100mm_12x100mm - multiple-document-handling-default (keyword) = separate-documents-collated-copies - orientation-requested-default (enum) = none - output-bin-default (keyword) = face-down - print-color-mode-default (keyword) = bi-level - print-content-optimize-default (keyword) = auto - print-quality-default (enum) = normal - print-scaling-default (keyword) = none - printer-config-change-date-time (dateTime) = 2026-10-13T05:03:12Z - printer-config-change-time (integer) = 1 - printer-contact-col (collection) = {contact-name= contact-uri=data:, contact-vcard=BEGIN:VCARD -VERSION:4.0 -FN: -TEL;VALUE=URI;TYPE=work: -EMAIL;TYPE=work: -END:VCARD -} - printer-current-time (dateTime) = 2026-10-13T05:03:13Z - printer-dns-sd-name (nameWithoutLanguage) = ptouch - printer-firmware-name (1setOf nameWithoutLanguage) = ptouch-app,PAPPL,libcups,libjpeg,libpng - printer-firmware-patches (1setOf textWithoutLanguage) = ,,,, - printer-firmware-string-version (1setOf textWithoutLanguage) = 1.0,1.4.11,2.4.2,8.0,1.6.39 - printer-firmware-version (1setOf octetString) = \001\000\000\000\000\000\000\000,\001\000\004\000\ \000\000\000,\002\000\004\000\002\000\000\000,\010\000\000\000\000\000\000\000,\001\000\006\000'\000\000\000 - printer-geo-location (unknown) = unknown - printer-icons (1setOf uri) = http://localhost:8000/ptouch/icon-sm.png,http://localhost:8000/ptouch/icon-md.png,http://localhost:8000/ptouch/icon-lg.png - printer-impressions-completed (integer) = 0 - printer-input-tray (1setOf octetString) = type=sheetFeedAutoRemovableTray;mediafeed=10000;mediaxfeed=1200;maxcapacity=-2;level=-2;status=0;name=main-roll;,type=other;mediafeed=0;mediaxfeed=0;maxcapacity=-2;level=-2;status=0;name=auto; - printer-location (textWithoutLanguage) = - printer-more-info (uri) = http://localhost:8000/ptouch/ - printer-organization (textWithoutLanguage) = - printer-organizational-unit (textWithoutLanguage) = - printer-resolution-default (resolution) = 180dpi - printer-speed-default (integer) = 0 - printer-state-change-date-time (dateTime) = 2026-10-13T05:03:12Z - printer-state-change-time (integer) = 0 - printer-supply-info-uri (uri) = http://localhost:8000/ptouch/supplies - printer-up-time (integer) = 1 - printer-uri-supported (uri) = ipp://localhost:8000/ipp/print/ptouch - printer-xri-supported (collection) = {xri-authentication=none xri-security=none xri-uri=ipp://localhost:8000/ipp/print/ptouch} - queued-job-count (integer) = 0 - sides-default (keyword) = one-sided - uri-authentication-supported (keyword) = none - -"/tmp/cups-queue-epm9urlw/request.test": - Set-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - finishings-default (enum) = trim - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 114 bytes in response - status-code = successful-ok (Printer attributes set.) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - status-message (textWithoutLanguage) = Printer attributes set. - -"/tmp/cups-queue-epm9urlw/request.test": - Get-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - requested-attributes (keyword) = finishings-default - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 100 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - finishings-default (enum) = trim - -"/tmp/cups-queue-epm9urlw/request.test": - Set-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - finishings-default (enum) = trim-after-job - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 114 bytes in response - status-code = successful-ok (Printer attributes set.) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - status-message (textWithoutLanguage) = Printer attributes set. - -"/tmp/cups-queue-epm9urlw/request.test": - Get-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - requested-attributes (keyword) = finishings-default - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 100 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - finishings-default (enum) = trim-after-job - -"/tmp/cups-queue-epm9urlw/request.test": - Set-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - finishings-default (enum) = trim - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 114 bytes in response - status-code = successful-ok (Printer attributes set.) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - status-message (textWithoutLanguage) = Printer attributes set. - - - -PageSize/Media Size: *12x100mm 12x25mm 12x50mm 18x100mm 18x25mm 18x50mm 24x100mm 24x25mm 24x50mm 6x100mm 6x25mm 6x50mm 9x100mm 9x25mm 9x50mm Custom.WIDTHxHEIGHT -InputSlot/Media Source: *MainRoll Auto -cupsPrintQuality/cupsPrintQuality: Draft *Normal High -ColorModel/Output Mode: *Gray DeviceGray -OutputBin/OutputBin: *FaceDown -CutMedia/CutMedia: None *Auto EndOfPage EndOfJob -cupsFinishingTemplate/cupsFinishingTemplate: *none Trim TrimAfterPages TrimAfterJob PtouchChain - -request id is ptouch-cups-1 (1 file(s)) - -request id is ptouch-cups-2 (1 file(s)) - -Offline jobs: ptouch-cups-1 root 1024 Tue Oct 13 05:03:13 2026 -ptouch-cups-2 root 1024 Tue Oct 13 05:03:13 2026 - -Resumed offline job 1 {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -Resumed offline job 2 {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -request id is ptouch-cups-3 (1 file(s)) - -CUPS label.png None {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -request id is ptouch-cups-4 (1 file(s)) - -CUPS label.png 60 {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -request id is ptouch-cups-5 (1 file(s)) - -CUPS label.jpg 63 {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -request id is ptouch-cups-6 (1 file(s)) - -CUPS labels.pdf 60 {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'ff', 'autocut': True, 'chain_off_at_print': False}, {'rows': 354, 'length_mm': 49.95, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -request id is ptouch-cups-7 (1 file(s)) - -CUPS labels.pdf 63 {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'ff', 'autocut': True, 'chain_off_at_print': False}, {'rows': 354, 'length_mm': 49.95, 'finish': 'eject', 'autocut': False, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -request id is ptouch-cups-8 (1 file(s)) - -CUPS labels.pdf 60 {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'ff', 'autocut': True, 'chain_off_at_print': False}, {'rows': 354, 'length_mm': 49.95, 'finish': 'ff', 'autocut': True, 'chain_off_at_print': False}, {'rows': 354, 'length_mm': 49.95, 'finish': 'ff', 'autocut': True, 'chain_off_at_print': False}, {'rows': 354, 'length_mm': 49.95, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -request id is ptouch-cups-9 (1 file(s)) - -CUPS rounded custom size with explicit margins: {'pages': [{'rows': 282, 'length_mm': 39.79, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -request id is ptouch-cups-10 (1 file(s)) - -CUPS oversized custom PNG rejected without output. -"/tmp/cups-queue-epm9urlw/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - print-scaling (keyword) = none - media-col (collection) = {media-size={x-dimension=1200 y-dimension=4000} media-left-margin=63 media-right-margin=71} - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 11 - job-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch/11 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 11 - /tmp/cups-queue-epm9urlw/request [0001] - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 908 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - print-scaling (keyword) = none - media-col (collection) = {media-size={x-dimension=1200 y-dimension=4000} media-left-margin=63 media-right-margin=71} - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 11 - job-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch/11 - job-uuid (uri) = urn:uuid:1a25b94b-98eb-328b-76ab-a582928656e5 - job-printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:03:26Z - date-time-at-completed (dateTime) = 2026-10-13T05:03:26Z - date-time-at-processing (dateTime) = 2026-10-13T05:03:26Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 1 - job-printer-up-time (integer) = 19 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 14 - time-at-completed (integer) = 14 - time-at-processing (integer) = 14 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -Exact standard custom media-col: {'pages': [{'rows': 283, 'length_mm': 39.93, 'finish': 'eject', 'autocut': True, 'chain_off_at_print': True}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 1} -"/tmp/cups-queue-epm9urlw/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 1 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings-col (collection) = {finishing-template=ptouch-chain} - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 12 - job-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch/12 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 12 - /tmp/cups-queue-epm9urlw/request [0001] - /tmp/cups-queue-epm9urlw/request [PASS] - RECEIVED: 858 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 1 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings-col (collection) = {finishing-template=ptouch-chain} - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 12 - job-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch/12 - job-uuid (uri) = urn:uuid:6ee7d6e8-d869-313a-770b-16b9873af066 - job-printer-uri (uri) = ipp://127.0.0.1:8000/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:03:31Z - date-time-at-completed (dateTime) = 2026-10-13T05:03:31Z - date-time-at-processing (dateTime) = 2026-10-13T05:03:31Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 1 - job-printer-up-time (integer) = 24 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 19 - time-at-completed (integer) = 19 - time-at-processing (integer) = 19 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -Standard ptouch-chain collection: {'pages': [{'rows': 354, 'length_mm': 49.95, 'finish': 'ff', 'autocut': True, 'chain_off_at_print': False}], 'terminal_commands_after_pages': [], 'init': 1, 'eject': 0} -Conventional CUPS integration passed. -I [2026-10-13T05:03:12.641Z] Starting log, system up 0 second(s), 0 printer(s), listening for connections on 'd7ee03dcb216.local:8000' from up to 32768 clients. -I [2026-10-13T05:03:12.644Z] Listening for connections on '*:8000'. -I [2026-10-13T05:03:12.644Z] Listening for connections on '*:8000'. -I [2026-10-13T05:03:12.644Z] Printer 'ptouch' at resource path '/ipp/print/ptouch'. -W [2026-10-13T05:03:12.644Z] [Printer ptouch] Driver does not support identification. -W [2026-10-13T05:03:12.644Z] [Printer ptouch] Driver does not support a self-test page. -W [2026-10-13T05:03:12.644Z] [Printer ptouch] Driver does not provide printer icons, using defaults. -I [2026-10-13T05:03:12.644Z] Created printer for socket://127.0.0.1:54813 (PTOUCH_DEVICE_URI override) -I [2026-10-13T05:03:12.644Z] Listening for connections on '/run/ptouch-app.sock'. -I [2026-10-13T05:03:12.644Z] Starting system. -E [2026-10-13T05:03:12.644Z] Unable to initialize DNS-SD: Daemon not running -E [2026-10-13T05:03:12.644Z] Unable to initialize DNS-SD: Daemon not running -I [2026-10-13T05:03:13.645Z] [Client 1] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.646Z] [Client 1] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.646Z] [Client 1] Continue -I [2026-10-13T05:03:13.646Z] [Client 1] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:13.646Z] [Client 1] OK application/ipp 10218 -I [2026-10-13T05:03:13.654Z] [Client 1] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.660Z] [Client 2] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.660Z] [Client 2] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.660Z] [Client 2] Continue -I [2026-10-13T05:03:13.660Z] [Client 2] Set-Printer-Attributes successful-ok (Printer attributes set.) -I [2026-10-13T05:03:13.660Z] [Client 2] OK application/ipp 114 -I [2026-10-13T05:03:13.661Z] [Client 2] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.669Z] [Client 3] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.669Z] [Client 3] HTTP_STATE_GET http://127.0.0.1:8000/ptouch/printing HTTP/1.1 () -I [2026-10-13T05:03:13.669Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:13.669Z] [Client 3] OK text/html 0 -I [2026-10-13T05:03:13.670Z] [Client 3] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.670Z] [Client 4] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.670Z] [Client 4] HTTP_STATE_POST http://127.0.0.1:8000/ptouch/printing HTTP/1.1 () -I [2026-10-13T05:03:13.670Z] [Client 4] OK text/html 0 -I [2026-10-13T05:03:13.670Z] [Client 4] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.675Z] [Client 5] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.675Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:13.675Z] [Client 5] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.675Z] [Client 5] Continue -I [2026-10-13T05:03:13.676Z] [Client 5] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:13.676Z] [Client 5] OK application/ipp 100 -I [2026-10-13T05:03:13.676Z] [Client 5] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.681Z] [Client 6] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.682Z] [Client 6] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.682Z] [Client 6] Continue -I [2026-10-13T05:03:13.682Z] [Client 6] Set-Printer-Attributes successful-ok (Printer attributes set.) -I [2026-10-13T05:03:13.682Z] [Client 6] OK application/ipp 114 -I [2026-10-13T05:03:13.682Z] [Client 6] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.683Z] [Client 7] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.683Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:13.683Z] [Client 7] HTTP_STATE_GET http://127.0.0.1:8000/ptouch/printing HTTP/1.1 () -I [2026-10-13T05:03:13.683Z] [Client 7] OK text/html 0 -I [2026-10-13T05:03:13.684Z] [Client 7] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.684Z] [Client 8] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.684Z] [Client 8] HTTP_STATE_POST http://127.0.0.1:8000/ptouch/printing HTTP/1.1 () -I [2026-10-13T05:03:13.684Z] [Client 8] OK text/html 0 -I [2026-10-13T05:03:13.684Z] [Client 8] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.689Z] [Client 9] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.689Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:13.689Z] [Client 9] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.689Z] [Client 9] Continue -I [2026-10-13T05:03:13.690Z] [Client 9] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:13.690Z] [Client 9] OK application/ipp 100 -I [2026-10-13T05:03:13.690Z] [Client 9] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.695Z] [Client 10] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.695Z] [Client 10] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.695Z] [Client 10] Continue -I [2026-10-13T05:03:13.695Z] [Client 10] Set-Printer-Attributes successful-ok (Printer attributes set.) -I [2026-10-13T05:03:13.695Z] [Client 10] OK application/ipp 114 -I [2026-10-13T05:03:13.695Z] [Client 10] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.701Z] [Client 11] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.701Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:13.701Z] [Client 11] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.701Z] [Client 11] Continue -I [2026-10-13T05:03:13.701Z] [Client 11] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:13.701Z] [Client 11] OK application/ipp 14378 -I [2026-10-13T05:03:13.707Z] [Client 11] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.738Z] [Client 12] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.739Z] [Client 12] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.739Z] [Client 12] Continue -I [2026-10-13T05:03:13.739Z] [Client 12] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:13.739Z] [Client 12] OK application/ipp 1033 -I [2026-10-13T05:03:13.740Z] [Client 12] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.740Z] [Client 12] Continue -I [2026-10-13T05:03:13.740Z] [Client 12] Validate-Job successful-ok -I [2026-10-13T05:03:13.740Z] [Client 12] OK application/ipp 75 -I [2026-10-13T05:03:13.740Z] [Client 13] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.740Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.740Z] [Client 13] Continue -I [2026-10-13T05:03:13.740Z] [Client 12] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.740Z] [Client 12] Continue -I [2026-10-13T05:03:13.740Z] [Client 13] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:13.740Z] [Client 13] OK application/ipp 1033 -I [2026-10-13T05:03:13.740Z] [Client 12] Create-Job successful-ok -I [2026-10-13T05:03:13.740Z] [Client 12] OK application/ipp 237 -I [2026-10-13T05:03:13.740Z] [Client 12] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.740Z] [Client 12] Continue -I [2026-10-13T05:03:13.740Z] [Job 1] Received 153 bytes of document data. -I [2026-10-13T05:03:13.741Z] [Client 12] Send-Document successful-ok -I [2026-10-13T05:03:13.741Z] [Client 12] OK application/ipp 220 -I [2026-10-13T05:03:13.741Z] [Job 1] Starting print job. -E [2026-10-13T05:03:13.741Z] [Device] Unable to connect to \'127.0.0.1:54813\': Host is down -E [2026-10-13T05:03:13.741Z] [Printer ptouch] Unable to open device 'socket://127.0.0.1:54813', pausing queue until printer becomes available. -I [2026-10-13T05:03:13.741Z] [Client 12] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.741Z] [Client 12] Continue -I [2026-10-13T05:03:13.741Z] [Client 12] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:13.741Z] [Client 12] OK application/ipp 1038 -I [2026-10-13T05:03:13.741Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.741Z] [Client 13] Continue -I [2026-10-13T05:03:13.741Z] [Client 13] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:13.741Z] [Client 13] OK application/ipp 233 -I [2026-10-13T05:03:13.741Z] [Client 12] Closing connection from 'localhost'. -I [2026-10-13T05:03:13.741Z] [Client 14] Accepted connection from 'localhost'. -I [2026-10-13T05:03:13.741Z] [Client 14] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:13.741Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:13.741Z] [Client 14] Continue -I [2026-10-13T05:03:13.741Z] [Client 14] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:13.741Z] [Client 14] OK application/ipp 233 -I [2026-10-13T05:03:14.741Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:14.742Z] [Client 13] Continue -I [2026-10-13T05:03:14.742Z] [Client 13] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:14.742Z] [Client 13] OK application/ipp 1038 -I [2026-10-13T05:03:14.742Z] [Client 14] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:14.742Z] [Client 14] Continue -I [2026-10-13T05:03:14.742Z] [Client 14] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:14.742Z] [Client 14] OK application/ipp 1038 -I [2026-10-13T05:03:14.742Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:14.742Z] [Client 13] Continue -I [2026-10-13T05:03:14.742Z] [Client 13] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:14.742Z] [Client 13] OK application/ipp 233 -I [2026-10-13T05:03:14.742Z] [Client 14] Closing connection from 'localhost'. -I [2026-10-13T05:03:14.742Z] [Client 15] Accepted connection from 'localhost'. -I [2026-10-13T05:03:14.742Z] [Client 15] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:14.742Z] [Client 15] Continue -I [2026-10-13T05:03:14.742Z] [Client 15] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:14.742Z] [Client 15] OK application/ipp 233 -I [2026-10-13T05:03:15.742Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:15.742Z] [Client 13] Continue -I [2026-10-13T05:03:15.742Z] [Client 13] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:15.742Z] [Client 13] OK application/ipp 1038 -I [2026-10-13T05:03:15.743Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:15.743Z] [Client 13] Continue -I [2026-10-13T05:03:15.743Z] [Client 13] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:15.743Z] [Client 13] OK application/ipp 233 -I [2026-10-13T05:03:15.743Z] [Client 15] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:15.743Z] [Client 15] Continue -I [2026-10-13T05:03:15.743Z] [Client 15] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:15.743Z] [Client 15] OK application/ipp 1038 -I [2026-10-13T05:03:15.743Z] [Client 15] Closing connection from 'localhost'. -I [2026-10-13T05:03:15.743Z] [Client 16] Accepted connection from 'localhost'. -I [2026-10-13T05:03:15.743Z] [Client 16] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:15.743Z] [Client 16] Continue -I [2026-10-13T05:03:15.744Z] [Client 16] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:15.744Z] [Client 16] OK application/ipp 233 -I [2026-10-13T05:03:17.743Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:17.743Z] [Client 13] Continue -I [2026-10-13T05:03:17.743Z] [Client 13] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:17.743Z] [Client 13] OK application/ipp 1038 -I [2026-10-13T05:03:17.743Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:17.743Z] [Client 13] Continue -I [2026-10-13T05:03:17.743Z] [Client 13] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:17.743Z] [Client 13] OK application/ipp 233 -I [2026-10-13T05:03:17.744Z] [Client 16] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:17.744Z] [Client 16] Continue -I [2026-10-13T05:03:17.744Z] [Client 16] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:17.744Z] [Client 16] OK application/ipp 1038 -I [2026-10-13T05:03:17.744Z] [Client 16] Closing connection from 'localhost'. -I [2026-10-13T05:03:17.744Z] [Client 17] Accepted connection from 'localhost'. -I [2026-10-13T05:03:17.744Z] [Client 17] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:17.744Z] [Client 17] Continue -I [2026-10-13T05:03:17.745Z] [Client 17] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:17.745Z] [Client 17] OK application/ipp 233 -I [2026-10-13T05:03:18.741Z] [Job 1] PNG image dimensions are 76x180x1 -I [2026-10-13T05:03:18.741Z] [Job 1] PNG image resolution is 180x180dpi -I [2026-10-13T05:03:18.741Z] [Job 1] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:03:18.744Z] [Job 1] Completed, job-impressions-completed=1. -I [2026-10-13T05:03:20.744Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.744Z] [Client 13] Continue -I [2026-10-13T05:03:20.744Z] [Client 13] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:20.744Z] [Client 13] OK application/ipp 1033 -I [2026-10-13T05:03:20.744Z] [Client 13] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.744Z] [Client 13] Continue -I [2026-10-13T05:03:20.744Z] [Client 13] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:20.744Z] [Client 13] OK application/ipp 247 -I [2026-10-13T05:03:20.745Z] [Client 17] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.745Z] [Client 17] Continue -I [2026-10-13T05:03:20.745Z] [Client 17] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:20.745Z] [Client 17] OK application/ipp 1033 -I [2026-10-13T05:03:20.745Z] [Client 17] Closing connection from 'localhost'. -I [2026-10-13T05:03:20.745Z] [Client 18] Accepted connection from 'localhost'. -I [2026-10-13T05:03:20.745Z] [Client 18] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.745Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:20.745Z] [Client 18] Continue -I [2026-10-13T05:03:20.746Z] [Client 18] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:20.746Z] [Client 18] OK application/ipp 247 -I [2026-10-13T05:03:20.746Z] [Client 18] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.746Z] [Client 18] Continue -I [2026-10-13T05:03:20.746Z] [Client 18] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:20.746Z] [Client 18] OK application/ipp 1033 -I [2026-10-13T05:03:20.746Z] [Client 18] Closing connection from 'localhost'. -I [2026-10-13T05:03:20.747Z] [Client 13] Closing connection from 'localhost'. -I [2026-10-13T05:03:20.753Z] [Client 19] Accepted connection from 'localhost'. -I [2026-10-13T05:03:20.754Z] [Client 19] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.754Z] [Client 19] Continue -I [2026-10-13T05:03:20.754Z] [Client 19] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:20.754Z] [Client 19] OK application/ipp 1033 -I [2026-10-13T05:03:20.754Z] [Client 19] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.754Z] [Client 19] Continue -I [2026-10-13T05:03:20.755Z] [Client 20] Accepted connection from 'localhost'. -I [2026-10-13T05:03:20.755Z] [Client 19] Validate-Job successful-ok -I [2026-10-13T05:03:20.755Z] [Client 19] OK application/ipp 75 -I [2026-10-13T05:03:20.755Z] [Client 20] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.755Z] [Client 20] Continue -I [2026-10-13T05:03:20.755Z] [Client 19] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.755Z] [Client 19] Continue -I [2026-10-13T05:03:20.755Z] [Client 19] Create-Job successful-ok -I [2026-10-13T05:03:20.755Z] [Client 19] OK application/ipp 237 -I [2026-10-13T05:03:20.755Z] [Client 20] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:20.755Z] [Client 20] OK application/ipp 1033 -I [2026-10-13T05:03:20.755Z] [Client 19] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.755Z] [Client 19] Continue -I [2026-10-13T05:03:20.755Z] [Job 2] Received 153 bytes of document data. -I [2026-10-13T05:03:20.756Z] [Client 19] Send-Document successful-ok -I [2026-10-13T05:03:20.756Z] [Client 19] OK application/ipp 220 -I [2026-10-13T05:03:20.756Z] [Job 2] Starting print job. -I [2026-10-13T05:03:20.756Z] [Job 2] PNG image dimensions are 76x180x1 -I [2026-10-13T05:03:20.756Z] [Job 2] PNG image resolution is 180x180dpi -I [2026-10-13T05:03:20.756Z] [Client 19] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.756Z] [Client 19] Continue -I [2026-10-13T05:03:20.756Z] [Job 2] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:03:20.756Z] [Client 19] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:20.756Z] [Client 19] OK application/ipp 1037 -I [2026-10-13T05:03:20.756Z] [Client 19] Closing connection from 'localhost'. -I [2026-10-13T05:03:20.756Z] [Client 21] Accepted connection from 'localhost'. -I [2026-10-13T05:03:20.756Z] [Client 21] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:20.756Z] [Client 21] Continue -I [2026-10-13T05:03:20.756Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:20.756Z] [Client 21] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:20.756Z] [Client 21] OK application/ipp 233 -I [2026-10-13T05:03:20.759Z] [Job 2] Completed, job-impressions-completed=1. -I [2026-10-13T05:03:21.755Z] [Client 20] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.756Z] [Client 20] Continue -I [2026-10-13T05:03:21.756Z] [Client 20] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:21.756Z] [Client 20] OK application/ipp 1033 -I [2026-10-13T05:03:21.757Z] [Client 21] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.757Z] [Client 21] Continue -I [2026-10-13T05:03:21.757Z] [Client 20] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.757Z] [Client 20] Continue -I [2026-10-13T05:03:21.757Z] [Client 21] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:21.757Z] [Client 21] OK application/ipp 1033 -I [2026-10-13T05:03:21.757Z] [Client 20] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:21.757Z] [Client 20] OK application/ipp 247 -I [2026-10-13T05:03:21.758Z] [Client 21] Closing connection from 'localhost'. -I [2026-10-13T05:03:21.758Z] [Client 22] Accepted connection from 'localhost'. -I [2026-10-13T05:03:21.758Z] [Client 22] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.758Z] [Client 22] Continue -I [2026-10-13T05:03:21.758Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:21.758Z] [Client 22] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:21.758Z] [Client 22] OK application/ipp 247 -I [2026-10-13T05:03:21.759Z] [Client 22] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.759Z] [Client 22] Continue -I [2026-10-13T05:03:21.759Z] [Client 22] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:21.759Z] [Client 22] OK application/ipp 1033 -I [2026-10-13T05:03:21.759Z] [Client 22] Closing connection from 'localhost'. -I [2026-10-13T05:03:21.760Z] [Client 20] Closing connection from 'localhost'. -I [2026-10-13T05:03:21.850Z] [Client 23] Accepted connection from 'localhost'. -I [2026-10-13T05:03:21.850Z] [Client 23] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.850Z] [Client 23] Continue -I [2026-10-13T05:03:21.851Z] [Client 23] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:21.851Z] [Client 23] OK application/ipp 1033 -I [2026-10-13T05:03:21.852Z] [Client 23] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.852Z] [Client 23] Continue -I [2026-10-13T05:03:21.852Z] [Client 24] Accepted connection from 'localhost'. -I [2026-10-13T05:03:21.852Z] [Client 23] Validate-Job successful-ok -I [2026-10-13T05:03:21.852Z] [Client 23] OK application/ipp 75 -I [2026-10-13T05:03:21.852Z] [Client 24] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.852Z] [Client 24] Continue -I [2026-10-13T05:03:21.852Z] [Client 23] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.852Z] [Client 23] Continue -I [2026-10-13T05:03:21.852Z] [Client 23] Create-Job successful-ok -I [2026-10-13T05:03:21.852Z] [Client 23] OK application/ipp 237 -I [2026-10-13T05:03:21.852Z] [Client 24] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:21.852Z] [Client 24] OK application/ipp 1033 -I [2026-10-13T05:03:21.853Z] [Client 23] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.853Z] [Client 23] Continue -I [2026-10-13T05:03:21.853Z] [Job 3] Received 153 bytes of document data. -I [2026-10-13T05:03:21.853Z] [Client 23] Send-Document successful-ok -I [2026-10-13T05:03:21.853Z] [Client 23] OK application/ipp 220 -I [2026-10-13T05:03:21.853Z] [Job 3] Starting print job. -I [2026-10-13T05:03:21.853Z] [Job 3] PNG image dimensions are 76x180x1 -I [2026-10-13T05:03:21.853Z] [Job 3] PNG image resolution is 180x180dpi -I [2026-10-13T05:03:21.853Z] [Job 3] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:03:21.853Z] [Client 23] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.853Z] [Client 23] Continue -I [2026-10-13T05:03:21.853Z] [Client 23] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:21.853Z] [Client 23] OK application/ipp 1037 -I [2026-10-13T05:03:21.854Z] [Client 23] Closing connection from 'localhost'. -I [2026-10-13T05:03:21.854Z] [Client 25] Accepted connection from 'localhost'. -I [2026-10-13T05:03:21.854Z] [Client 25] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:21.854Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:21.854Z] [Client 25] Continue -I [2026-10-13T05:03:21.854Z] [Client 25] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:21.854Z] [Client 25] OK application/ipp 233 -I [2026-10-13T05:03:21.856Z] [Job 3] Completed, job-impressions-completed=1. -I [2026-10-13T05:03:22.853Z] [Client 24] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.853Z] [Client 24] Continue -I [2026-10-13T05:03:22.853Z] [Client 24] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:22.853Z] [Client 24] OK application/ipp 1033 -I [2026-10-13T05:03:22.853Z] [Client 24] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.854Z] [Client 24] Continue -I [2026-10-13T05:03:22.854Z] [Client 24] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:22.854Z] [Client 24] OK application/ipp 247 -I [2026-10-13T05:03:22.854Z] [Client 25] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.854Z] [Client 25] Continue -I [2026-10-13T05:03:22.854Z] [Client 25] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:22.855Z] [Client 25] OK application/ipp 1033 -I [2026-10-13T05:03:22.855Z] [Client 25] Closing connection from 'localhost'. -I [2026-10-13T05:03:22.855Z] [Client 26] Accepted connection from 'localhost'. -I [2026-10-13T05:03:22.855Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:22.855Z] [Client 26] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.855Z] [Client 26] Continue -I [2026-10-13T05:03:22.856Z] [Client 26] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:22.856Z] [Client 26] OK application/ipp 247 -I [2026-10-13T05:03:22.856Z] [Client 26] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.856Z] [Client 26] Continue -I [2026-10-13T05:03:22.856Z] [Client 26] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:22.856Z] [Client 26] OK application/ipp 1033 -I [2026-10-13T05:03:22.856Z] [Client 26] Closing connection from 'localhost'. -I [2026-10-13T05:03:22.857Z] [Client 24] Closing connection from 'localhost'. -I [2026-10-13T05:03:22.871Z] [Client 27] Accepted connection from 'localhost'. -I [2026-10-13T05:03:22.871Z] [Client 27] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.871Z] [Client 27] Continue -I [2026-10-13T05:03:22.872Z] [Client 27] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:22.872Z] [Client 27] OK application/ipp 1033 -I [2026-10-13T05:03:22.873Z] [Client 27] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.873Z] [Client 27] Continue -I [2026-10-13T05:03:22.873Z] [Client 28] Accepted connection from 'localhost'. -I [2026-10-13T05:03:22.873Z] [Client 27] Validate-Job successful-ok -I [2026-10-13T05:03:22.873Z] [Client 27] OK application/ipp 75 -I [2026-10-13T05:03:22.873Z] [Client 28] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.873Z] [Client 28] Continue -I [2026-10-13T05:03:22.873Z] [Client 27] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.873Z] [Client 27] Continue -I [2026-10-13T05:03:22.873Z] [Client 28] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:22.873Z] [Client 28] OK application/ipp 1033 -I [2026-10-13T05:03:22.873Z] [Client 27] Create-Job successful-ok -I [2026-10-13T05:03:22.873Z] [Client 27] OK application/ipp 237 -I [2026-10-13T05:03:22.874Z] [Client 27] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.874Z] [Client 27] Continue -I [2026-10-13T05:03:22.874Z] [Job 4] Received 153 bytes of document data. -I [2026-10-13T05:03:22.874Z] [Client 27] Send-Document successful-ok -I [2026-10-13T05:03:22.874Z] [Job 4] Starting print job. -I [2026-10-13T05:03:22.874Z] [Client 27] OK application/ipp 229 -I [2026-10-13T05:03:22.874Z] [Job 4] PNG image dimensions are 76x180x1 -I [2026-10-13T05:03:22.874Z] [Job 4] PNG image resolution is 180x180dpi -I [2026-10-13T05:03:22.874Z] [Job 4] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:03:22.874Z] [Client 27] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.874Z] [Client 27] Continue -I [2026-10-13T05:03:22.874Z] [Client 27] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:22.874Z] [Client 27] OK application/ipp 1037 -I [2026-10-13T05:03:22.875Z] [Client 27] Closing connection from 'localhost'. -I [2026-10-13T05:03:22.875Z] [Client 28] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.875Z] [Client 28] Continue -I [2026-10-13T05:03:22.875Z] [Client 29] Accepted connection from 'localhost'. -I [2026-10-13T05:03:22.875Z] [Client 28] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:22.875Z] [Client 28] OK application/ipp 233 -I [2026-10-13T05:03:22.875Z] [Client 29] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:22.875Z] [Client 29] Continue -I [2026-10-13T05:03:22.875Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:22.875Z] [Client 29] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:22.875Z] [Client 29] OK application/ipp 233 -I [2026-10-13T05:03:22.878Z] [Job 4] Completed, job-impressions-completed=1. -I [2026-10-13T05:03:23.875Z] [Client 28] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.875Z] [Client 28] Continue -I [2026-10-13T05:03:23.875Z] [Client 28] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:23.875Z] [Client 28] OK application/ipp 1033 -I [2026-10-13T05:03:23.875Z] [Client 28] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.875Z] [Client 28] Continue -I [2026-10-13T05:03:23.875Z] [Client 28] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:23.875Z] [Client 28] OK application/ipp 247 -I [2026-10-13T05:03:23.876Z] [Client 29] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.876Z] [Client 29] Continue -I [2026-10-13T05:03:23.876Z] [Client 29] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:23.876Z] [Client 29] OK application/ipp 1033 -I [2026-10-13T05:03:23.876Z] [Client 29] Closing connection from 'localhost'. -I [2026-10-13T05:03:23.876Z] [Client 30] Accepted connection from 'localhost'. -I [2026-10-13T05:03:23.876Z] [Client 30] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.876Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:23.876Z] [Client 30] Continue -I [2026-10-13T05:03:23.876Z] [Client 30] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:23.876Z] [Client 30] OK application/ipp 247 -I [2026-10-13T05:03:23.876Z] [Client 30] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.877Z] [Client 30] Continue -I [2026-10-13T05:03:23.877Z] [Client 30] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:23.877Z] [Client 30] OK application/ipp 1033 -I [2026-10-13T05:03:23.877Z] [Client 30] Closing connection from 'localhost'. -I [2026-10-13T05:03:23.878Z] [Client 28] Closing connection from 'localhost'. -I [2026-10-13T05:03:23.898Z] [Client 31] Accepted connection from 'localhost'. -I [2026-10-13T05:03:23.898Z] [Client 31] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.898Z] [Client 31] Continue -I [2026-10-13T05:03:23.898Z] [Client 31] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:23.898Z] [Client 31] OK application/ipp 1033 -I [2026-10-13T05:03:23.899Z] [Client 31] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.899Z] [Client 31] Continue -I [2026-10-13T05:03:23.899Z] [Client 32] Accepted connection from 'localhost'. -I [2026-10-13T05:03:23.899Z] [Client 31] Validate-Job successful-ok -I [2026-10-13T05:03:23.899Z] [Client 31] OK application/ipp 75 -I [2026-10-13T05:03:23.899Z] [Client 32] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.899Z] [Client 32] Continue -I [2026-10-13T05:03:23.899Z] [Client 31] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.899Z] [Client 31] Continue -I [2026-10-13T05:03:23.899Z] [Client 31] Create-Job successful-ok -I [2026-10-13T05:03:23.899Z] [Client 32] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:23.899Z] [Client 31] OK application/ipp 237 -I [2026-10-13T05:03:23.899Z] [Client 32] OK application/ipp 1033 -I [2026-10-13T05:03:23.900Z] [Client 31] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.900Z] [Client 31] Continue -I [2026-10-13T05:03:23.900Z] [Client 32] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.900Z] [Client 32] Continue -I [2026-10-13T05:03:23.900Z] [Client 32] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:23.900Z] [Client 32] OK application/ipp 242 -I [2026-10-13T05:03:23.900Z] [Job 5] Received 2001 bytes of document data. -I [2026-10-13T05:03:23.900Z] [Client 31] Send-Document successful-ok -I [2026-10-13T05:03:23.900Z] [Client 31] OK application/ipp 220 -I [2026-10-13T05:03:23.900Z] [Job 5] Starting print job. -I [2026-10-13T05:03:23.900Z] [Client 31] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.900Z] [Client 31] Continue -I [2026-10-13T05:03:23.900Z] [Job 5] JPEG image dimensions are 76x180x1 -I [2026-10-13T05:03:23.900Z] [Client 31] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:23.900Z] [Client 31] OK application/ipp 1037 -I [2026-10-13T05:03:23.900Z] [Job 5] JPEG image resolution is 180x180dpi -I [2026-10-13T05:03:23.900Z] [Job 5] Auto-orientation: portrait -I [2026-10-13T05:03:23.901Z] [Client 31] Closing connection from 'localhost'. -I [2026-10-13T05:03:23.901Z] [Client 33] Accepted connection from 'localhost'. -I [2026-10-13T05:03:23.901Z] [Client 33] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:23.901Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:23.901Z] [Client 33] Continue -I [2026-10-13T05:03:23.901Z] [Client 33] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:23.901Z] [Client 33] OK application/ipp 233 -I [2026-10-13T05:03:23.902Z] [Job 5] Completed, job-impressions-completed=1. -I [2026-10-13T05:03:24.900Z] [Client 32] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.900Z] [Client 32] Continue -I [2026-10-13T05:03:24.900Z] [Client 32] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:24.900Z] [Client 32] OK application/ipp 1033 -I [2026-10-13T05:03:24.900Z] [Client 32] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.900Z] [Client 32] Continue -I [2026-10-13T05:03:24.900Z] [Client 32] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:24.900Z] [Client 32] OK application/ipp 247 -I [2026-10-13T05:03:24.902Z] [Client 33] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.902Z] [Client 33] Continue -I [2026-10-13T05:03:24.902Z] [Client 33] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:24.902Z] [Client 33] OK application/ipp 1033 -I [2026-10-13T05:03:24.902Z] [Client 33] Closing connection from 'localhost'. -I [2026-10-13T05:03:24.902Z] [Client 34] Accepted connection from 'localhost'. -I [2026-10-13T05:03:24.902Z] [Client 34] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.902Z] [Client 34] Continue -I [2026-10-13T05:03:24.902Z] [Client 34] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:24.902Z] [Client 34] OK application/ipp 247 -I [2026-10-13T05:03:24.902Z] [Client 34] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.902Z] [Client 34] Continue -I [2026-10-13T05:03:24.902Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:24.903Z] [Client 34] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:24.903Z] [Client 34] OK application/ipp 1033 -I [2026-10-13T05:03:24.903Z] [Client 34] Closing connection from 'localhost'. -I [2026-10-13T05:03:24.904Z] [Client 32] Closing connection from 'localhost'. -I [2026-10-13T05:03:24.978Z] [Client 35] Accepted connection from 'localhost'. -I [2026-10-13T05:03:24.978Z] [Client 35] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.978Z] [Client 35] Continue -I [2026-10-13T05:03:24.978Z] [Client 35] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:24.978Z] [Client 35] OK application/ipp 1033 -I [2026-10-13T05:03:24.980Z] [Client 35] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.980Z] [Client 35] Continue -I [2026-10-13T05:03:24.980Z] [Client 36] Accepted connection from 'localhost'. -I [2026-10-13T05:03:24.980Z] [Client 35] Validate-Job successful-ok -I [2026-10-13T05:03:24.980Z] [Client 35] OK application/ipp 75 -I [2026-10-13T05:03:24.980Z] [Client 36] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.980Z] [Client 36] Continue -I [2026-10-13T05:03:24.980Z] [Client 35] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.980Z] [Client 35] Continue -I [2026-10-13T05:03:24.980Z] [Client 36] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:24.980Z] [Client 36] OK application/ipp 1033 -I [2026-10-13T05:03:24.980Z] [Client 35] Create-Job successful-ok -I [2026-10-13T05:03:24.980Z] [Client 35] OK application/ipp 237 -I [2026-10-13T05:03:24.980Z] [Client 35] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.980Z] [Client 35] Continue -I [2026-10-13T05:03:24.981Z] [Client 36] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.981Z] [Client 36] Continue -I [2026-10-13T05:03:24.981Z] [Client 36] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:24.981Z] [Client 36] OK application/ipp 243 -I [2026-10-13T05:03:24.990Z] [Client 35] Receiving job file with 'gzip' compression. -I [2026-10-13T05:03:24.990Z] [Job 6] Starting print job. -I [2026-10-13T05:03:24.990Z] [Job 6] Page 1 raster data is 85x354x8 (sGray) -I [2026-10-13T05:03:24.993Z] [Job 6] Page 2 raster data is 85x354x8 (sGray) -I [2026-10-13T05:03:24.996Z] [Job 6] Completed, job-impressions-completed=2. -I [2026-10-13T05:03:24.996Z] [Client 35] Send-Document successful-ok -I [2026-10-13T05:03:24.996Z] [Client 35] OK application/ipp 244 -I [2026-10-13T05:03:24.997Z] [Client 35] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.997Z] [Client 35] Continue -I [2026-10-13T05:03:24.997Z] [Client 35] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:24.997Z] [Client 35] OK application/ipp 1033 -I [2026-10-13T05:03:24.997Z] [Client 35] Closing connection from 'localhost'. -I [2026-10-13T05:03:24.997Z] [Client 37] Accepted connection from 'localhost'. -I [2026-10-13T05:03:24.997Z] [Client 37] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.997Z] [Client 37] Continue -I [2026-10-13T05:03:24.997Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:24.997Z] [Client 37] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:24.997Z] [Client 37] OK application/ipp 248 -I [2026-10-13T05:03:24.998Z] [Client 37] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:24.998Z] [Client 37] Continue -I [2026-10-13T05:03:24.998Z] [Client 37] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:24.998Z] [Client 37] OK application/ipp 1033 -I [2026-10-13T05:03:24.998Z] [Client 37] Closing connection from 'localhost'. -I [2026-10-13T05:03:24.999Z] [Client 36] Closing connection from 'localhost'. -I [2026-10-13T05:03:25.091Z] [Client 38] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.091Z] [Client 38] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.091Z] [Client 38] Continue -I [2026-10-13T05:03:25.091Z] [Client 38] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.091Z] [Client 38] OK application/ipp 1033 -I [2026-10-13T05:03:25.093Z] [Client 38] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.093Z] [Client 38] Continue -I [2026-10-13T05:03:25.093Z] [Client 38] Validate-Job successful-ok -I [2026-10-13T05:03:25.093Z] [Client 38] OK application/ipp 75 -I [2026-10-13T05:03:25.093Z] [Client 39] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.093Z] [Client 38] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.093Z] [Client 38] Continue -I [2026-10-13T05:03:25.093Z] [Client 38] Create-Job successful-ok -I [2026-10-13T05:03:25.093Z] [Client 38] OK application/ipp 237 -I [2026-10-13T05:03:25.093Z] [Client 39] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.093Z] [Client 39] Continue -I [2026-10-13T05:03:25.094Z] [Client 39] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.094Z] [Client 38] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.094Z] [Client 38] Continue -I [2026-10-13T05:03:25.094Z] [Client 39] OK application/ipp 1033 -I [2026-10-13T05:03:25.094Z] [Client 39] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.094Z] [Client 39] Continue -I [2026-10-13T05:03:25.094Z] [Client 39] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:25.094Z] [Client 39] OK application/ipp 243 -I [2026-10-13T05:03:25.105Z] [Client 38] Receiving job file with 'gzip' compression. -I [2026-10-13T05:03:25.105Z] [Job 7] Starting print job. -I [2026-10-13T05:03:25.105Z] [Job 7] Page 1 raster data is 85x354x8 (sGray) -I [2026-10-13T05:03:25.108Z] [Job 7] Page 2 raster data is 85x354x8 (sGray) -I [2026-10-13T05:03:25.110Z] [Job 7] Completed, job-impressions-completed=2. -I [2026-10-13T05:03:25.110Z] [Client 38] Send-Document successful-ok -I [2026-10-13T05:03:25.110Z] [Client 38] OK application/ipp 244 -I [2026-10-13T05:03:25.110Z] [Client 38] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.110Z] [Client 38] Continue -I [2026-10-13T05:03:25.110Z] [Client 38] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.110Z] [Client 38] OK application/ipp 1033 -I [2026-10-13T05:03:25.111Z] [Client 38] Closing connection from 'localhost'. -I [2026-10-13T05:03:25.111Z] [Client 40] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.111Z] [Client 40] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.111Z] [Client 40] Continue -I [2026-10-13T05:03:25.111Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:25.111Z] [Client 40] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:25.111Z] [Client 40] OK application/ipp 248 -I [2026-10-13T05:03:25.111Z] [Client 40] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.111Z] [Client 40] Continue -I [2026-10-13T05:03:25.111Z] [Client 40] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.111Z] [Client 40] OK application/ipp 1033 -I [2026-10-13T05:03:25.112Z] [Client 40] Closing connection from 'localhost'. -I [2026-10-13T05:03:25.113Z] [Client 39] Closing connection from 'localhost'. -I [2026-10-13T05:03:25.181Z] [Client 41] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.182Z] [Client 41] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.182Z] [Client 41] Continue -I [2026-10-13T05:03:25.182Z] [Client 41] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.182Z] [Client 41] OK application/ipp 1033 -I [2026-10-13T05:03:25.183Z] [Client 41] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.183Z] [Client 41] Continue -I [2026-10-13T05:03:25.183Z] [Client 41] Validate-Job successful-ok -I [2026-10-13T05:03:25.183Z] [Client 41] OK application/ipp 75 -I [2026-10-13T05:03:25.183Z] [Client 42] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.183Z] [Client 42] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.183Z] [Client 41] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.183Z] [Client 41] Continue -I [2026-10-13T05:03:25.183Z] [Client 42] Continue -I [2026-10-13T05:03:25.183Z] [Client 41] Create-Job successful-ok -I [2026-10-13T05:03:25.183Z] [Client 41] OK application/ipp 237 -I [2026-10-13T05:03:25.183Z] [Client 42] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.183Z] [Client 42] OK application/ipp 1033 -I [2026-10-13T05:03:25.183Z] [Client 41] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.184Z] [Client 41] Continue -I [2026-10-13T05:03:25.184Z] [Client 42] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.184Z] [Client 42] Continue -I [2026-10-13T05:03:25.184Z] [Client 42] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:25.184Z] [Client 42] OK application/ipp 243 -I [2026-10-13T05:03:25.196Z] [Client 41] Receiving job file with 'gzip' compression. -I [2026-10-13T05:03:25.196Z] [Job 8] Starting print job. -I [2026-10-13T05:03:25.196Z] [Job 8] Page 1 raster data is 85x354x8 (sGray) -I [2026-10-13T05:03:25.199Z] [Job 8] Page 2 raster data is 85x354x8 (sGray) -I [2026-10-13T05:03:25.202Z] [Job 8] Page 3 raster data is 85x354x8 (sGray) -I [2026-10-13T05:03:25.205Z] [Job 8] Page 4 raster data is 85x354x8 (sGray) -I [2026-10-13T05:03:25.208Z] [Job 8] Completed, job-impressions-completed=4. -I [2026-10-13T05:03:25.208Z] [Client 41] Send-Document successful-ok -I [2026-10-13T05:03:25.208Z] [Client 41] OK application/ipp 244 -I [2026-10-13T05:03:25.208Z] [Client 41] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.208Z] [Client 41] Continue -I [2026-10-13T05:03:25.208Z] [Client 41] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.208Z] [Client 41] OK application/ipp 1033 -I [2026-10-13T05:03:25.208Z] [Client 41] Closing connection from 'localhost'. -I [2026-10-13T05:03:25.208Z] [Client 43] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.208Z] [Client 43] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.208Z] [Client 43] Continue -I [2026-10-13T05:03:25.208Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:25.209Z] [Client 43] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:25.209Z] [Client 43] OK application/ipp 248 -I [2026-10-13T05:03:25.209Z] [Client 43] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.209Z] [Client 43] Continue -I [2026-10-13T05:03:25.209Z] [Client 43] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.209Z] [Client 43] OK application/ipp 1033 -I [2026-10-13T05:03:25.209Z] [Client 43] Closing connection from 'localhost'. -I [2026-10-13T05:03:25.210Z] [Client 42] Closing connection from 'localhost'. -I [2026-10-13T05:03:25.225Z] [Client 44] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.225Z] [Client 44] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.225Z] [Client 44] Continue -I [2026-10-13T05:03:25.225Z] [Client 44] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.225Z] [Client 44] OK application/ipp 1033 -I [2026-10-13T05:03:25.226Z] [Client 44] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.226Z] [Client 44] Continue -I [2026-10-13T05:03:25.226Z] [Client 44] Validate-Job successful-ok -I [2026-10-13T05:03:25.226Z] [Client 44] OK application/ipp 75 -I [2026-10-13T05:03:25.226Z] [Client 45] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.226Z] [Client 45] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.226Z] [Client 45] Continue -I [2026-10-13T05:03:25.226Z] [Client 44] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.226Z] [Client 44] Continue -I [2026-10-13T05:03:25.226Z] [Client 44] Create-Job successful-ok -I [2026-10-13T05:03:25.226Z] [Client 44] OK application/ipp 237 -I [2026-10-13T05:03:25.226Z] [Client 45] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.226Z] [Client 45] OK application/ipp 1033 -I [2026-10-13T05:03:25.227Z] [Client 44] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.227Z] [Client 44] Continue -I [2026-10-13T05:03:25.227Z] [Client 45] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.227Z] [Client 45] Continue -I [2026-10-13T05:03:25.227Z] [Client 45] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:25.227Z] [Client 45] OK application/ipp 243 -I [2026-10-13T05:03:25.227Z] [Job 9] Received 136 bytes of document data. -I [2026-10-13T05:03:25.227Z] [Client 44] Send-Document successful-ok -I [2026-10-13T05:03:25.227Z] [Client 44] OK application/ipp 220 -I [2026-10-13T05:03:25.227Z] [Job 9] Starting print job. -I [2026-10-13T05:03:25.227Z] [Job 9] PNG image dimensions are 42x180x1 -I [2026-10-13T05:03:25.227Z] [Job 9] PNG image resolution is 180x180dpi -I [2026-10-13T05:03:25.227Z] [Client 44] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.227Z] [Client 44] Continue -I [2026-10-13T05:03:25.227Z] [Job 9] portrait image, 180 px along the tape at 180 dpi -> media length 3986 (1/100 mm), header.cupsHeight=282 PWG_ImageBox=[21 0 62 281] -I [2026-10-13T05:03:25.227Z] [Client 44] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:25.227Z] [Client 44] OK application/ipp 1037 -I [2026-10-13T05:03:25.228Z] [Client 44] Closing connection from 'localhost'. -I [2026-10-13T05:03:25.228Z] [Client 46] Accepted connection from 'localhost'. -I [2026-10-13T05:03:25.228Z] [Client 46] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:25.228Z] [Client 46] Continue -I [2026-10-13T05:03:25.228Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:25.228Z] [Client 46] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:25.228Z] [Client 46] OK application/ipp 234 -I [2026-10-13T05:03:25.230Z] [Job 9] Completed, job-impressions-completed=1. -I [2026-10-13T05:03:26.227Z] [Client 45] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.227Z] [Client 45] Continue -I [2026-10-13T05:03:26.227Z] [Client 45] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:26.227Z] [Client 45] OK application/ipp 1033 -I [2026-10-13T05:03:26.228Z] [Client 45] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.228Z] [Client 45] Continue -I [2026-10-13T05:03:26.228Z] [Client 45] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:26.228Z] [Client 45] OK application/ipp 248 -I [2026-10-13T05:03:26.228Z] [Client 46] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.228Z] [Client 46] Continue -I [2026-10-13T05:03:26.228Z] [Client 46] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:26.228Z] [Client 46] OK application/ipp 1033 -I [2026-10-13T05:03:26.228Z] [Client 46] Closing connection from 'localhost'. -I [2026-10-13T05:03:26.229Z] [Client 47] Accepted connection from 'localhost'. -I [2026-10-13T05:03:26.229Z] [Client 47] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.229Z] [Client 47] Continue -I [2026-10-13T05:03:26.229Z] [Client 47] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:26.229Z] [Client 47] OK application/ipp 248 -I [2026-10-13T05:03:26.229Z] [Client 47] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.229Z] [Client 47] Continue -I [2026-10-13T05:03:26.229Z] [Client 47] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:26.229Z] [Client 47] OK application/ipp 1033 -I [2026-10-13T05:03:26.229Z] [Client 47] Closing connection from 'localhost'. -I [2026-10-13T05:03:26.230Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:26.231Z] [Client 45] Closing connection from 'localhost'. -I [2026-10-13T05:03:26.263Z] [Client 48] Accepted connection from 'localhost'. -I [2026-10-13T05:03:26.263Z] [Client 48] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.263Z] [Client 48] Continue -I [2026-10-13T05:03:26.263Z] [Client 48] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:26.263Z] [Client 48] OK application/ipp 1033 -I [2026-10-13T05:03:26.264Z] [Client 48] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.264Z] [Client 48] Continue -I [2026-10-13T05:03:26.264Z] [Client 49] Accepted connection from 'localhost'. -I [2026-10-13T05:03:26.264Z] [Client 48] Validate-Job successful-ok -I [2026-10-13T05:03:26.264Z] [Client 48] OK application/ipp 75 -I [2026-10-13T05:03:26.264Z] [Client 49] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.264Z] [Client 49] Continue -I [2026-10-13T05:03:26.265Z] [Client 48] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.265Z] [Client 48] Continue -I [2026-10-13T05:03:26.265Z] [Client 49] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:26.265Z] [Client 49] OK application/ipp 1033 -I [2026-10-13T05:03:26.265Z] [Client 48] Create-Job successful-ok -I [2026-10-13T05:03:26.265Z] [Client 48] OK application/ipp 238 -I [2026-10-13T05:03:26.265Z] [Client 48] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.265Z] [Client 48] Continue -I [2026-10-13T05:03:26.265Z] [Job 10] Received 153 bytes of document data. -I [2026-10-13T05:03:26.265Z] [Client 48] Send-Document successful-ok -I [2026-10-13T05:03:26.265Z] [Client 48] OK application/ipp 221 -I [2026-10-13T05:03:26.265Z] [Job 10] Starting print job. -I [2026-10-13T05:03:26.265Z] [Job 10] PNG image dimensions are 76x180x1 -I [2026-10-13T05:03:26.265Z] [Job 10] PNG image resolution is 180x180dpi -I [2026-10-13T05:03:26.265Z] [Client 48] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.265Z] [Client 48] Continue -I [2026-10-13T05:03:26.265Z] [Job 10] portrait image, 180 px along the tape at 180 dpi -> media length 3986 (1/100 mm), header.cupsHeight=282 PWG_ImageBox=[21 0 62 281] -I [2026-10-13T05:03:26.265Z] [Client 48] Get-Printer-Attributes successful-ok -E [2026-10-13T05:03:26.265Z] [Job 10] PNG content is 76 dots across tape; printable width is 42 -I [2026-10-13T05:03:26.265Z] [Job 10] Aborted, job-impressions-completed=0. -I [2026-10-13T05:03:26.265Z] [Client 48] OK application/ipp 1037 -I [2026-10-13T05:03:26.266Z] [Client 49] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.266Z] [Client 49] Continue -I [2026-10-13T05:03:26.266Z] [Client 48] Closing connection from 'localhost'. -I [2026-10-13T05:03:26.266Z] [Client 49] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:26.266Z] [Client 49] OK application/ipp 247 -I [2026-10-13T05:03:26.266Z] [Client 50] Accepted connection from 'localhost'. -I [2026-10-13T05:03:26.266Z] [Client 50] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.266Z] [Client 50] Continue -I [2026-10-13T05:03:26.266Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:26.266Z] [Client 50] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:26.266Z] [Client 50] OK application/ipp 247 -I [2026-10-13T05:03:26.266Z] [Client 50] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.266Z] [Client 50] Continue -I [2026-10-13T05:03:26.266Z] [Client 50] Get-Printer-Attributes successful-ok -I [2026-10-13T05:03:26.266Z] [Client 50] OK application/ipp 1033 -I [2026-10-13T05:03:26.267Z] [Client 50] Closing connection from 'localhost'. -I [2026-10-13T05:03:26.268Z] [Client 49] Closing connection from 'localhost'. -I [2026-10-13T05:03:26.272Z] [Client 51] Accepted connection from 'localhost'. -I [2026-10-13T05:03:26.272Z] [Client 51] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.272Z] [Client 51] Continue -I [2026-10-13T05:03:26.273Z] [Job 11] Received 153 bytes of document data. -I [2026-10-13T05:03:26.273Z] [Client 51] Print-Job successful-ok -I [2026-10-13T05:03:26.273Z] [Client 51] OK application/ipp 218 -I [2026-10-13T05:03:26.273Z] [Job 11] Starting print job. -I [2026-10-13T05:03:26.273Z] [Job 11] PNG image dimensions are 76x180x1 -I [2026-10-13T05:03:26.273Z] [Job 11] PNG image resolution is 180x180dpi -I [2026-10-13T05:03:26.273Z] [Job 11] portrait image, 180 px along the tape at 180 dpi -> media length 4000 (1/100 mm), header.cupsHeight=283 PWG_ImageBox=[4 0 79 282] -I [2026-10-13T05:03:26.273Z] [Client 51] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:26.273Z] [Client 51] Continue -I [2026-10-13T05:03:26.273Z] [Client 51] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:26.273Z] [Client 51] OK application/ipp 878 -I [2026-10-13T05:03:26.275Z] [Job 11] Completed, job-impressions-completed=1. -I [2026-10-13T05:03:31.275Z] [Client 51] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:31.275Z] [Client 51] Continue -I [2026-10-13T05:03:31.275Z] [Client 51] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:31.275Z] [Client 51] OK application/ipp 908 -I [2026-10-13T05:03:31.277Z] [Client 51] Closing connection from 'localhost'. -I [2026-10-13T05:03:31.283Z] [Client 52] Accepted connection from 'localhost'. -I [2026-10-13T05:03:31.283Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:31.284Z] [Client 52] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:31.284Z] [Client 52] Continue -I [2026-10-13T05:03:31.284Z] [Job 12] Received 153 bytes of document data. -I [2026-10-13T05:03:31.284Z] [Client 52] Print-Job successful-ok -I [2026-10-13T05:03:31.284Z] [Client 52] OK application/ipp 218 -I [2026-10-13T05:03:31.284Z] [Job 12] Starting print job. -I [2026-10-13T05:03:31.284Z] [Job 12] PNG image dimensions are 76x180x1 -I [2026-10-13T05:03:31.284Z] [Job 12] PNG image resolution is 180x180dpi -I [2026-10-13T05:03:31.284Z] [Job 12] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:03:31.284Z] [Client 52] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:31.284Z] [Client 52] Continue -I [2026-10-13T05:03:31.284Z] [Client 52] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:31.284Z] [Client 52] OK application/ipp 828 -I [2026-10-13T05:03:31.286Z] [Job 12] Completed, job-impressions-completed=1. -I [2026-10-13T05:03:36.286Z] [Client 52] HTTP_STATE_POST http://localhost:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:03:36.286Z] [Client 52] Continue -I [2026-10-13T05:03:36.286Z] [Client 52] Get-Job-Attributes successful-ok -I [2026-10-13T05:03:36.286Z] [Client 52] OK application/ipp 858 -I [2026-10-13T05:03:36.287Z] [Client 52] Closing connection from 'localhost'. -I [2026-10-13T05:03:36.320Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:03:36.320Z] Shutting down system. - - diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-before-driver.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-before-driver.txt deleted file mode 100644 index e848834..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-before-driver.txt +++ /dev/null @@ -1,13 +0,0 @@ -Internal ctest changing into directory: /results/build -Test project /results/build - Start 1: driver_finishings -1/1 Test #1: driver_finishings ................Subprocess aborted***Exception: 1.32 sec -test_driver: /src/tests/test_driver.c:62: dev_write: Assertion `papplPrinterGetReasons(poll_during_job) == before && usb_reads == reads' failed. - - -0% tests passed, 1 tests failed out of 1 - -Total Test time (real) = 1.32 sec - -The following tests FAILED: - 1 - driver_finishings (Subprocess aborted) diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-before.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-before.txt deleted file mode 100644 index 38cfe49..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-before.txt +++ /dev/null @@ -1,19 +0,0 @@ -Internal ctest changing into directory: /results/build -Test project /results/build - Start 1: driver_finishings - Start 4: png_geometry -1/2 Test #4: png_geometry .....................Subprocess aborted***Exception: 0.22 sec -PNG media7: got 180 raster rows, expected 354 -test_png_geometry: /src/tests/test_png_geometry.c:190: run_image: Assertion `actual_rows == expected_rows' failed. - -2/2 Test #1: driver_finishings ................Subprocess aborted***Exception: 11.21 sec -test_driver: /src/tests/test_driver.c:781: main: Assertion `busy_poll_checked && papplJobGetState(busy_job) == IPP_JSTATE_COMPLETED' failed. - - -0% tests passed, 2 tests failed out of 2 - -Total Test time (real) = 11.21 sec - -The following tests FAILED: - 1 - driver_finishings (Subprocess aborted) - 4 - png_geometry (Subprocess aborted) diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-final.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-final.txt deleted file mode 100644 index 216b0a8..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-final.txt +++ /dev/null @@ -1,10 +0,0 @@ -Internal ctest changing into directory: /results/final -Test project /results/final - Start 1: driver_finishings - Start 4: png_geometry -1/2 Test #1: driver_finishings ................ Passed 29.50 sec -2/2 Test #4: png_geometry ..................... Passed 29.50 sec - -100% tests passed, 0 tests failed out of 2 - -Total Test time (real) = 29.51 sec diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-report.md b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-report.md deleted file mode 100644 index 647446e..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/driver-png-report.md +++ /dev/null @@ -1,28 +0,0 @@ -Scoped review fixes, 2026-10-13 - -Changed production paths: src/driver.c and src/filter_png.c. -Changed regression paths: tests/test_driver.c and tests/test_png_geometry.c. -No printing, remote access, deployment, or dependency changes. - -Reproductions: -- before.log: collection media-size-name=om_12x50mm_12x50mm produced180 rows instead of354. -- before-driver.log: real scheduled USB-fixture PNG job polled status while processing; polling changed printer reasons. The run is intentionally UNCERTAIN during partial output, so the old recovery check published OTHER before reaching device acquisition. - -Fixes: -- PNG explicit-length detection recognizes resolved media-col.media-size-name, matching PAPPL's name precedence. -- Status callback skips idle polling/recovery checks during processing and rechecks processing when OpenDevice returns NULL after an idle-to-active scheduling race. Idle present-but-unclaimable USB regression still requires OFFLINE/unconfirmed. -- Bounded custom-width support advertises only canonical±1 centimm in five existing variable-length size ranges. Named preset sizes remain exact. PNG tape lookup rounds millimeters; noncanonical raster width is permitted only when matching the explicitly selected ±1 dimensions and retaining the physical printable window. Explicit margins remain unchanged. The page span uses the actual header width, and PNG rejection reports the selected printable limit (42dots for the1199centimm/297margin case). - -Evidence: -- Actual CUPS headers:1198/1199 centimm ->84dots,1200/1201/1202 ->85dots; all11bytes/row. -- Named50mm collection produces354rows; named25mm too short and named18mm wrong tape abort with no raster/finishing commands. -- Custom1199/1201 x3986centimm with explicit297 margins and42dot PNG produces282rows.76dot PNG rejects with no raster/finishing commands. -- Validate-Job with fidelity=true: canonical±1accepted,±2unsupported, for6/9/12/18/24mm. -- Active-job poll preserves media confirmation and reasons and emits no status reads; job completes. Existing idle USB claim-failure, unsupported width, malformed raster, canceled/faulted run,65/999copy and PNG geometry cases remain covered. - -Verification command inside ptouch-named-media-build:20261013 isolated with network none and repository read-only: -cmake -S /src -B /results/final -DCMAKE_BUILD_TYPE=Release -cmake --build /results/final --target test_driver test_png_geometry -j4 -ctest --test-dir /results/final -R 'driver_finishings|png_geometry' --output-on-failure -j2 - -Result:2/2passed; driver_finishings29.50s,png_geometry29.50s,total29.51s. build-final.log contains no compiler warnings. final.log is the authoritative final output. diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-deploy.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-deploy.txt deleted file mode 100644 index 1eaffb2..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-deploy.txt +++ /dev/null @@ -1,387 +0,0 @@ -#0 building with "default" instance using docker driver - -#1 [internal] load build definition from Dockerfile.deploy -#1 transferring dockerfile: 2.76kB done -#1 DONE 0.0s - -#2 resolve image config for docker-image://docker.io/docker/dockerfile:1 -#2 DONE 0.4s - -#3 docker-image://docker.io/docker/dockerfile:1@sha256:4edf897a3ffa55b89f906fc8cc78afdb3f1834cc9c7083565e611a8a7d5fe99e -#3 resolve docker.io/docker/dockerfile:1@sha256:4edf897a3ffa55b89f906fc8cc78afdb3f1834cc9c7083565e611a8a7d5fe99e 0.1s done -#3 CACHED - -#4 [internal] load metadata for docker.io/library/debian:bookworm -#4 ... - -#5 [internal] load metadata for docker.io/library/debian:bookworm-slim -#5 DONE 0.3s - -#4 [internal] load metadata for docker.io/library/debian:bookworm -#4 DONE 0.3s - -#6 [internal] load .dockerignore -#6 transferring context: 79B done -#6 DONE 0.0s - -#7 [runtime 1/13] FROM docker.io/library/debian:bookworm-slim@sha256:7c7b2c966bc9ee8cedfeef67e0e279108992c77681fa595db4a9d65c06ccc587 -#7 resolve docker.io/library/debian:bookworm-slim@sha256:7c7b2c966bc9ee8cedfeef67e0e279108992c77681fa595db4a9d65c06ccc587 0.0s done -#7 DONE 0.0s - -#8 [build 1/11] FROM docker.io/library/debian:bookworm@sha256:2c037a04925515fdd6ea85ea14a682d0e79931f5e9f5d07b6dbfc6ba12f9e858 -#8 resolve docker.io/library/debian:bookworm@sha256:2c037a04925515fdd6ea85ea14a682d0e79931f5e9f5d07b6dbfc6ba12f9e858 0.0s done -#8 DONE 0.0s - -#9 [internal] load build context -#9 transferring context: 745.56kB 0.0s done -#9 DONE 0.0s - -#10 [build 2/11] RUN apt-get update && apt-get install -y --no-install-recommends build-essential cmake pkg-config git ca-certificates python3 libusb-1.0-0-dev libpng-dev libjpeg-dev zlib1g-dev libcups2-dev libcupsimage2-dev libssl-dev libavahi-client-dev libgnutls28-dev libkrb5-dev && rm -rf /var/lib/apt/lists/* -#10 CACHED - -#11 [build 3/11] COPY patches/cups-2.4.2-deb12u9-raster.patch /tmp/cups-raster.patch -#11 CACHED - -#12 [build 4/11] COPY scripts/build-cups.sh /tmp/build-cups.sh -#12 CACHED - -#13 [build 5/11] RUN /tmp/build-cups.sh /tmp/cups-raster.patch -#13 CACHED - -#14 [build 6/11] COPY patches/pappl-1.4.11-raster.patch /tmp/pappl-raster.patch -#14 DONE 0.1s - -#15 [build 7/11] COPY patches/pappl-1.4.11-finishings.patch /tmp/pappl-finishings.patch -#15 DONE 0.1s - -#16 [build 8/11] RUN git clone --depth 1 --branch v1.4.11 https://github.com/michaelrsweet/pappl /tmp/pappl && cd /tmp/pappl && patch --batch --forward --fuzz=0 -p1 < /tmp/pappl-raster.patch && patch --batch --forward --fuzz=0 -p1 < /tmp/pappl-finishings.patch && ./configure && make && make install && ldconfig && rm -rf /tmp/pappl -#16 0.200 Cloning into '/tmp/pappl'... -#16 1.321 Note: switching to 'ad86a0a8473f0f83233a374226561181570d4f81'. -#16 1.321 -#16 1.321 You are in 'detached HEAD' state. You can look around, make experimental -#16 1.321 changes and commit them, and you can discard any commits you make in this -#16 1.321 state without impacting any branches by switching back to a branch. -#16 1.321 -#16 1.321 If you want to create a new branch to retain commits you create, you may -#16 1.321 do so (now or later) by using -c with the switch command. Example: -#16 1.321 -#16 1.321 git switch -c -#16 1.321 -#16 1.321 Or undo this operation with: -#16 1.321 -#16 1.321 git switch - -#16 1.321 -#16 1.321 Turn off this advice by setting config variable advice.detachedHead to false -#16 1.321 -#16 1.356 patching file pappl/job-process.c -#16 1.356 patching file pappl/job-filter.c -#16 1.358 patching file pappl/printer-driver.c -#16 1.358 patching file pappl/printer-ipp.c -#16 1.359 patching file pappl/job-process.c -#16 1.359 patching file pappl/finishings-private.h -#16 1.359 patching file pappl/system-loadsave.c -#16 1.359 patching file pappl/printer-webif.c -#16 1.456 checking build system type... x86_64-pc-linux-gnu -#16 1.542 checking host system type... x86_64-pc-linux-gnu -#16 1.546 checking for gcc... gcc -#16 1.575 checking whether the C compiler works... yes -#16 1.620 checking for C compiler default output file name... a.out -#16 1.621 checking for suffix of executables... -#16 1.656 checking whether we are cross compiling... no -#16 1.700 checking for suffix of object files... o -#16 1.722 checking whether the compiler supports GNU C... yes -#16 1.741 checking whether gcc accepts -g... yes -#16 1.761 checking for gcc option to enable C11 features... none needed -#16 1.791 checking for ranlib... ranlib -#16 1.792 checking for ar... /usr/bin/ar -#16 1.792 checking for codesign... no -#16 1.792 checking for true... /usr/bin/true -#16 1.793 checking for mkdir... /usr/bin/mkdir -#16 1.793 checking for rm... /usr/bin/rm -#16 1.793 checking for rmdir... /usr/bin/rmdir -#16 1.793 checking for ln... /usr/bin/ln -#16 1.794 checking for install-sh script... using /tmp/pappl/install-sh -#16 1.795 checking for pkg-config... /usr/bin/pkg-config -#16 1.795 checking for cups-config... /usr/bin/cups-config -#16 1.795 checking for CUPS library v2.2 or higher... yes, v2.4 -#16 2.148 checking for strlcpy... no -#16 2.204 checking for stdio.h... yes -#16 2.223 checking for stdlib.h... yes -#16 2.260 checking for string.h... yes -#16 2.284 checking for inttypes.h... yes -#16 2.309 checking for stdint.h... yes -#16 2.335 checking for strings.h... yes -#16 2.360 checking for sys/stat.h... yes -#16 2.387 checking for sys/types.h... yes -#16 2.413 checking for unistd.h... yes -#16 2.447 checking for pthread.h... yes -#16 2.482 checking for pthread_create using -lpthreads... no -#16 2.525 checking for pthread_create using -lpthread... yes -#16 2.571 checking for Avahi... yes -#16 2.577 checking for OpenSSL/LibreSSL package... yes -#16 2.584 checking for sys/random.h... yes -#16 2.623 checking for arc4random... yes -#16 2.679 checking for getrandom... yes -#16 2.726 checking for gnutls_rnd... no -#16 2.777 checking for sys/mount.h... yes -#16 2.817 checking for sys/statfs.h... yes -#16 2.847 checking for sys/statvfs.h... yes -#16 2.878 checking for sys/vfs.h... yes -#16 2.908 checking for statfs... yes -#16 2.957 checking for statvfs... yes -#16 3.006 checking for libjpeg via pkg-config... yes -#16 3.013 checking for libpng-1.6.x... yes -#16 3.020 checking for libusb-1.0... yes -#16 3.026 checking for dlopen in -ldl... yes -#16 3.079 checking for pam_start in -lpam... no -#16 3.121 checking for security/pam_appl.h... no -#16 3.154 checking for pam/pam_appl.h... no -#16 3.185 checking whether compiler supports -Wno-char-subscripts... yes -#16 3.206 checking whether compiler supports -Wno-format-truncation... yes -#16 3.226 checking whether compiler supports -Wno-format-y2k... yes -#16 3.250 checking whether compiler supports -Wno-switch... yes -#16 3.270 checking whether compiler supports -Wno-unused-result... yes -#16 3.290 checking whether compiler supports -fPIE... yes -#16 3.312 checking for OS-specific compiler options... -D__USE_MISC -D_GNU_SOURCE -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 -Wl,-z,relro,-z,now -#16 3.328 configure: creating ./config.status -#16 3.417 config.status: creating Makedefs -#16 3.428 config.status: creating pappl/pappl.pc -#16 3.447 config.status: creating config.h -#16 3.476 Using CC=gcc -#16 3.477 Using CFLAGS=-fPIC -I.. -D_THREAD_SAFE -D_REENTRANT -D_REENTRANT -I/usr/include/libpng16 -I/usr/include/libusb-1.0 -D_FORTIFY_SOURCE=2 -D__USE_MISC -D_GNU_SOURCE -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 -g -Os -Wall -Wunused -Wno-char-subscripts -Wno-format-truncation -Wno-format-y2k -Wno-switch -Wno-unused-result -#16 3.478 Using DSOFLAGS=-fPIC -I.. -D_THREAD_SAFE -D_REENTRANT -D_REENTRANT -I/usr/include/libpng16 -I/usr/include/libusb-1.0 -D_FORTIFY_SOURCE=2 -D__USE_MISC -D_GNU_SOURCE -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 -g -Os -Wall -Wunused -Wno-char-subscripts -Wno-format-truncation -Wno-format-y2k -Wno-switch -Wno-unused-result -#16 3.479 Using LDFLAGS=-fPIE -pie -Wl,-z,relro,-z,now -g -Os -#16 3.480 Using LIBS=-ldl -lpthread -lcups -lavahi-common -lavahi-client -lssl -lcrypto -ljpeg -lpng16 -lz -lusb-1.0 -#16 3.480 Making all in doc... -#16 3.482 Making all in man... -#16 3.485 Making all in pappl... -#16 3.487 make[1]: Entering directory '/tmp/pappl/pappl' -#16 3.488 Compiling client.c... -#16 3.737 Compiling client-accessors.c... -#16 3.851 Compiling client-auth.c... -#16 3.948 Compiling client-loc.c... -#16 4.047 Compiling client-ipp.c... -#16 4.187 Compiling client-webif.c... -#16 4.506 Compiling contact.c... -#16 4.589 Compiling device.c... -#16 4.779 Compiling device-file.c... -#16 4.907 Compiling device-network.c... -#16 5.260 Compiling device-usb.c... -#16 5.454 Compiling dnssd.c... -#16 5.676 Compiling httpmon.c... -#16 5.824 Compiling job-accessors.c... -#16 5.995 Compiling job-filter.c... -#16 6.240 Compiling job-ipp.c... -#16 6.434 Compiling job-process.c... -#16 6.726 Compiling job.c... -#16 6.977 Compiling link.c... -#16 7.074 Compiling loc.c... -#16 7.274 Compiling log.c... -#16 7.471 Compiling lookup.c... -#16 7.548 Compiling mainloop.c... -#16 7.696 Compiling mainloop-subcommands.c... -#16 8.063 Compiling mainloop-support.c... -#16 8.274 Compiling printer.c... -#16 8.474 Compiling printer-accessors.c... -#16 8.707 Compiling printer-driver.c... -#16 9.203 Compiling printer-ipp.c... -#16 9.804 Compiling printer-raw.c... -#16 9.929 Compiling printer-support.c... -#16 10.07 Compiling printer-usb.c... -#16 10.38 Compiling printer-webif.c... -#16 10.85 Compiling resource.c... -#16 10.99 Compiling snmp.c... -#16 11.21 Compiling subscription.c... -#16 11.33 Compiling subscription-ipp.c... -#16 11.50 Compiling system.c... -#16 11.81 Compiling system-accessors.c... -#16 12.22 Compiling system-ipp.c... -#16 12.49 Compiling system-loadsave.c... -#16 12.83 Compiling system-loc.c... -#16 12.91 Compiling system-printer.c... -#16 13.02 Compiling system-subscription.c... -#16 13.15 Compiling system-webif.c... -#16 13.78 Compiling util.c... -#16 13.89 Linking libpappl.so.1... -#16 13.98 Archiving libpappl.a... -#16 14.04 make[1]: Leaving directory '/tmp/pappl/pappl' -#16 14.04 Making all in testsuite... -#16 14.04 make[1]: Entering directory '/tmp/pappl/testsuite' -#16 14.04 Compiling testhttpmon.c... -#16 14.14 Linking testhttpmon... -#16 14.17 Compiling testmainloop.c... -#16 14.25 Compiling pwg-driver.c... -#16 14.47 Linking testmainloop... -#16 14.60 Compiling testpappl.c... -#16 15.39 Linking testpappl... -#16 15.51 make[1]: Leaving directory '/tmp/pappl/testsuite' -#16 15.52 Installing in doc... -#16 15.52 make[1]: Entering directory '/tmp/pappl/doc' -#16 15.52 Installing documentation in //usr/local/share/doc/pappl... -#16 15.56 make[1]: Leaving directory '/tmp/pappl/doc' -#16 15.56 Installing in man... -#16 15.56 make[1]: Entering directory '/tmp/pappl/man' -#16 15.56 Installing man pages in //usr/local/share/man/man1... -#16 15.58 Installing man pages in //usr/local/share/man/man3... -#16 15.66 make[1]: Leaving directory '/tmp/pappl/man' -#16 15.66 Installing in pappl... -#16 15.67 make[1]: Entering directory '/tmp/pappl/pappl' -#16 15.67 Installing pappl-makeresheader in /usr/local/bin... -#16 15.68 Installing libpappl in /usr/local/lib... -#16 15.71 Installing pkg-config files in /usr/local/lib/pkgconfig... -#16 15.72 Installing data files in /usr/local/share/pappl... -#16 15.76 Installing header files in /usr/local/include/pappl... -#16 15.86 make[1]: Leaving directory '/tmp/pappl/pappl' -#16 15.86 Installing in testsuite... -#16 DONE 16.1s - -#17 [build 9/11] WORKDIR /src -#17 DONE 0.1s - -#18 [build 10/11] COPY . . -#18 DONE 0.0s - -#19 [build 11/11] RUN cmake -S . -B build-app -DPTOUCH_CORE_ONLY=OFF && cmake --build build-app && ctest --test-dir build-app --output-on-failure && install -Dm755 build-app/ptouch-app /out/usr/local/bin/ptouch-app -#19 0.252 -- The C compiler identification is GNU 12.2.0 -#19 0.266 -- Detecting C compiler ABI info -#19 0.347 -- Detecting C compiler ABI info - done -#19 0.355 -- Check for working C compiler: /usr/bin/cc - skipped -#19 0.356 -- Detecting C compile features -#19 0.357 -- Detecting C compile features - done -#19 0.455 -- Found Python3: /usr/bin/python3 (found version "3.11.2") found components: Interpreter -#19 0.461 -- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.1") -#19 0.461 -- Checking for module 'pappl' -#19 0.474 -- Found pappl, version 1.4.11 -#19 0.509 -- Checking for module 'libusb-1.0' -#19 0.521 -- Found libusb-1.0, version 1.0.26 -#19 0.553 -- Checking for module 'libpng' -#19 0.565 -- Found libpng, version 1.6.39 -#19 0.598 -- Configuring done -#19 0.619 -- Generating done -#19 0.622 -- Build files have been written to: /src/build-app -#19 0.681 [ 2%] Building C object CMakeFiles/ptcore.dir/src/tables.c.o -#19 0.716 [ 5%] Building C object CMakeFiles/ptcore.dir/src/protocol.c.o -#19 0.752 [ 8%] Building C object CMakeFiles/ptcore.dir/src/raster.c.o -#19 0.785 [ 10%] Building C object CMakeFiles/ptcore.dir/src/status.c.o -#19 0.816 [ 13%] Building C object CMakeFiles/ptcore.dir/src/cutter.c.o -#19 0.844 [ 16%] Linking C static library libptcore.a -#19 0.885 [ 16%] Built target ptcore -#19 0.909 [ 18%] Building C object CMakeFiles/test_driver.dir/tests/test_driver.c.o -#19 1.164 [ 21%] Building C object CMakeFiles/test_driver.dir/src/filter_png.c.o -#19 1.248 [ 24%] Linking C executable test_driver -#19 1.333 [ 24%] Built target test_driver -#19 1.357 [ 27%] Building C object CMakeFiles/test_pappl_raster.dir/tests/test_pappl_raster.c.o -#19 1.455 [ 29%] Linking C executable test_pappl_raster -#19 1.539 [ 29%] Built target test_pappl_raster -#19 1.562 [ 32%] Building C object CMakeFiles/test_pappl_finishings.dir/tests/test_pappl_finishings.c.o -#19 1.650 [ 35%] Linking C executable test_pappl_finishings -#19 1.733 [ 35%] Built target test_pappl_finishings -#19 1.758 [ 37%] Building C object CMakeFiles/test_png_geometry.dir/tests/test_png_geometry.c.o -#19 1.864 [ 40%] Building C object CMakeFiles/test_png_geometry.dir/src/driver.c.o -#19 1.972 [ 43%] Building C object CMakeFiles/test_png_geometry.dir/src/filter_png.c.o -#19 2.055 [ 45%] Linking C executable test_png_geometry -#19 2.152 [ 45%] Built target test_png_geometry -#19 2.175 [ 48%] Building C object CMakeFiles/test_device_usb.dir/tests/test_device_usb.c.o -#19 2.265 [ 51%] Linking C executable test_device_usb -#19 2.345 [ 51%] Built target test_device_usb -#19 2.368 [ 54%] Building C object CMakeFiles/ptouch-app.dir/src/main.c.o -#19 2.431 [ 56%] Building C object CMakeFiles/ptouch-app.dir/src/driver.c.o -#19 2.534 [ 59%] Building C object CMakeFiles/ptouch-app.dir/src/device_usb.c.o -#19 2.605 [ 62%] Building C object CMakeFiles/ptouch-app.dir/src/filter_png.c.o -#19 2.688 [ 64%] Linking C executable ptouch-app -#19 2.771 [ 64%] Built target ptouch-app -#19 2.794 [ 67%] Building C object tests/CMakeFiles/test_tables.dir/test_tables.c.o -#19 2.828 [ 70%] Linking C executable test_tables -#19 2.868 [ 70%] Built target test_tables -#19 2.892 [ 72%] Building C object tests/CMakeFiles/test_protocol.dir/test_protocol.c.o -#19 2.929 [ 75%] Linking C executable test_protocol -#19 2.969 [ 75%] Built target test_protocol -#19 2.994 [ 78%] Building C object tests/CMakeFiles/test_raster.dir/test_raster.c.o -#19 3.031 [ 81%] Linking C executable test_raster -#19 3.071 [ 81%] Built target test_raster -#19 3.095 [ 83%] Building C object tests/CMakeFiles/test_status.dir/test_status.c.o -#19 3.132 [ 86%] Linking C executable test_status -#19 3.175 [ 86%] Built target test_status -#19 3.200 [ 89%] Building C object tests/CMakeFiles/test_cutter.dir/test_cutter.c.o -#19 3.231 [ 91%] Linking C executable test_cutter -#19 3.270 [ 91%] Built target test_cutter -#19 3.294 [ 94%] Building C object tests/CMakeFiles/ptouch-cut-probe.dir/cut_probe.c.o -#19 3.376 [ 97%] Building C object tests/CMakeFiles/ptouch-cut-probe.dir/__/src/device_usb.c.o -#19 3.450 [100%] Linking C executable ptouch-cut-probe -#19 3.534 [100%] Built target ptouch-cut-probe -#19 3.590 Internal ctest changing into directory: /src/build-app -#19 3.590 Test project /src/build-app -#19 3.591 Start 1: driver_finishings -#19 33.45 1/11 Test #1: driver_finishings ................ Passed 29.86 sec -#19 33.45 Start 2: pappl_raster -#19 63.45 2/11 Test #2: pappl_raster ..................... Passed 30.00 sec -#19 63.45 Start 3: pappl_finishings -#19 93.42 3/11 Test #3: pappl_finishings ................. Passed 29.97 sec -#19 93.42 Start 4: png_geometry -#19 123.4 4/11 Test #4: png_geometry ..................... Passed 30.03 sec -#19 123.4 Start 5: device_usb -#19 123.5 5/11 Test #5: device_usb ....................... Passed 0.01 sec -#19 123.5 Start 6: tables -#19 123.5 6/11 Test #6: tables ........................... Passed 0.00 sec -#19 123.5 Start 7: protocol -#19 123.5 7/11 Test #7: protocol ......................... Passed 0.00 sec -#19 123.5 Start 8: raster -#19 123.5 8/11 Test #8: raster ........................... Passed 0.00 sec -#19 123.5 Start 9: status -#19 123.5 9/11 Test #9: status ........................... Passed 0.00 sec -#19 123.5 Start 10: cutter -#19 123.5 10/11 Test #10: cutter ........................... Passed 0.00 sec -#19 123.5 Start 11: cut_probe_capture -#19 124.1 11/11 Test #11: cut_probe_capture ................ Passed 0.63 sec -#19 124.1 -#19 124.1 100% tests passed, 0 tests failed out of 11 -#19 124.1 -#19 124.1 Total Test time (real) = 120.50 sec -#19 DONE 124.1s - -#20 [runtime 3/13] COPY --from=build /usr/local/lib/libcups.so* /usr/local/lib/ -#20 CACHED - -#21 [runtime 4/13] COPY --from=build /usr/local/lib/libcupsimage.so* /usr/local/lib/ -#21 CACHED - -#22 [runtime 5/13] COPY --from=build /usr/local/share/ptouch/cups-source-version /usr/local/share/ptouch/cups-source-version -#22 CACHED - -#23 [runtime 2/13] RUN apt-get update && apt-get install -y --no-install-recommends libusb-1.0-0 libcups2 libcupsimage2 libavahi-client3 libpng16-16 libjpeg62-turbo zlib1g libssl3 avahi-daemon dbus ca-certificates && rm -rf /var/lib/apt/lists/* -#23 CACHED - -#24 [runtime 6/13] RUN test "$(dpkg-query -W -f='${source:Version}' libcups2)" = "$(cat /usr/local/share/ptouch/cups-source-version)" -#24 CACHED - -#25 [runtime 7/13] COPY --from=build /usr/local/lib/libpappl.so* /usr/local/lib/ -#25 DONE 0.1s - -#26 [runtime 8/13] COPY --from=build /out/usr/local/bin/ptouch-app /usr/local/bin/ptouch-app -#26 DONE 0.0s - -#27 [runtime 9/13] RUN ldconfig -#27 DONE 0.3s - -#28 [runtime 10/13] RUN sh -c 'ldd /usr/local/bin/ptouch-app | grep -i "not found" && exit 1 || true' -#28 DONE 0.2s - -#29 [runtime 11/13] COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh -#29 DONE 0.0s - -#30 [runtime 12/13] COPY THIRD_PARTY_NOTICES.md /THIRD_PARTY_NOTICES.md -#30 DONE 0.0s - -#31 [runtime 13/13] RUN chmod +x /usr/local/bin/docker-entrypoint.sh -#31 DONE 0.2s - -#32 exporting to image -#32 exporting layers -#32 exporting layers 0.3s done -#32 exporting manifest sha256:c9d5f1fc82d28d47f7d7f36fed4bb6d2cf84dd3b2653a1d879dbe3a3c94e9470 0.0s done -#32 exporting config sha256:a448078c482a1f6019af942caf771a5e85a71e7eaf67e22a13655df3cf78d26f done -#32 exporting attestation manifest sha256:19a22f552aa2922debf88f82b99ca002d564f7da59438207350d759c654bfb32 0.0s done -#32 exporting manifest list sha256:babe9d5a3dfdd36d0602e4e76d33a658f754b77298664df30ef055bd7adf3308 0.0s done -#32 naming to docker.io/library/ptouch-review-fixed-deploy:20261013 done -#32 unpacking to docker.io/library/ptouch-review-fixed-deploy:20261013 0.1s done -#32 DONE 0.5s diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-openspec.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-openspec.txt deleted file mode 100644 index 8ac31a0..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-openspec.txt +++ /dev/null @@ -1,6 +0,0 @@ -- Validating... -✓ spec/batch-printing - ℹ [INFO] requirements[1]: Requirement text is very long (>500 characters). Move examples and edge cases into scenarios, or split it into separate requirements that each state one behavior. -✓ spec/label-rendering -✓ spec/printer-device -Totals: 3 passed, 0 failed (3 items) diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-smoke.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-smoke.txt deleted file mode 100644 index 4a0672a..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/final-smoke.txt +++ /dev/null @@ -1,881 +0,0 @@ -I [2026-10-13T05:05:54.293Z] Starting log, system up 0 second(s), 0 printer(s), listening for connections on '63e88ac90ef5.local:8000' from up to 32768 clients. -I [2026-10-13T05:05:54.297Z] Listening for connections on '*:8000'. -I [2026-10-13T05:05:54.297Z] Listening for connections on '*:8000'. -I [2026-10-13T05:05:54.297Z] Printer 'ptouch' at resource path '/ipp/print/ptouch'. -W [2026-10-13T05:05:54.297Z] [Printer ptouch] Driver does not support identification. -W [2026-10-13T05:05:54.297Z] [Printer ptouch] Driver does not support a self-test page. -W [2026-10-13T05:05:54.297Z] [Printer ptouch] Driver does not provide printer icons, using defaults. -I [2026-10-13T05:05:54.297Z] Created printer for socket://host.docker.internal:57703 (PTOUCH_DEVICE_URI override) -I [2026-10-13T05:05:54.297Z] Listening for connections on '/run/ptouch-app.sock'. -I [2026-10-13T05:05:54.297Z] Starting system. -I [2026-10-13T05:05:54.302Z] [Client 1] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:05:54.302Z] [Client 1] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:05:54.302Z] [Client 1] Continue -I [2026-10-13T05:05:54.302Z] [Client 1] Get-Printer-Attributes successful-ok -I [2026-10-13T05:05:54.302Z] [Client 1] OK application/ipp 10412 -I [2026-10-13T05:05:54.310Z] [Client 1] Closing connection from '172.17.0.1'. -I [2026-10-13T05:05:54.315Z] [Client 2] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:05:54.316Z] [Client 2] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:05:54.316Z] [Client 2] Continue -I [2026-10-13T05:05:54.317Z] [Job 1] Received 153 bytes of document data. -I [2026-10-13T05:05:54.317Z] [Client 2] Print-Job successful-ok -I [2026-10-13T05:05:54.317Z] [Client 2] OK application/ipp 218 -I [2026-10-13T05:05:54.317Z] [Job 1] Starting print job. -I [2026-10-13T05:05:54.317Z] [Job 1] PNG image dimensions are 76x180x1 -I [2026-10-13T05:05:54.317Z] [Job 1] PNG image resolution is 180x180dpi -I [2026-10-13T05:05:54.317Z] [Job 1] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:05:54.318Z] [Client 2] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:05:54.318Z] [Client 2] Continue -I [2026-10-13T05:05:54.318Z] [Client 2] Get-Job-Attributes successful-ok -I [2026-10-13T05:05:54.318Z] [Client 2] OK application/ipp 765 -I [2026-10-13T05:05:54.324Z] [Job 1] Completed, job-impressions-completed=3. -I [2026-10-13T05:05:57.763Z] [Client 3] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:05:57.763Z] [Client 3] HTTP_STATE_POST http://63e88ac90ef5.local:8000/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:05:57.763Z] [Client 3] Continue -I [2026-10-13T05:05:57.763Z] [Client 3] Get-Printer-Attributes successful-ok -I [2026-10-13T05:05:57.764Z] [Client 3] OK application/ipp 14633 -I [2026-10-13T05:05:57.768Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:05:57.768Z] [Client 3] Closing connection from '172.17.0.1'. -I [2026-10-13T05:05:59.319Z] [Client 2] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:05:59.319Z] [Client 2] Continue -I [2026-10-13T05:05:59.319Z] [Client 2] Get-Job-Attributes successful-ok -I [2026-10-13T05:05:59.319Z] [Client 2] OK application/ipp 795 -I [2026-10-13T05:05:59.321Z] [Client 2] Closing connection from '172.17.0.1'. -I [2026-10-13T05:05:59.327Z] [Client 4] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:05:59.328Z] [Client 4] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:05:59.328Z] [Client 4] Continue -I [2026-10-13T05:05:59.328Z] [Job 2] Received 153 bytes of document data. -I [2026-10-13T05:05:59.328Z] [Client 4] Print-Job successful-ok -I [2026-10-13T05:05:59.328Z] [Client 4] OK application/ipp 218 -I [2026-10-13T05:05:59.328Z] [Job 2] Starting print job. -I [2026-10-13T05:05:59.328Z] [Job 2] PNG image dimensions are 76x180x1 -I [2026-10-13T05:05:59.328Z] [Job 2] PNG image resolution is 180x180dpi -I [2026-10-13T05:05:59.328Z] [Job 2] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:05:59.329Z] [Client 4] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:05:59.329Z] [Client 4] Continue -I [2026-10-13T05:05:59.329Z] [Client 4] Get-Job-Attributes successful-ok -I [2026-10-13T05:05:59.329Z] [Client 4] OK application/ipp 784 -I [2026-10-13T05:05:59.336Z] [Job 2] Completed, job-impressions-completed=3. -I [2026-10-13T05:06:04.330Z] [Client 4] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:04.330Z] [Client 4] Continue -I [2026-10-13T05:06:04.330Z] [Client 4] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:04.330Z] [Client 4] OK application/ipp 814 -I [2026-10-13T05:06:04.332Z] [Client 4] Closing connection from '172.17.0.1'. -I [2026-10-13T05:06:04.338Z] [Client 5] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:06:04.338Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:06:04.339Z] [Client 5] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:04.339Z] [Client 5] Continue -I [2026-10-13T05:06:04.339Z] [Job 3] Received 153 bytes of document data. -I [2026-10-13T05:06:04.339Z] [Client 5] Print-Job successful-ok -I [2026-10-13T05:06:04.339Z] [Client 5] OK application/ipp 218 -I [2026-10-13T05:06:04.339Z] [Job 3] Starting print job. -I [2026-10-13T05:06:04.340Z] [Job 3] PNG image dimensions are 76x180x1 -I [2026-10-13T05:06:04.340Z] [Job 3] PNG image resolution is 180x180dpi -I [2026-10-13T05:06:04.340Z] [Job 3] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:06:04.340Z] [Client 5] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:04.340Z] [Client 5] Continue -I [2026-10-13T05:06:04.340Z] [Client 5] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:04.340Z] [Client 5] OK application/ipp 829 -I [2026-10-13T05:06:04.348Z] [Job 3] Completed, job-impressions-completed=3. -I [2026-10-13T05:06:09.342Z] [Client 5] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:09.342Z] [Client 5] Continue -I [2026-10-13T05:06:09.342Z] [Client 5] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:09.342Z] [Client 5] OK application/ipp 859 -I [2026-10-13T05:06:09.343Z] [Client 5] Closing connection from '172.17.0.1'. -I [2026-10-13T05:06:09.349Z] [Client 6] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:06:09.349Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:06:09.350Z] [Client 6] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:09.350Z] [Client 6] Continue -I [2026-10-13T05:06:09.350Z] [Job 4] Received 153 bytes of document data. -I [2026-10-13T05:06:09.350Z] [Client 6] Print-Job successful-ok -I [2026-10-13T05:06:09.350Z] [Client 6] OK application/ipp 218 -I [2026-10-13T05:06:09.350Z] [Job 4] Starting print job. -I [2026-10-13T05:06:09.351Z] [Job 4] PNG image dimensions are 76x180x1 -I [2026-10-13T05:06:09.351Z] [Job 4] PNG image resolution is 180x180dpi -I [2026-10-13T05:06:09.351Z] [Job 4] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:06:09.351Z] [Client 6] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:09.351Z] [Client 6] Continue -I [2026-10-13T05:06:09.351Z] [Client 6] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:09.351Z] [Client 6] OK application/ipp 784 -I [2026-10-13T05:06:09.359Z] [Job 4] Completed, job-impressions-completed=3. -I [2026-10-13T05:06:14.353Z] [Client 6] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:14.353Z] [Client 6] Continue -I [2026-10-13T05:06:14.353Z] [Client 6] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:14.353Z] [Client 6] OK application/ipp 814 -I [2026-10-13T05:06:14.354Z] [Client 6] Closing connection from '172.17.0.1'. -I [2026-10-13T05:06:14.360Z] [Client 7] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:06:14.360Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:06:14.361Z] [Client 7] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:14.361Z] [Client 7] Continue -I [2026-10-13T05:06:14.361Z] [Job 5] Received 153 bytes of document data. -I [2026-10-13T05:06:14.361Z] [Client 7] Print-Job successful-ok -I [2026-10-13T05:06:14.361Z] [Client 7] OK application/ipp 218 -I [2026-10-13T05:06:14.361Z] [Job 5] Starting print job. -I [2026-10-13T05:06:14.362Z] [Job 5] PNG image dimensions are 76x180x1 -I [2026-10-13T05:06:14.362Z] [Job 5] PNG image resolution is 180x180dpi -I [2026-10-13T05:06:14.362Z] [Job 5] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:06:14.362Z] [Client 7] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:14.362Z] [Client 7] Continue -I [2026-10-13T05:06:14.362Z] [Client 7] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:14.362Z] [Client 7] OK application/ipp 784 -I [2026-10-13T05:06:14.370Z] [Job 5] Completed, job-impressions-completed=3. -I [2026-10-13T05:06:19.364Z] [Client 7] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:19.364Z] [Client 7] Continue -I [2026-10-13T05:06:19.364Z] [Client 7] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:19.364Z] [Client 7] OK application/ipp 814 -I [2026-10-13T05:06:19.366Z] [Client 7] Closing connection from '172.17.0.1'. -I [2026-10-13T05:06:19.427Z] [Client 8] Accepted connection from 'localhost'. -I [2026-10-13T05:06:19.427Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:06:19.427Z] [Client 8] HTTP_STATE_POST http://localhost:0/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:19.427Z] [Client 8] Continue -I [2026-10-13T05:06:19.427Z] [Client 8] Get-Printer-Attributes successful-ok -I [2026-10-13T05:06:19.428Z] [Client 8] OK application/ipp 10197 -I [2026-10-13T05:06:19.429Z] [Client 8] HTTP_STATE_POST http://localhost:0/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:19.429Z] [Client 8] Continue -I [2026-10-13T05:06:19.429Z] [Client 8] Set-Printer-Attributes successful-ok (Printer attributes set.) -I [2026-10-13T05:06:19.429Z] [Client 8] OK application/ipp 117 -I [2026-10-13T05:06:19.429Z] [Client 8] Closing connection from 'localhost'. -I [2026-10-13T05:06:19.441Z] [Client 9] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:06:19.441Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:06:19.442Z] [Client 9] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:19.442Z] [Client 9] Continue -I [2026-10-13T05:06:19.442Z] [Client 9] Get-Printer-Attributes successful-ok -I [2026-10-13T05:06:19.442Z] [Client 9] OK application/ipp 174 -I [2026-10-13T05:06:19.442Z] [Client 9] Closing connection from '172.17.0.1'. -I [2026-10-13T05:06:19.448Z] [Client 10] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:06:19.449Z] [Client 10] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:19.449Z] [Client 10] Continue -I [2026-10-13T05:06:19.449Z] [Job 6] Received 153 bytes of document data. -I [2026-10-13T05:06:19.449Z] [Client 10] Print-Job successful-ok -I [2026-10-13T05:06:19.449Z] [Client 10] OK application/ipp 218 -I [2026-10-13T05:06:19.449Z] [Job 6] Starting print job. -I [2026-10-13T05:06:19.449Z] [Job 6] PNG image dimensions are 76x180x1 -I [2026-10-13T05:06:19.449Z] [Job 6] PNG image resolution is 180x180dpi -I [2026-10-13T05:06:19.449Z] [Job 6] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:06:19.450Z] [Client 10] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:19.450Z] [Client 10] Continue -I [2026-10-13T05:06:19.450Z] [Client 10] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:19.450Z] [Client 10] OK application/ipp 765 -I [2026-10-13T05:06:19.458Z] [Job 6] Completed, job-impressions-completed=2. -I [2026-10-13T05:06:24.451Z] [Client 10] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:24.451Z] [Client 10] Continue -I [2026-10-13T05:06:24.451Z] [Client 10] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:24.451Z] [Client 10] OK application/ipp 795 -I [2026-10-13T05:06:24.453Z] [Client 10] Closing connection from '172.17.0.1'. -I [2026-10-13T05:06:24.515Z] [Client 11] Accepted connection from 'localhost'. -I [2026-10-13T05:06:24.515Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:06:24.515Z] [Client 11] HTTP_STATE_POST http://localhost:0/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:24.515Z] [Client 11] Continue -I [2026-10-13T05:06:24.515Z] [Client 11] Get-Printer-Attributes successful-ok -I [2026-10-13T05:06:24.515Z] [Client 11] OK application/ipp 10207 -I [2026-10-13T05:06:24.517Z] [Client 11] HTTP_STATE_POST http://localhost:0/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:24.517Z] [Client 11] Continue -I [2026-10-13T05:06:24.517Z] [Client 11] Set-Printer-Attributes successful-ok (Printer attributes set.) -I [2026-10-13T05:06:24.517Z] [Client 11] OK application/ipp 117 -I [2026-10-13T05:06:24.517Z] [Client 11] Closing connection from 'localhost'. -I [2026-10-13T05:06:24.528Z] [Client 12] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:06:24.528Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:06:24.529Z] [Client 12] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:24.529Z] [Client 12] Continue -I [2026-10-13T05:06:24.529Z] [Client 12] Get-Printer-Attributes successful-ok -I [2026-10-13T05:06:24.529Z] [Client 12] OK application/ipp 127 -I [2026-10-13T05:06:24.530Z] [Client 12] Closing connection from '172.17.0.1'. -I [2026-10-13T05:06:24.535Z] [Client 13] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:06:24.536Z] [Client 13] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:24.536Z] [Client 13] Continue -I [2026-10-13T05:06:24.536Z] [Job 7] Received 153 bytes of document data. -I [2026-10-13T05:06:24.536Z] [Client 13] Print-Job successful-ok -I [2026-10-13T05:06:24.536Z] [Client 13] OK application/ipp 218 -I [2026-10-13T05:06:24.536Z] [Job 7] Starting print job. -I [2026-10-13T05:06:24.537Z] [Job 7] PNG image dimensions are 76x180x1 -I [2026-10-13T05:06:24.537Z] [Job 7] PNG image resolution is 180x180dpi -I [2026-10-13T05:06:24.537Z] [Job 7] portrait image, 180 px along the tape at 180 dpi -> media length 5000 (1/100 mm), header.cupsHeight=354 PWG_ImageBox=[4 0 79 353] -I [2026-10-13T05:06:24.537Z] [Client 13] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:24.537Z] [Client 13] Continue -I [2026-10-13T05:06:24.537Z] [Client 13] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:24.537Z] [Client 13] OK application/ipp 765 -I [2026-10-13T05:06:24.545Z] [Job 7] Completed, job-impressions-completed=2. -I [2026-10-13T05:06:29.538Z] [Client 13] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:29.539Z] [Client 13] Continue -I [2026-10-13T05:06:29.539Z] [Client 13] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:29.539Z] [Client 13] OK application/ipp 795 -I [2026-10-13T05:06:29.540Z] [Client 13] Closing connection from '172.17.0.1'. -I [2026-10-13T05:06:29.546Z] [Client 14] Accepted connection from '172.17.0.1'. -I [2026-10-13T05:06:29.546Z] Saving system state to '/var/lib/ptouch-app.state'. -I [2026-10-13T05:06:29.547Z] [Client 14] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:29.547Z] [Client 14] Continue -I [2026-10-13T05:06:29.547Z] [Job 8] Received 8 bytes of document data. -I [2026-10-13T05:06:29.547Z] [Client 14] Print-Job successful-ok -I [2026-10-13T05:06:29.547Z] [Client 14] OK application/ipp 218 -I [2026-10-13T05:06:29.547Z] [Job 8] Starting print job. -E [2026-10-13T05:06:29.548Z] [Job 8] PNG: Read Error -libpng error: Read Error -I [2026-10-13T05:06:29.548Z] [Job 8] Aborted, job-impressions-completed=0. -I [2026-10-13T05:06:29.548Z] [Client 14] HTTP_STATE_POST http://127.0.0.1:32771/ipp/print/ptouch HTTP/1.1 () -I [2026-10-13T05:06:29.548Z] [Client 14] Continue -I [2026-10-13T05:06:29.548Z] [Client 14] Get-Job-Attributes successful-ok -I [2026-10-13T05:06:29.548Z] [Client 14] OK application/ipp 788 -I [2026-10-13T05:06:29.550Z] [Client 14] Closing connection from '172.17.0.1'. -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Get-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - requested-attributes (keyword) = all - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 10412 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - charset-configured (charset) = utf-8 - charset-supported (1setOf charset) = us-ascii,utf-8 - client-info-supported (1setOf keyword) = client-name,client-patches,client-string-version,client-version - compression-supported (1setOf keyword) = deflate,gzip,none - copies-default (integer) = 1 - device-uuid (uri) = urn:uuid:967729b2-957c-3818-6fab-e58da5179a9c - document-format-default (mimeMediaType) = application/octet-stream - generated-natural-language-supported (naturalLanguage) = en - ipp-versions-supported (1setOf keyword) = 1.1,2.0 - job-hold-until-default (keyword) = no-hold - job-hold-until-supported (1setOf keyword) = day-time,evening,indefinite,night,no-hold,second-shift,third-shift,weekend - job-hold-until-time-supported (boolean) = true - job-ids-supported (boolean) = true - job-k-octets-supported (rangeOfInteger) = 0-101803280 - job-priority-default (integer) = 50 - job-priority-supported (integer) = 1 - job-sheets-default (nameWithoutLanguage) = none - job-sheets-supported (nameWithoutLanguage) = none - multiple-document-handling-supported (1setOf keyword) = separate-documents-uncollated-copies,separate-documents-collated-copies - multiple-document-jobs-supported (boolean) = false - multiple-operation-time-out (integer) = 60 - multiple-operation-time-out-action (keyword) = abort-job - natural-language-configured (naturalLanguage) = en - notify-events-default (keyword) = job-completed - notify-events-supported (1setOf keyword) = document-completed,document-config-changed,document-created,document-fetchable,document-state-changed,document-stopped,job-completed,job-config-changed,job-created,job-fetchable,job-progress,job-state-changed,job-stopped,printer-config-changed,printer-finishings-changed,printer-media-changed,printer-queue-order-changed,printer-restarted,printer-shutdown,printer-state-changed,printer-stopped,resource-canceled,resource-config-changed,resource-created,resource-installed,resource-changed,printer-created,printer-deleted,system-config-changed,system-state-changed,system-stopped - notify-lease-duration-default (integer) = 3600 - notify-lease-duration-supported (rangeOfInteger) = 0-86400 - notify-max-events-supported (integer) = 100 - notify-pull-method-supported (keyword) = ippget - operations-supported (1setOf enum) = Print-Job,Validate-Job,Create-Job,Send-Document,Cancel-Job,Get-Job-Attributes,Get-Jobs,Get-Printer-Attributes,Pause-Printer,Resume-Printer,Set-Printer-Attributes,Get-Printer-Supported-Values,Create-Printer-Subscriptions,Create-Job-Subscriptions,Get-Subscription-Attributes,Get-Subscriptions,Renew-Subscription,Cancel-Subscription,Get-Notifications,Enable-Printer,Disable-Printer,Pause-Printer-After-Current-Job,Cancel-Current-Job,Cancel-Jobs,Cancel-My-Jobs,Close-Job,Identify-Printer,Hold-Job,Release-Job,Hold-New-Jobs,Release-Held-New-Jobs - orientation-requested-supported (1setOf enum) = portrait,landscape,reverse-landscape,reverse-portrait,none - pdl-override-supported (keyword) = attempted - print-content-optimize-supported (1setOf keyword) = auto,graphic,photo,text-and-graphic,text - print-processing-attributes-supported (1setOf keyword) = print-color-mode,printer-resolution - print-quality-supported (1setOf enum) = draft,normal,high - print-scaling-supported (1setOf keyword) = auto,auto-fit,fill,fit,none - printer-get-attributes-supported (keyword) = document-format - printer-info (textWithoutLanguage) = ptouch - printer-name (nameWithoutLanguage) = ptouch - printer-uuid (uri) = urn:uuid:967729b2-957c-3818-6fab-e58da5179a9c - requesting-user-uri-supported (boolean) = true - smi55357-device-uri (uri) = socket://host.docker.internal:57703 - smi55357-driver (keyword) = brother_ptouch - uri-security-supported (1setOf keyword) = tls,none - which-jobs-supported (1setOf keyword) = completed,not-completed,all - printer-id (integer) = 1 - color-supported (boolean) = false - document-format-preferred (mimeMediaType) = image/urf - document-format-supported (1setOf mimeMediaType) = application/octet-stream,image/pwg-raster,image/urf,image/png,image/jpeg - ipp-features-supported (keyword) = ipp-everywhere - job-creation-attributes-supported (1setOf keyword) = copies,document-format,document-name,ipp-attribute-fidelity,job-hold-until,job-hold-until-time,job-name,job-priority,job-retain-until,job-retain-until-interval,job-retain-until-time,media,media-col,multiple-document-handling,orientation-requested,print-color-mode,print-content-optimize,print-quality,printer-resolution,finishings,finishings-col - jpeg-features-supported (1setOf keyword) = arithmetic,cmyk,progressive - jpeg-k-octets-supported (rangeOfInteger) = 0-101803280 - jpeg-x-dimension-supported (rangeOfInteger) = 0-16384 - jpeg-y-dimension-supported (rangeOfInteger) = 1-16384 - landscape-orientation-requested-preferred (enum) = 4 - media-bottom-margin-supported (integer) = 0 - media-col-supported (1setOf keyword) = media-bottom-margin,media-left-margin,media-right-margin,media-size,media-size-name,media-top-margin,media-source,media-type - media-source-supported (1setOf keyword) = main-roll,auto - media-supported (1setOf keyword) = om_6x25mm_6x25mm,om_6x50mm_6x50mm,om_6x100mm_6x100mm,om_9x25mm_9x25mm,om_9x50mm_9x50mm,om_9x100mm_9x100mm,om_12x25mm_12x25mm,om_12x50mm_12x50mm,om_12x100mm_12x100mm,om_18x25mm_18x25mm,om_18x50mm_18x50mm,om_18x100mm_18x100mm,om_24x25mm_24x25mm,om_24x50mm_24x50mm,om_24x100mm_24x100mm,roll_min_6x5mm,roll_max_24x300mm - media-top-margin-supported (integer) = 0 - media-type-supported (keyword) = labels - mopria-certified (textWithoutLanguage) = 1.3 - output-bin-supported (keyword) = face-down - pages-per-minute (integer) = 20 - print-color-mode-supported (1setOf keyword) = bi-level,monochrome - printer-device-id (textWithoutLanguage) = MFG:Brother;MDL:PT-2730;CMD:PT-CBP; - printer-kind (keyword) = label - printer-make-and-model (textWithoutLanguage) = Brother PT-2730 - printer-output-tray (octetString) = type=unRemovableBin;maxcapacity=-2;remaining=-2;status=0;name=face-down;stackingorder=firstToLast;pagedelivery=faceDown; - printer-resolution-supported (resolution) = 180dpi - printer-settable-attributes (1setOf keyword) = copies-default,media-col-default,media-col-ready,media-default,media-ready,multiple-document-handling-default,orientation-requested-default,print-color-mode-default,print-content-optimize-default,print-quality-default,printer-contact-col,printer-geo-location,printer-location,printer-organization,printer-organizational-unit,printer-resolution-default,finishings-col-default,finishings-default - pwg-raster-document-resolution-supported (resolution) = 180dpi - pwg-raster-document-type-supported (1setOf keyword) = black_1,black_8 - sides-supported (keyword) = one-sided - urf-supported (1setOf keyword) = V1.5,W8,DEVW8,PQ3-4-5,FN3-11,IS0-9,MT5,OB10,RS180 - finishings-supported (1setOf enum) = none,trim,trim-after-pages,trim-after-job - finishings-ready (1setOf enum) = none,trim,trim-after-pages,trim-after-job - finishings-col-supported (keyword) = finishing-template - finishing-template-supported (1setOf keyword) = trim,trim-after-pages,trim-after-job,ptouch-chain - finishings-col-database (1setOf collection) = {finishing-template=trim},{finishing-template=trim-after-pages},{finishing-template=trim-after-job},{finishing-template=ptouch-chain} - finishings-col-ready (1setOf collection) = {finishing-template=trim},{finishing-template=trim-after-pages},{finishing-template=trim-after-job},{finishing-template=ptouch-chain} - media-size-supported (1setOf collection) = {x-dimension=599-601 y-dimension=500-30000},{x-dimension=899-901 y-dimension=500-30000},{x-dimension=1199-1201 y-dimension=500-30000},{x-dimension=1799-1801 y-dimension=500-30000},{x-dimension=2399-2401 y-dimension=500-30000} - media-left-margin-supported (1setOf integer) = 53,63,74,83,297 - media-right-margin-supported (1setOf integer) = 57,71,74,85,297 - finishings-default (enum) = trim - finishings-col-default (collection) = {finishing-template=trim} - printer-is-accepting-jobs (boolean) = true - printer-state (enum) = idle - printer-state-message (textWithoutLanguage) = Idle. - printer-state-reasons (keyword) = none - copies-supported (rangeOfInteger) = 1-999 - identify-actions-default (keyword) = none - job-spooling-supported (keyword) = spool - media-col-default (collection) = {media-bottom-margin=0 media-left-margin=63 media-right-margin=71 media-size={x-dimension=1200 y-dimension=10000} media-size-name=om_12x100mm_12x100mm media-source=main-roll media-top-margin=0 media-type=labels} - media-col-ready (collection) = {media-bottom-margin=0 media-left-margin=63 media-right-margin=71 media-size={x-dimension=1200 y-dimension=10000} media-size-name=om_12x100mm_12x100mm media-source=main-roll media-top-margin=0 media-type=labels} - media-default (keyword) = om_12x100mm_12x100mm - media-ready (keyword) = om_12x100mm_12x100mm - multiple-document-handling-default (keyword) = separate-documents-collated-copies - orientation-requested-default (enum) = none - output-bin-default (keyword) = face-down - print-color-mode-default (keyword) = bi-level - print-content-optimize-default (keyword) = auto - print-quality-default (enum) = normal - print-scaling-default (keyword) = none - printer-config-change-date-time (dateTime) = 2026-10-13T05:05:54Z - printer-config-change-time (integer) = 1 - printer-contact-col (collection) = {contact-name= contact-uri=data:, contact-vcard=BEGIN:VCARD -VERSION:4.0 -FN: -TEL;VALUE=URI;TYPE=work: -EMAIL;TYPE=work: -END:VCARD -} - printer-current-time (dateTime) = 2026-10-13T05:05:54Z - printer-dns-sd-name (nameWithoutLanguage) = ptouch - printer-firmware-name (1setOf nameWithoutLanguage) = ptouch-app,PAPPL,libcups,libjpeg,libpng - printer-firmware-patches (1setOf textWithoutLanguage) = ,,,, - printer-firmware-string-version (1setOf textWithoutLanguage) = 1.0,1.4.11,2.4.2,8.0,1.6.39 - printer-firmware-version (1setOf octetString) = \001\000\000\000\000\000\000\000,\001\000\004\000\ \000\000\000,\002\000\004\000\002\000\000\000,\010\000\000\000\000\000\000\000,\001\000\006\000'\000\000\000 - printer-geo-location (unknown) = unknown - printer-icons (1setOf uri) = http://127.0.0.1:32771/ptouch/icon-sm.png,http://127.0.0.1:32771/ptouch/icon-md.png,http://127.0.0.1:32771/ptouch/icon-lg.png - printer-impressions-completed (integer) = 0 - printer-input-tray (1setOf octetString) = type=sheetFeedAutoRemovableTray;mediafeed=10000;mediaxfeed=1200;maxcapacity=-2;level=-2;status=0;name=main-roll;,type=other;mediafeed=0;mediaxfeed=0;maxcapacity=-2;level=-2;status=0;name=auto; - printer-location (textWithoutLanguage) = - printer-more-info (uri) = http://127.0.0.1:32771/ptouch/ - printer-organization (textWithoutLanguage) = - printer-organizational-unit (textWithoutLanguage) = - printer-resolution-default (resolution) = 180dpi - printer-speed-default (integer) = 0 - printer-state-change-date-time (dateTime) = 2026-10-13T05:05:54Z - printer-state-change-time (integer) = 0 - printer-supply-info-uri (uri) = http://127.0.0.1:32771/ptouch/supplies - printer-up-time (integer) = 0 - printer-uri-supported (1setOf uri) = ipps://127.0.0.1:32771/ipp/print/ptouch,ipp://127.0.0.1:32771/ipp/print/ptouch - printer-xri-supported (1setOf collection) = {xri-authentication=none xri-security=none xri-uri=ipp://127.0.0.1:32771/ipp/print/ptouch},{xri-authentication=none xri-security=tls xri-uri=ipps://127.0.0.1:32771/ipp/print/ptouch} - queued-job-count (integer) = 0 - sides-default (keyword) = one-sided - uri-authentication-supported (1setOf keyword) = none,none - -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 1 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/1 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 1 - /tmp/ptouch-smoke-zrfzh4ta/request [0001] - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 795 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 1 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/1 - job-uuid (uri) = urn:uuid:7c3a94a6-6050-3147-6578-f51eea77a161 - job-printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:05:54Z - date-time-at-completed (dateTime) = 2026-10-13T05:05:54Z - date-time-at-processing (dateTime) = 2026-10-13T05:05:54Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 3 - job-printer-up-time (integer) = 5 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 0 - time-at-completed (integer) = 0 - time-at-processing (integer) = 0 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -default {"pages": [{"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "eject", "autocut": true, "chain_off_at_print": true}], "terminal_commands_after_pages": [], "init": 1, "eject": 1} -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings (enum) = none - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 2 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/2 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 2 - /tmp/ptouch-smoke-zrfzh4ta/request [0001] - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 814 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings (enum) = none - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 2 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/2 - job-uuid (uri) = urn:uuid:7613655c-e38c-3b50-4e73-5c7cb6e8dbfa - job-printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:05:59Z - date-time-at-completed (dateTime) = 2026-10-13T05:05:59Z - date-time-at-processing (dateTime) = 2026-10-13T05:05:59Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 3 - job-printer-up-time (integer) = 10 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 5 - time-at-completed (integer) = 5 - time-at-processing (integer) = 5 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -none {"pages": [{"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": false, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": false, "chain_off_at_print": false}], "terminal_commands_after_pages": [], "init": 1, "eject": 0} -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings-col (collection) = {finishing-template=ptouch-chain} - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 3 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/3 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 3 - /tmp/ptouch-smoke-zrfzh4ta/request [0001] - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 859 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings-col (collection) = {finishing-template=ptouch-chain} - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 3 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/3 - job-uuid (uri) = urn:uuid:c58fd4b0-5751-3e4a-4c1f-d607cc50e48f - job-printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:06:04Z - date-time-at-completed (dateTime) = 2026-10-13T05:06:04Z - date-time-at-processing (dateTime) = 2026-10-13T05:06:04Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 3 - job-printer-up-time (integer) = 15 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 10 - time-at-completed (integer) = 10 - time-at-processing (integer) = 10 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -chain {"pages": [{"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}], "terminal_commands_after_pages": [], "init": 0, "eject": 0} -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings (enum) = trim-after-pages - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 4 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/4 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 4 - /tmp/ptouch-smoke-zrfzh4ta/request [0001] - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 814 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings (enum) = trim-after-pages - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 4 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/4 - job-uuid (uri) = urn:uuid:358db792-fba1-313b-5e4e-7ae7bf44a420 - job-printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:06:09Z - date-time-at-completed (dateTime) = 2026-10-13T05:06:09Z - date-time-at-processing (dateTime) = 2026-10-13T05:06:09Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 3 - job-printer-up-time (integer) = 20 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 15 - time-at-completed (integer) = 15 - time-at-processing (integer) = 15 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -each {"pages": [{"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "eject", "autocut": true, "chain_off_at_print": true}], "terminal_commands_after_pages": [], "init": 0, "eject": 1} -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings (enum) = trim-after-job - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 5 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/5 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 5 - /tmp/ptouch-smoke-zrfzh4ta/request [0001] - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 814 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 3 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - finishings (enum) = trim-after-job - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 5 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/5 - job-uuid (uri) = urn:uuid:3f951106-859c-3ad9-7f44-45fbe4b59bb3 - job-printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:06:14Z - date-time-at-completed (dateTime) = 2026-10-13T05:06:14Z - date-time-at-processing (dateTime) = 2026-10-13T05:06:14Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 3 - job-printer-up-time (integer) = 25 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 20 - time-at-completed (integer) = 20 - time-at-processing (integer) = 20 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -end {"pages": [{"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": false, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "eject", "autocut": false, "chain_off_at_print": true}], "terminal_commands_after_pages": [], "init": 1, "eject": 1} - -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Get-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - requested-attributes (1setOf keyword) = finishings-default,finishings-col-default - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 174 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - finishings-default (enum) = trim-after-job - finishings-col-default (collection) = {finishing-template=trim-after-job} - -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 2 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 6 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/6 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 6 - /tmp/ptouch-smoke-zrfzh4ta/request [0001] - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 795 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 2 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 6 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/6 - job-uuid (uri) = urn:uuid:e5751cb7-9e44-3b2b-534c-a2775932077f - job-printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:06:19Z - date-time-at-completed (dateTime) = 2026-10-13T05:06:19Z - date-time-at-processing (dateTime) = 2026-10-13T05:06:19Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 2 - job-printer-up-time (integer) = 30 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 25 - time-at-completed (integer) = 25 - time-at-processing (integer) = 25 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -default 63 {"pages": [{"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "eject", "autocut": false, "chain_off_at_print": true}], "terminal_commands_after_pages": [], "init": 1, "eject": 1} - -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Get-Printer-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - requested-attributes (1setOf keyword) = finishings-default,finishings-col-default - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 127 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - finishings-default (enum) = none - finishings-col-default (no-value) = no-value - -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 2 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 7 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/7 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 7 - /tmp/ptouch-smoke-zrfzh4ta/request [0001] - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 795 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 2 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 7 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/7 - job-uuid (uri) = urn:uuid:3f8e7022-46a8-3bb3-64ce-c28417491696 - job-printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:06:24Z - date-time-at-completed (dateTime) = 2026-10-13T05:06:24Z - date-time-at-processing (dateTime) = 2026-10-13T05:06:24Z - job-impressions (integer) = 1 - job-impressions-completed (integer) = 2 - job-printer-up-time (integer) = 35 - job-state (enum) = completed - job-state-message (textWithoutLanguage) = Job completed. - job-state-reasons (keyword) = job-completed-successfully - time-at-creation (integer) = 30 - time-at-completed (integer) = 30 - time-at-processing (integer) = 30 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -default 3 {"pages": [{"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": true, "chain_off_at_print": false}, {"rows": 354, "length_mm": 49.95, "finish": "ff", "autocut": false, "chain_off_at_print": false}], "terminal_commands_after_pages": [], "init": 1, "eject": 0} -"/tmp/ptouch-smoke-zrfzh4ta/request.test": - Print-Job: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - document-format (mimeMediaType) = image/png - copies (integer) = 1 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 218 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - job-id (integer) = 8 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/8 - job-state (enum) = pending - job-state-message (textWithoutLanguage) = Job pending. - job-state-reasons (keyword) = none - Get-Job-Attributes: - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - requesting-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 8 - /tmp/ptouch-smoke-zrfzh4ta/request [PASS] - RECEIVED: 788 bytes in response - status-code = successful-ok (successful-ok) - attributes-charset (charset) = utf-8 - attributes-natural-language (naturalLanguage) = en - copies (integer) = 1 - media (keyword) = om_12x50mm_12x50mm - print-scaling (keyword) = none - document-format-supplied (mimeMediaType) = image/png - job-name (nameWithoutLanguage) = Untitled - job-originating-user-name (nameWithoutLanguage) = smoke - job-id (integer) = 8 - job-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch/8 - job-uuid (uri) = urn:uuid:a1bcb206-c7c2-320b-407b-4447e44b5e95 - job-printer-uri (uri) = ipp://127.0.0.1:32771/ipp/print/ptouch - date-time-at-creation (dateTime) = 2026-10-13T05:06:29Z - date-time-at-completed (dateTime) = 2026-10-13T05:06:29Z - date-time-at-processing (dateTime) = 2026-10-13T05:06:29Z - job-impressions (integer) = 0 - job-impressions-completed (integer) = 0 - job-printer-up-time (integer) = 35 - job-state (enum) = aborted - job-state-message (textWithoutLanguage) = Job aborted. - job-state-reasons (keyword) = document-format-error - time-at-creation (integer) = 35 - time-at-completed (integer) = 35 - time-at-processing (integer) = 35 - -Summary: 2 tests, 2 passed, 0 failed, 0 skipped -Score: 100% - -Image smoke passed: four presets, synchronized defaults, geometry, copies, and input failure. diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-chain-2.prn b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-chain-2.prn deleted file mode 100644 index e84953f..0000000 Binary files a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-chain-2.prn and /dev/null differ diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-each-2.prn b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-each-2.prn deleted file mode 100644 index 2ba5d4f..0000000 Binary files a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-each-2.prn and /dev/null differ diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-end-2.prn b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-end-2.prn deleted file mode 100644 index 9fdaffc..0000000 Binary files a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-end-2.prn and /dev/null differ diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-none-2.prn b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-none-2.prn deleted file mode 100644 index 2f69eb8..0000000 Binary files a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/gate-24mm-none-2.prn and /dev/null differ diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-after.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-after.txt deleted file mode 100644 index 3dd9cad..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-after.txt +++ /dev/null @@ -1,81 +0,0 @@ -E [2026-10-13T04:56:55.804Z] Unable to initialize DNS-SD: Daemon not running -E [2026-10-13T04:56:55.804Z] Unable to initialize DNS-SD: Daemon not running -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=180 pages=1 ends=1/0 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=540 pages=2 ends=1/0 -E [2026-10-13T04:56:55.808Z] [Job 3] Incomplete raster page at row 179. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=179 pages=0 ends=0/1 -E [2026-10-13T04:56:55.809Z] [Job 4] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -E [2026-10-13T04:56:55.809Z] [Job 5] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=180 pages=1 ends=1/0 -E [2026-10-13T04:56:55.810Z] [Job 7] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=180 pages=1 ends=1/0 -E [2026-10-13T04:56:55.811Z] [Job 9] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=3 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=180 pages=1 ends=1/0 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=540 pages=2 ends=1/0 -E [2026-10-13T04:56:55.813Z] [Job 13] Incomplete raster page at row 179. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=179 pages=0 ends=0/1 -E [2026-10-13T04:56:55.814Z] [Job 14] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -E [2026-10-13T04:56:55.814Z] [Job 15] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=180 pages=1 ends=1/0 -E [2026-10-13T04:56:55.815Z] [Job 17] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=180 pages=1 ends=1/0 -E [2026-10-13T04:56:55.816Z] [Job 19] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=3 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=180 pages=1 ends=1/0 -E [2026-10-13T04:56:55.817Z] [Job 22] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=180 pages=1 ends=1/0 -E [2026-10-13T04:56:55.818Z] [Job 24] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -E [2026-10-13T04:56:55.818Z] [Job 25] Unsupported raster data seen. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -E [2026-10-13T04:56:55.819Z] [Job 26] Bad raster data seen. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -E [2026-10-13T04:56:55.824Z] [Job 27] Unsupported raster resolution. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/1 -E [2026-10-13T04:56:55.827Z] [Job 28] Unable to write raster line 3. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=3 pages=0 ends=0/1 -E [2026-10-13T04:56:55.827Z] [Job 29] Unable to end raster job. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=708 pages=1 ends=1/0 -E [2026-10-13T04:56:55.828Z] [Job 30] Unable to finish raster stream - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.829Z] [Job 31] Unable to finish raster stream - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.829Z] [Job 32] Unable to finish raster stream - Invalid raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.830Z] [Job 33] Unable to read raster stream from client - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/0 -E [2026-10-13T04:56:55.833Z] [Job 34] Incomplete raster page at row 359. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=539 pages=1 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=540 pages=2 ends=1/0 -E [2026-10-13T04:56:55.834Z] [Job 36] Unable to finish raster stream - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.834Z] [Job 37] Unable to finish raster stream - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.835Z] [Job 38] Unable to finish raster stream - Invalid raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.836Z] [Job 39] Unable to read raster stream from client - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/0 -E [2026-10-13T04:56:55.836Z] [Job 40] Incomplete raster page at row 359. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=539 pages=1 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=540 pages=2 ends=1/0 -E [2026-10-13T04:56:55.838Z] [Job 42] Unable to finish raster stream - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.838Z] [Job 43] Unable to finish raster stream - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.839Z] [Job 44] Unable to finish raster stream - Invalid raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=180 pages=1 ends=0/1 -E [2026-10-13T04:56:55.839Z] [Job 45] Unable to read raster stream from client - Truncated raster page header.\n -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=0 pages=0 ends=0/0 -E [2026-10-13T04:56:55.840Z] [Job 46] Incomplete raster page at row 359. -/tmp/pappl-raster-qQFtQt/page.ras: state=8 rows=539 pages=1 ends=0/1 -/tmp/pappl-raster-qQFtQt/page.ras: state=9 rows=540 pages=2 ends=1/0 diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-bad-context.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-bad-context.txt deleted file mode 100644 index 90c9f9a..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-bad-context.txt +++ /dev/null @@ -1,4 +0,0 @@ -patching file pappl/job-process.c -Hunk #2 FAILED at 599. -1 out of 9 hunks FAILED -- saving rejects to file pappl/job-process.c.rej -patching file pappl/job-filter.c diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-before.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-before.txt deleted file mode 100644 index 459c9a1..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-before.txt +++ /dev/null @@ -1,15 +0,0 @@ -E [2026-10-13T04:55:28.933Z] Unable to initialize DNS-SD: Daemon not running -E [2026-10-13T04:55:28.933Z] Unable to initialize DNS-SD: Daemon not running -/tmp/pappl-raster-WLjBZa/page.ras: state=9 rows=180 pages=1 ends=1/0 -/tmp/pappl-raster-WLjBZa/page.ras: state=9 rows=540 pages=2 ends=1/0 -E [2026-10-13T04:55:28.935Z] [Job 3] Incomplete raster page at row 179. -/tmp/pappl-raster-WLjBZa/page.ras: state=8 rows=179 pages=0 ends=0/1 -E [2026-10-13T04:55:28.935Z] [Job 4] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-WLjBZa/page.ras: state=8 rows=0 pages=0 ends=0/1 -E [2026-10-13T04:55:28.936Z] [Job 5] Raster page contradicts explicit job media dimensions. -/tmp/pappl-raster-WLjBZa/page.ras: state=8 rows=0 pages=0 ends=0/1 -/tmp/pappl-raster-WLjBZa/page.ras: state=9 rows=180 pages=1 ends=1/0 -/tmp/pappl-raster-WLjBZa/page.ras: state=9 rows=180 pages=1 ends=1/0 -test_before: /src/tests/test_pappl_raster.c:171: execute: Assertion `papplJobGetState(job) == (success ? IPP_JSTATE_COMPLETED : IPP_JSTATE_ABORTED)' failed. -timeout: the monitored command dumped core -Aborted diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-clean.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-clean.txt deleted file mode 100644 index e3a1031..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-clean.txt +++ /dev/null @@ -1,2 +0,0 @@ -patching file pappl/job-process.c -patching file pappl/job-filter.c diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-duplicate.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-duplicate.txt deleted file mode 100644 index 0887b7c..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-duplicate.txt +++ /dev/null @@ -1,6 +0,0 @@ -patching file pappl/job-process.c -Reversed (or previously applied) patch detected! Skipping patch. -9 out of 9 hunks ignored -- saving rejects to file pappl/job-process.c.rej -patching file pappl/job-filter.c -Reversed (or previously applied) patch detected! Skipping patch. -3 out of 3 hunks ignored -- saving rejects to file pappl/job-filter.c.rej diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-finishings-followup.txt b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-finishings-followup.txt deleted file mode 100644 index 6c8819f..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/named-raster-finishings-followup.txt +++ /dev/null @@ -1,6 +0,0 @@ -patching file pappl/printer-driver.c -patching file pappl/printer-ipp.c -patching file pappl/job-process.c -patching file pappl/finishings-private.h -patching file pappl/system-loadsave.c -patching file pappl/printer-webif.c diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/ptouch-integrated-12mm.tar.gz b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/ptouch-integrated-12mm.tar.gz deleted file mode 100644 index 4a85373..0000000 Binary files a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/ptouch-integrated-12mm.tar.gz and /dev/null differ diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/usb-capture.c b/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/usb-capture.c deleted file mode 100644 index ce19a65..0000000 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/evidence/usb-capture.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test-only transparent recording; preserves libusb results and byte counts. */ -#define _GNU_SOURCE -#include -#include -#include -#include -#include -#include -static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; -int libusb_bulk_transfer(libusb_device_handle *h, unsigned char endpoint, - unsigned char *bytes, int length, int *actual, unsigned int timeout) -{ - int (*real)(libusb_device_handle *,unsigned char,unsigned char *,int,int *,unsigned int); - real=dlsym(RTLD_NEXT,"libusb_bulk_transfer"); - if (!real) abort(); - int rc=real(h,endpoint,bytes,length,actual,timeout); - int count=actual?*actual:0; - struct timespec now;clock_gettime(CLOCK_MONOTONIC,&now); - pthread_mutex_lock(&lock); - FILE *log=fopen("/evidence/usb-io.jsonl","a"); - if(log){ - fprintf(log,"{\"t\":%ld.%09ld,\"ep\":%u,\"rc\":%d,\"requested\":%d,\"actual\":%d,\"hex\":\"",now.tv_sec,now.tv_nsec,endpoint,rc,length,count); - for(int i=0;i0){ - FILE *out=fopen("/evidence/usb-out.bin","ab"); - if(out){fwrite(bytes,1,count,out);fclose(out);} - } - pthread_mutex_unlock(&lock); - return rc; -} diff --git a/openspec/changes/archive/2026-10-13-simplify-print-server/validation.md b/openspec/changes/archive/2026-10-13-simplify-print-server/validation.md index 661715a..f8c3fa2 100644 --- a/openspec/changes/archive/2026-10-13-simplify-print-server/validation.md +++ b/openspec/changes/archive/2026-10-13-simplify-print-server/validation.md @@ -1,583 +1,43 @@ -# Current validation status - -[verified] All 42 tasks are complete. The three specifications are synced and -strict validation passes. The change was archived locally on 2026-10-13. - -The authorized 21-label integrated PT-2730 acceptance passed on 12 mm tape, -including idle/offline continuation, cassette change, truncated-input blocking, -and explicit recovery without replay. The earlier eight-label direct-protocol -24 mm gate also passed. Other supported widths retain software-only coverage. -The original deployed service was restored on its unchanged image. No further -printing or deployment is authorized. - -Claude's independent implementation review is retained in -[evidence/claude-implementation-review.txt](evidence/claude-implementation-review.txt). -The physical session's requests, fixtures, logs, USB capture, and status packets -are preserved in [evidence/ptouch-integrated-12mm.tar.gz](evidence/ptouch-integrated-12mm.tar.gz), -without compiled tools or the candidate container image. Entries below record -historical checkpoints; their pending-task language describes that checkpoint, -not the current physical acceptance status. Final review fixes and their fresh -software verification are recorded at the end before archival. - -# Validation history - -Work remains on `refactor/simplify-print-server`. No commits were pushed and -the deployed image has not been replaced. Initial software validation had no USB -access; the subsequently approved eight-label gate preparation is recorded below. - -## Verified foundation - -- Explicit core-only builds run six CTest suites without PAPPL discovery. - Full builds require PAPPL, libusb, libpng, and Python; missing dependencies - fail configuration instead of silently omitting the app or capture tests. -- Both PR and main CI run the deploy build stage before publication. A temporary - deliberately failing CTest stopped the build before application installation - and runtime-image creation. -- Fake USB enumeration covers zero, one, and two matching devices, unsupported - devices, changing USB nodes, and claim failures. Configuration and driver - registration reject unknown or unsupported model identities. -- Real PAPPL socket connections and injected Brother presence exercise the - status transport guard without USB operations or opaque-data access. -- A real isolated server completed a PNG job and aborted a malformed PNG job, - with startup, job, completion, and error messages on stderr. Injected dbus and - Avahi startup failures stopped the entrypoint before starting the application. - -Checks ran in local containers with repository source mounted read-only, no USB -mount, and no external network during the test runs. The host has no CMake; -container builds provide both core and adapter coverage. Build/CI, device -selection, and logging changes received a read-only review; its probe URI -assignment finding was fixed and both build modes passed afterward. - -## Raster boundary correction - -The PAPPL patch and its independent IPP/socket fixture cover submitted geometry, -conversion, malformed headers, media conflicts, incomplete rows, and callback -failure cleanup. This fixture uses a minimal driver to isolate the dependency -boundary; it does not certify the Brother finishing sequence. - -The initial checkpoint passed nine CTest suites with 20 real IPP raster/image -cases. Expanded coverage now includes malformed stream termination as required -coverage. Patch application succeeds on pinned source and fails for duplicate -application or corrupted context. Tasks 2.1, 2.2, 2.3, and 2.5 are complete; -task 2.6 stays open until the finishing bridge is also documented. - -See [patch documentation](../../../../patches/README.md) for pinned dependencies, -security correction policy, scope, and removal conditions. - -## Approved scope extension - -The original regression appended one byte after a complete URF label and still -produced a completed job and successful end-job callback. CUPS 2.4.x reported a -short next header like clean EOF; its private compressed-input buffer prevented -a reliable PAPPL-side byte-count check. - -The user approved a bounded CUPS decoder correction that reports -partial-header failure through its existing error mechanism, plus PAPPL error -propagation before normal end-job. The proposal, design, and tasks include that -extension beyond PAPPL-only dependency patches. Both development and deploy -images now build Debian's security-patched CUPS source through the shared helper; -runtime checks show PAPPL and libcupsimage resolve the patched libcups. Required -regressions also cover negative input callbacks for PWG, URF, and uncompressed -raster. Task 2.4 is complete: the rebuilt deploy image and optimized Release -build pass all ten suites, and the final runtime IPP smoke and library/source -version checks pass. Captured Release flags retain -UNDEBUG after -DNDEBUG. - -## Geometry, PNG, and printer ownership - -- All five tape widths share canonical nominal/imageable geometry. Publication - and placement regressions cover their pixel windows, including 18 mm margins, - wrong tape, and unsafe requested margins before page output. -- Real IPP PNG/JPEG jobs cover explicit 50 mm media and PNG-only auto-length, - named media and media collections, nominal blank margins, oversized content, - orientation markers, DPI, length boundaries, copies, and standard scaling. - PNG is routed as image/png with no private advertised format. Malformed image - and transfer failures emit no subsequent raster or finishing command. -- Printer-owned extension data replaces the eight-slot global registry. Fake - status and transport tests cover cassette changes, unavailable/error states, - failed output confirmation, and healthy rejected/canceled followers. Clean - status or USB reopen cannot clear uncertain output; recovery is documented as - printer power-cycle followed by server restart. Physical recovery is pending. - -A read-only review of the completed state/status/geometry and PNG source plus -behavioral assertions found no actionable regressions. Pending finishing work -was explicitly excluded from that conclusion. - -## Test fixture correction - -An attempted HTTP connection shortcut to wake PAPPL at shutdown introduced a -detached-client lifetime hazard: joining the system thread does not join that -client before system deletion. The shortcut was removed from all three fixtures. -Tests retain PAPPL's ordinary shutdown polling. Test-only -UNDEBUG keeps assertion -checks and fixture setup active in Release; production compiler flags are -unchanged. All six core-only suites pass in Release with assertions enabled. -Final full image verification passes. Five repeated driver runs and five repeated -PNG runs also pass in Release with assertions enabled, taking 299.91 seconds; -`ctest-repeat-fixed.log` records this additional teardown check. - -One earlier default-build crash has no retained compiler flags or backtrace, so -its exact cause is unproven. Separately reproduced failures establish disabled -Release fixture assertions and intermittent heap corruption with the shutdown -shortcut. No useful sanitizer stack trace was obtained. - -At this earlier checkpoint, local evidence was retained under -`/tmp/ptouch-pappl-raster-results/`, `/tmp/ptouch-cups-raster-results/`, and -`/tmp/ptouch-driver-crash-results/`. -The final dependency/build evidence is `docker-deploy-build-final-verified.log`, -`release-ctest.log`, `release-driver-flags.make`, `release-raster-flags.make`, and -the `runtime-*-final.log` files in the CUPS results directory. Older failing logs -are retained as historical debugging evidence, not the final verification. - -## Hardware gate - -The test-only batch probe and 11 command-capture cases cover the proposed four -modes, first-label precut, deferred terminal command, and multi-batch transitions. -The user approved a reduced initial gate of eight labels on 24 mm tape: -chain:2 followed by each:2, and none:2 followed by end:2. Framed raster totals -223.52 mm, plus two initial leaders and feed margins. The earlier 27-label -proposal is superseded; the larger integrated acceptance matrix is separate. See -[probe instructions](../../../../tests/CUT-PROBE.md) for exact commands, expected -cuts, continuation checks, and failure stop conditions. - -The four-preset driver lifecycle and PT-2730 hardware gates remain pending. -Command captures and socket jobs do not establish physical cuts or leader waste. - -### Eight-label gate preparation - -[verified] On vault, the existing ptouch queue was idle with zero jobs. Its -server was temporarily stopped for a direct status-only query, then restored. -The query emitted no reset, raster, feed, or cut. The reply was type 00, phase 00, -error 0000, with cassette width 0 mm: -`8020423063300000000000000000000000000000000000000000000000000000`. -No physical labels were sent. Load/confirm the 24 mm cassette and power-cycle -before continuing. The probe, status log, and future captures are in -`vault:/tmp/ptouch-eight-label-gate.MDnnuO/`. - -The exact eight-label policy was separately captured without USB: both pairs -contain four labels, one initialization, one EJECT, no empty terminal command, -and the expected first/later autocut flags. The current compatible runtime -executes the transferred probe successfully. - -### Initial gate, stage 1: two chain-only labels - -[verified] After the operator reseated the cassette and power-cycled, a direct -status query reported clean 24 mm tape: -`8020423063300000000018010000000000000000000000000000000000000000`. -The original server was then stopped for the approved physical test. The probe -transferred exactly two chain-only labels (7,564 bytes); each received the -printing/completion/receiving-ready sequence with zero error bits. Captures show -180/216 rows, two FF commands, one initialization, and no EJECT. - -Evidence: `vault:/tmp/ptouch-eight-label-gate.MDnnuO/chain-2.{prn,log}` and -`status-after-power-cycle.log`. The server remains temporarily stopped to avoid -resetting the healthy held run during physical inspection. Two of eight labels -have been sent; leader count, cut separation, and held end await operator -confirmation. Task 5.1 remains unchecked, and the production finishing path is -unchanged. - -The operator reported `leader-cut-rectangle-cut-rectangle`, matching the -expected initial leader and cut between the two labels, with no trailing cut -reported. The following chain-and-final batch is being tested as continuation -of this same held run. - -### Initial gate, stage 2: two chain-and-final labels - -[verified] The continuation probe transferred 7,566 bytes and received clean -completion/receiving-ready notifications for both labels. Its capture contains -180/216 rows, intermediate FF, late chain-off and final EJECT, and no ESC @ -initialization. Evidence: `vault:/tmp/ptouch-eight-label-gate.MDnnuO/each-2.{prn,log}`. - -The operator reported `leader-cut-label-cut-label-cut`, then clarified that -"leader" meant the last rectangle held from the first batch, not blank scrap. -This confirms the prior held label was released, both new labels were cut, -the final batch cut succeeded, and no inter-batch leader was discarded. Four -of eight labels have been sent. The original server was restored after the -confirmed final cut. Both zero-error receiving-ready and the operator's final -cut confirmation establish a closed run for the next fresh initialization; -another manual power-cycle is unnecessary here. Task 5.1 remains unchecked -until the no-cut/final-only pair is physically verified. - -### Initial gate, stage 3: two no-cut labels - -[verified] The idle restored queue had zero jobs; a direct status query confirmed -clean 24 mm tape before the server yielded USB access. The no-cut probe then -transferred 7,564 bytes and received clean completion/receiving-ready for both -labels. Captures contain 180/216 rows, first-label autocut on, later-label autocut -off, two FF commands, and no EJECT. A fresh initialization followed the preceding -physically confirmed final cut, rather than resetting an unfinished run. - -Evidence: `vault:/tmp/ptouch-eight-label-gate.MDnnuO/none-2.{prn,log}` and -`status-before-none.log`. Six of eight labels have been sent. The original server -remains temporarily stopped during inspection of the held strip; physical -confirmation of one leader and an uncut two-label strip is pending. - -The operator reported `leader-label`, with the second rectangle potentially -inside the print head. No intermediate cut was reported; the joined strip will -be inspected fully when the following batch's precut releases it. - -### Initial gate, stage 4: two final-only labels - -[verified] The continuation probe transferred 7,566 bytes, with clean completion -and receiving-ready for both labels. Captures show 180/216 rows, first-label -autocut on and later-label autocut off, intermediate FF, late chain-off and final -EJECT, and no ESC @ initialization. Evidence: -`vault:/tmp/ptouch-eight-label-gate.MDnnuO/end-2.{prn,log}`. - -The operator reported `finished double label from last turn-cut-double label-cut`. -This confirms the no-cut batch was joined, its held end was released by the next -batch, the final-only batch was joined and cut free, and no new blank scrap was -reported between them. All eight authorized labels have been sent. The original -server is running again; its image/configuration was not replaced. - -The operator subsequently confirmed the no-cut batch's fresh-run blank leader -was cut off. The eight-label initial gate passes all four cutting policies, -mandatory first-label precut including none, late chain-off/final EJECT, and -healthy continued batches without discarded leaders. Task 5.1 is complete. -This evidence covers these bounded two-label direct-protocol cases on 24 mm -tape; the integrated PNG/raster, media/recovery, and other-width acceptance -matrix is still pending. Actual tape length was not measured. No further labels -are authorized by this completed eight-label gate. - -## Completed batch implementation - -The Release driver matrix passes against the initial finishing SDK with test -assertions enabled. Tasks 5.2, 5.5–5.9 are complete: real IPP all-mode PNG1/3, -unknown-count mixed-length PWG1/8 and URF8, enum/template/no-value selections, -16 run transitions, deferred output and failure cleanup, mandatory first precut, -PNG65/999 counting sinks, and truthful raster copies=1. The retired precut/width -settings have no production read or replacement knob; task 6.2 is complete. - -Evidence: `/tmp/ptouch-driver-production-results/task-evidence.md` and -`driver-matrix-pass.log`, plus the pure cutter/core/capture results. The previous -full-suite log includes a corrected raster-copies test expectation and a pending -PAPPL public-default setter regression; it is not the final all-suite result. - -An ordinary driverless CUPS queue exposed a separate media-advertisement gap: -it submits 12x50 mm with the printer-wide 53/53 minimum margins, exceeding that -tape's physical window. The driver correctly rejects it without page output. -Task 7.2 remains open while canonical per-size media metadata is corrected and -the conventional queue rerun. The synchronized default/persistence bridge, -deploy-image smoke, final all-suite checks, and integrated physical acceptance -remain open. - -## Final finishing and conventional CUPS checks - -[verified] Tasks 5.3/5.4 pass the standalone real-IPP PAPPL fixture and Release -production driver matrix. Defaults synchronize across enum/collection updates, -the public setter, and saved-state reload; malformed/contradictory defaults leave -the previous value unchanged. Legacy fixture behavior is retained. The refreshed -SDK has canonical media overrides with one 20-entry database and five fixed-width -variable-length ranges. The driver/PNG suites pass 2/2, including partial second -labels in all four modes without terminal EJECT. Evidence: -`/tmp/ptouch-driver-production-results/ctest-final.log` and -`/tmp/ptouch-final-deploy-build.log` (PAPPL fixture passes; the first full run's -media test omitted the explicit database request and was corrected). - -[verified] Task 7.2 passes against a conventional driverless CUPS queue in an -isolated, network-disabled container without USB. `lp` submits PNG, JPEG, and -two-label PDFs at 12x50 mm with captured 354-row labels. Enum 60 separates labels -and cuts the last; enum 63 leaves the PDF labels joined and cuts the last. Two -valid jobs remain queued while the printer socket refuses connections, then -both complete after the socket becomes available. A direct standard collection -request selects `ptouch-chain` and leaves the last label held. All-mode -one/three-copy PNG and unknown-count raster plus input/output failures are -covered by the production driver matrix. Evidence: -`/tmp/ptouch-cups-queue-offline.log`; reproducible fixture: -`scripts/check-cups.py`. Ordinary CUPS queue settings use -`lpoptions -p -o finishings=11` to override a generated/cached explicit -none default; server-side explicit none remains honored. - -The final runtime/full-suite run and image smoke are still pending. A separate -Web UI GET truncation is under diagnosis; the new legacy-form guard preserves -canonical defaults in source but that form regression is not yet verified. - -[verified] The final source/doc/spec review found two guide references and a fixture -retry mismatch; all are corrected. Task 7.4 is complete. The retired mechanisms -remain absent, the bounded patches are explained beside their source, and strict -OpenSpec validation passes both current items. The guide now describes metadata -lookup separately from the explicit supported-model gate. - -[verified] The Web UI failure reproduces in the pre-finishing application too: -PAPPL's optional NULL footer is passed to localization and crashes the renderer. -The app now initializes an empty footer through the existing public API. The -reproducible CUPS fixture passes actual GET/POST Printing Defaults checks with -both enum 11 and enum 63 unchanged after an unrelated print-quality edit, followed -by all ordinary CUPS/offline/collection cases. Evidence: -`/tmp/ptouch-cups-web-final2.log`; baseline crash trace: -`/tmp/ptouch-driver-production-results/web-baseline-app.log`. - -The final image smoke administers defaults through the existing container-local -`ptouch-app modify` CLI, which sends standard Set-Printer-Attributes; it preserves -PAPPL's existing restriction on unauthenticated remote administrative operations. - -## Software completion - -[verified] All authorized software tasks are complete, 39 of 42 overall. The final -runtime build includes the empty-footer fix and passes all 11 CTest suites in -120.19 seconds. The finished image smoke passes all four presets, explicit 50 mm -geometry, three-copy PNG batches, healthy continuation, synchronized omitted -printer defaults, and malformed-image abort without printer output. Evidence: -`/tmp/ptouch-final-deploy-build3.log` and `/tmp/ptouch-final-image-smoke2.log`. -The durable conventional CUPS/Web fixture passes too. No extra physical labels -were printed during these software checks. - -Tasks 3.7 and 7.3 require a separately authorized integrated physical acceptance -and uncertain-output recovery session; the completed eight-label approval does -not authorize further printing. Task 7.5 remains pending until those requirements -are fulfilled and the change can be synced/archived. No image has been deployed, -no commits/branches pushed, and no PR opened. Strict OpenSpec validation currently -passes; this is not archival or a waiver of the physical checks. - -The remaining physical session is concretely bounded in -`tests/HARDWARE-ACCEPTANCE.md`: 20 integrated acceptance labels plus one recovery -label, with an incomplete upload and blocked attempt issuing no print/feed command. -Printed content is about 54 cm before unmeasured leaders/feed. This is prepared only, -not authorized or run; it adds no physical evidence to the completed eight-label -gate. Approval must precede printer-host setup or additional output. - -## Integrated physical session authorization - -The operator answered "12mm in, ready" to the proposed bounded 21-label session. -This authorizes the documented matrix and explicit recovery, starting with 12 mm -tape, not permanent deployment or unbounded repeats. The existing `vault` service -is running the original image `sha256:8f0de486c933c9eca20a772be9cd647bf377b53114c8d20cdb5805336d2a8ec0`; -its standard `jobs` CLI reports no jobs, and `status` reports idle. Evidence will -be retained at `vault:/tmp/ptouch-integrated-acceptance.Nj73Wz/`. -No labels have yet been sent in this session. - -### Integrated stage 1: three chain-only PNG copies on 12 mm - -[verified] The candidate preflight reports clean 12 mm tape, canonical 63/71 margins, -and no jobs. One normal IPP PNG job with three copies completed successfully. -Transparent test-only USB recording contains 180/180/180 raster rows, mandatory -first precut and between-label autocut, one initialization, three FF commands, -zero EJECT, and clean completion/receiving-ready after each label. Three of 21 -complete labels have been sent. Physical separation, leader, and held-end -observations are pending. The original service remains temporarily stopped and -the isolated candidate remains running to preserve the healthy held run. -Evidence: `vault:/tmp/ptouch-integrated-acceptance.Nj73Wz/stage 1.log`, -`usb-io.jsonl`, and local `/tmp/ptouch-integrated-first/stage 1.print.prn`. - -The operator confirms stage 1: "leader and 2 labels with rectangles cut off, last -one held". This matches the mandatory fresh-run precut, two between-label cuts, -and the held final label. Stage1 passes physically; three of 21 labels are complete. -The candidate remains running across this idle gap. All remaining 12 mm fixtures -were independently verified through isolated IPP/socket captures before hardware -use, including exact PNG/PWG pixels and incomplete input after 60 rows with no -FF/EJECT and a blocked following job. No additional physical labels were sent. - -### Integrated offline queue check - -[verified] After the operator disconnected USB, job 2 (two chain-only PNG copies) -was accepted and waits for the device with zero impressions. PAPPL reports this -active waiting job as processing, so the fixture's initial pending-only assertion -was corrected using a read-only query; the job was not replayed. Job 3 (one -chain-and-final PNG) was accepted held for the next inspection. Captured USB -output remains exactly unchanged at 10326 bytes. Two valid jobs are queued while -the printer is disconnected; physical resumption is pending. No labels beyond -the first three have been printed. Evidence: `stage 2-queue.log`, -`stage 2-offline-check.log`, and `stage 3-queue.log` in the session directory. - -### Integrated stages 2/3: offline continuation and finishing - -[verified] After USB reconnection, the queued two-label chain job completed with -180/180 rows, two FF commands, zero EJECT and no initialization. The operator -reports the prior held label cut free, then one new label cut free and the second -held, with no new blank leader. Releasing the existing held one-label finishing -job then produced 180 rows, late chain-off and EJECT, again without initialization. -The operator confirms the prior label was released and the new label cut free. -Both queued jobs resumed without replay or a discarded leader. The idle gap -between stage 1 and stage 2 was about an hour. Six of 21 labels are complete and -the run is physically confirmed closed. Captures and job completions are retained -in `stage 2-completed.log`, `stage 3-completed.log`, and `usb-out.bin`. - -The operator confirms stage 3: prior held label released, one new label printed -and cut free. Both physically inspected offline/continued jobs pass. A concrete -24 mm media-col request while 12 mm is loaded then aborted with "Page geometry does -not match loaded 12 mm tape". Its capture contains only two status requests and -no initialization, raster, FF or EJECT. The fixture was not replayed. The candidate -remains healthy after the rejection; the next counted stage is the two-label -no-cut batch. Evidence: `wrong-tape.log` and its captured output boundary. - -### Integrated stage 4: two no-cut PNG copies - -[verified] The two-copy enum-none job completed with 180/180 rows, first-label -precut enabled and later autocut disabled, two FF commands, zero EJECT and one -fresh initialization after the preceding confirmed final cut. Eight of 21 -complete labels have been sent. Physical joined-strip/leader observations are -pending. The candidate stays running with its final strip held. -Evidence: `stage 4.log`, `stage 4-offset`, and `usb-out.bin`. - -The operator confirms stage 4: "leader cut off, then 2 labels, both held". -The joined two-label strip remains attached, matching no internal or terminal -cut. Stage 4 passes physically. The following no-cut batch is submitted as a -healthy continuation, with no server restart or reset. - -### Integrated stage 5: second no-cut batch - -[verified] The second two-copy enum-none job completed with 180/180 rows, first -precut enabled, later autocut disabled, two FF commands, zero EJECT, and no -initialization. Ten of 21 complete labels have been sent. The operator reports -"leader cut off, next 2 labels held"; clarification is pending whether "leader" -means the previous joined two-label strip, rather than new blank scrap. -The healthy run remains held; no following batch has yet been submitted. -Evidence: `stage 5.log`, `stage 5-offset`, and `usb-out.bin`. - -The operator clarifies stage 5's "leader" was the previous 2-label strip. -This confirms separate joined strips across consecutive enum-none batches, -mandatory batch-boundary precut, and no discarded blank leader. Stage 5 passes -physically, with ten of 21 labels complete. The one-label final-only continuation -is now submitted to release the held strip and close the run. - -### Integrated stage 6: final-only continuation - -[verified] The one-label enum 63 job completed with 180 rows, late chain-off/EJECT, -mandatory first precut, and no initialization or empty terminal command. The -operator reports the prior two-label strip released and the new label printed -and cut free. The none/none/final-only sequence passes physically without a new -blank leader between healthy batches. Eleven of 21 complete labels are sent; -the run is confirmed closed. Evidence: `stage6.log` and its command capture. - -### Integrated stage 7: three chain-and-final PNG copies - -[verified] Three-copy enum 60 PNG job completed with 180/180/180 rows, mandatory -initial precut and internal cutting, FF/FF/late-chain-off-EJECT, one fresh -initialization, and no empty terminal command. The operator confirms one leader -and three labels cut free. Fourteen of 21 complete labels are sent; the run is -confirmed closed. Evidence: `stage7.log` and the stage 7 command boundary. - -### Integrated stage 8: unknown-count three-label raster - -[verified] One standard PWG job with optional total-page count 0 completed with -180/216/180 rows, FF/FF/late-chain-off-EJECT, one fresh initialization, and no -empty terminal command. The operator confirms three labels, all cut free. -Seventeen of 21 complete labels are sent; the run is confirmed closed. Physical -length/orientation marker details still require inspection. Evidence: -`stage8.log`, its output boundary, and the validated `raster-3.pwg` fixture. - -### Integrated stage 9: three-copy final-only strip - -[verified] The landscape PNG job completed three 180-row labels, FF/FF/late-chain-off -EJECT, first autocut enabled and later cuts disabled, one fresh initialization, -and no empty terminal command. The operator confirms one leader and a joined -three-label strip cut free at the end. Twenty of 21 complete labels are sent; -the run is confirmed closed. Evidence: `stage9.log` and its capture boundary. - -The stage 8 raster test client timed out after 10 seconds because streaming -Print-Job responds after physical printing. No job was replayed. A read-only -Get-Job-Attributes for its existing job 9 confirms completed state 9 and three -impressions; server logs and the 576-row capture agree. Subsequent physical -streaming checks use a 45-second client timeout. This is a test-timeout correction, -not a relaxed completion/status requirement. Evidence: `stage8-confirm.log`. - -### Integrated uncertain-output blocking - -[verified] The authorized incomplete single-page PWG upload aborted after 60 raster -rows with no FF/EJECT, so no complete label was printed. A status-only probe on a -fresh USB connection reports clean 12 mm tape and error 0000/phase 00. The following -valid marked PNG still aborts with "Output uncertain: power-cycle the printer, -then restart the server before resubmitting", and its capture has zero setup, -raster, feed or cut. Clean status and USB reopen did not clear the latch. Twenty -of 21 complete labels remain printed; explicit power-cycle/restart and the single -marked recovery label are pending. Evidence: `incomplete.log`, -`status-while-uncertain.log`, `blocked.log`, and corresponding capture boundaries. - -The operator replies "ready" after the explicit printer power-cycle instruction. -Only the isolated candidate server is being restarted; failed jobs are not -resubmitted automatically. The final marked recovery label is submitted explicitly -after clean 12 mm/no-jobs preflight. Physical absence of ghost output and final -marker/geometry inspection remain pending operator confirmation. - -### Integrated stage 10: explicit recovery label - -[verified] After the operator's power-cycle and the candidate-only restart, -preflight reports idle, zero jobs, clean 12 mm tape and canonical margins. The -explicitly resubmitted marked recovery label completes with 180 rows, one fresh -initialization and one late-chain-off EJECT. No additional raster image or print -command is emitted. All 21 authorized complete labels have now been sent; the -incomplete/blocked trials emitted no FF/EJECT and no complete label. Physical -absence of ghost output and final marker inspection are pending confirmation. -The original deployed image/configuration remains unchanged; its service is -still temporarily stopped until recovery/closed-run inspection is confirmed. -Evidence: `recovery-preflight.log`, `stage10.log`, and the final capture boundary. - -The operator confirms the recovery output: "leader and one label cut off". -No additional fragment or replay is reported, matching the single 180-row capture -and completed recovery job. Physical power-cycle followed by server restart and -explicit resubmission passes. README recovery/job-inspection guidance and -ADR-0002/0007 were reviewed; README now supplies the concrete jobs/logs/status -commands and distinguishes failed-job inspection from queue persistence. - -[verified] The temporary candidate was stopped and removed after this physically -confirmed final cut. The original `ptouch` service is restored, running, and idle -on the unchanged image `sha256:8f0de486c933c9eca20a772be9cd647bf377b53114c8d20cdb5805336d2a8ec0`. -Its queue has no jobs. All 21 complete labels and the bounded negative trials are -finished. Final physical geometry/orientation marker confirmation remains open -before task 7.3 and archival can close. No further printing is authorized. - -The operator's final layout confirmation is "all good": complete rectangle -outlines, the longer middle raster label, and upright text on the joined strip. -All 21 physical labels and the bounded negative/recovery trials pass on 12 mm tape. -Combined with the earlier approved eight-label 24 mm protocol gate and five-width -software captures, this satisfies the recorded physical acceptance scope; no -hardware claims are made for 6/9/18 mm tape. The original service is restored. -The user subsequently requested Claude review of the implementation before final -sync/archive; no additional printing, publishing or deployment is authorized. - - -## Final implementation review fixes, 2026-10-13 - -[verified] Claude identified named-only media geometry, busy-status publication, -and stale documentation. Its complete review is retained under evidence/. -Named-only collection media now preserves a PNG's 50 mm page and rejects conflicting -raster dimensions before page output, matching PAPPL's size-name precedence. -The new raster reproduction failed on the previous SDK and passes 47 IPP jobs plus -three negative-I/O cases on the corrected one. Patch application passes with -fuzz 0, the finishing patch still applies afterward, and duplicate/corrupt-context -applications fail. The production PNG fixture proves 354 rows for 50 mm and zero -output for too-short or wrong-tape named media. - -[verified] Idle status no longer publishes recovery/offline during active printing; -the NULL-open branch rechecks processing to distinguish scheduling from claim -failure. A real scheduled-job regression preserves media confirmation and reasons -without extra status reads. Existing idle unclaimable-USB rejection still passes. -The focused driver and PNG suites pass 2/2 in 29.51 s under Release with no warnings. - -[verified] The missing ordinary CUPS cases are now included in scripts/check-cups.py. -Two copies of the two-label PDF produce four 354-row labels. CUPS's Custom.12x40mm -submits 1199 × 3986 hundredths of a millimeter and explicit 297/297 margins; it takes the maximum margins -across tapes and flattens per-width custom ranges into one PPD custom size. -The server now advertises only ±0.01 mm width tolerance around each nominal tape, -retains submitted dimensions and explicit margins, and keeps the physical window -unchanged. All five widths accept ±0.01 mm and reject ±0.02 mm with fidelity enabled. A fitting -42-dot custom PNG produces 282 rows; the original 76-dot PNG fails with the correct -42-dot limit and zero output. Exact standard media-col 1200 × 4000 with the actual -63/71 tape margins prints the 76-dot design in 283 rows. No hidden margin replacement, -resizing, or private client protocol was added. This documents the remaining -CUPS PPD limitation rather than claiming full-width arbitrary Custom designs work. - -[verified] The conventional queue also passes PNG/JPEG, registered 60/63, offline -queue/resume, chain collection, and existing Web-default preservation cases. -The final runtime build passes all 11 CTest suites in 120.50 s. Its isolated image -smoke passes four presets, synchronized defaults, explicit geometry, copies, -and malformed-input failure. Read-only focused review finds no actionable defect -in the fixes. The redundant CI target-build invocation was removed; runtime -building still requires the complete test stage before smoke and publication. -The test-only batch probe is retained as the reproducible protocol-gate fixture; -it is not a second production lifecycle or public protocol. - -[verified] Current documentation records both passed physical sessions and keeps -historical checkpoints explicitly marked as history. Raw physical evidence, -operator observations, regressions, CUPS integration, full build, and smoke -results are retained under evidence/ with a SHA-256 manifest. No further labels -were printed, no commits or branches were pushed, and production was not changed. -Only specification sync, strict validation, and local archival remain. - - -## Local archival, 2026-10-13 - -[verified] The batch-printing, label-rendering, and printer-device specifications -were synced and compared against every delta requirement. Existing batch -purpose and scenario names were preserved. Strict validation passed all three -specifications and the active change before archival. All 42 tasks were checked -and verified through the CLI; archival completed locally with specs already -synced. Publishing and production deployment remain separate authorized actions. +# Validation summary + +The implementation was merged as commit 0603578 after all 42 tasks were completed, +specifications synced, and simplify-print-server archived on 2026-10-13. + +## Software + +- The full runtime build passed all 11 CTest suites in 120.50 s, including core, + adapter, dependency-boundary, USB, PNG, and command-capture checks. +- Runtime IPP/socket smoke passed all four finishing presets, synchronized + defaults, explicit geometry, image copies, and malformed-input rejection. +- A conventional driverless CUPS queue passed PNG/JPEG, multi-label PDFs and PDF + copies, offline queuing/resumption, registered finishings, collection + submission, and existing Web-default preservation. +- Review regressions verified named-only media length and raster contradictions, + active-job status polling, bounded custom-width rounding, and rejection of + oversized custom designs without replacing explicit margins or resizing. +- Strict OpenSpec validation passed. The + [PR checks](https://github.com/pfa230/ptouch-print-server/actions/runs/38357815011) + and [main build/publication](https://github.com/pfa230/ptouch-print-server/actions/runs/38358284589) + also passed. + +## Physical PT-2730 acceptance + +- The eight-label direct-protocol gate on 24 mm tape passed chain:2→each:2 and + none:2→end:2, including release of held ends without discarded inter-batch leaders. +- The separately authorized 21-label integrated session on 12 mm tape passed + chain:3→chain:2 across idle/offline→each:1, none:2→none:2→end:1, each PNG:3, + each unknown-count raster:3, end PNG:3, and one recovery label. +- The operator confirmed separation, joined strips, final cuts, complete rectangle + borders, the longer middle raster label, orientation, and no ghost output. +- Wrong tape emitted no raster. Truncated input withheld normal finishing and + blocked subsequent output until printer power-cycle followed by server restart; + recovery printed only the explicitly resubmitted label. +- Physical coverage is 12 mm integrated and 24 mm direct protocol. 6/9/18 mm retain + software-only coverage. + +## Deployment + +The published 0603578 image was deployed to vault's ptouch service on 2026-10-13. +Live IPP capability/readiness and empty-queue checks passed; the public route +returned HTTP 200. USB/network settings were preserved and the previous image +retained for rollback. Deployment verification printed no labels. diff --git a/openspec/config.yaml b/openspec/config.yaml index 51437e3..119b750 100644 --- a/openspec/config.yaml +++ b/openspec/config.yaml @@ -1,7 +1,8 @@ schema: spec-driven context: | - Read README.md and docs/adr/README.md for current behavior and design decisions; + Read README.md and openspec/specs/server-architecture/spec.md for current behavior + and architectural constraints; spikes/FINDINGS.md is historical and some conclusions have been superseded. Only the Brother PT-2730 is hardware-certified. Other recognized USB models must not be described as print-supported without protocol work and validation. diff --git a/openspec/specs/server-architecture/spec.md b/openspec/specs/server-architecture/spec.md new file mode 100644 index 0000000..ab01f37 --- /dev/null +++ b/openspec/specs/server-architecture/spec.md @@ -0,0 +1,154 @@ +# server-architecture Specification + +## Purpose + +Keep the Brother P-touch server small and predictable while exposing ordinary CUPS-compatible IPP printing, truthful physical media, and explicit batch finishing. + +Detailed behavior is defined by [label-rendering](../label-rendering/spec.md), +[batch-printing](../batch-printing/spec.md), and [printer-device](../printer-device/spec.md). + +## Requirements + +### Requirement: Public IPP printer application + +The server SHALL use a dedicated PAPPL application to expose one driverless IPP queue. PAPPL SHALL own job scheduling, standard image placement, and public IPP handling. Printer-specific transport, geometry, and finishing SHALL remain inside the application without requiring clients to implement a private printing protocol. + +#### Scenario: Ordinary client + +- **WHEN** a CUPS or IPP client discovers the printer and submits a supported standard format +- **THEN** it uses the advertised IPP capabilities without a Brother-specific client transport + +### Requirement: Pure protocol core + +Command builders, device/tape tables, raster packing, status parsing, and the two-flag cut policy SHALL remain pure C without PAPPL, libusb, or I/O. PAPPL callbacks, PNG decoding, and device access SHALL remain in the adapter. The core SHALL support hardware-free builds and tests; it SHALL NOT plan jobs through copy-sized operation arrays. + +#### Scenario: Core-only build + +- **WHEN** the project is built with PTOUCH_CORE_ONLY enabled +- **THEN** protocol and cut-policy tests run without printer dependencies or hardware + +### Requirement: Supported and unambiguous hardware + +Only the implemented PT-2730 path SHALL receive print output. Missing or empty `PTOUCH_MODEL` SHALL select PT-2730; unknown or recognized unsupported models SHALL fail configuration. The stable model URI SHALL resolve by VID/PID, accepting exactly one matching device and blocking zero or multiple matches without selecting by enumeration order. + +#### Scenario: Duplicate supported printers + +- **WHEN** two PT-2730 devices match the configured model +- **THEN** the existing queue reports ambiguity and neither device is claimed for printing + +### Requirement: Private USB transport and fresh discovery + +The adapter SHALL use the internal `ptouch://` scheme with bounded libusb transfers and a fresh context per discovery/open operation. It SHALL avoid the built-in USB device-ID probe that hangs on PT-2730. Status readers SHALL validate the owning printer URI before accessing USB connection data; attached USB hardware SHALL NOT change another transport's type. + +#### Scenario: Replug and transport isolation + +- **WHEN** the sole printer returns with a different USB node while a socket test transport also exists +- **THEN** the stable USB queue can recover, and socket status never invokes USB-specific operations + +### Requirement: Canonical physical media + +Media SHALL describe nominal 6/9/12/18/24 mm tape widths with 32/52/76/120/128 imageable dots at 180 dpi. One geometry definition SHALL govern publication, validation, and extraction. Per-tape margins MAY be asymmetric to reproduce the canonical window. Custom width ranges SHALL allow only ±0.01 mm rounding; submitted dimensions and margins SHALL remain authoritative. + +#### Scenario: Standard media selection + +- **WHEN** a client selects a named preset or a supported custom length +- **THEN** the published media describes its physical tape and margins without enlarging the loaded tape's imageable window + +### Requirement: Strict physical rendering + +Wrong-tape page geometry SHALL fail before page setup or raster output. At print-scaling none, PNG content SHALL fit the selected page and physical window; a nominal-width canvas SHALL be accepted only when its non-imageable margins are blank. Explicit standard scaling SHALL use PAPPL placement. JPEG SHALL retain its standard selected/default media path. + +#### Scenario: Content exceeds selected margins + +- **WHEN** a 1:1 PNG exceeds the selected printable area, including larger explicit custom margins +- **THEN** the job fails visibly without automatic cropping, shrinking, or replacing those margins + +### Requirement: Public PNG route and explicit length + +PNG SHALL use the public image/png format, an owned filter and matching printfile callback, libpng decoding, and PAPPL's image renderer. Submitted named media, media-col.media-size-name, or concrete y-dimension SHALL preserve explicit length. Only omitted length SHALL derive from the oriented image within 5–300 mm; source-only or margin-only collections SHALL retain this convenience. + +#### Scenario: Named collection length + +- **WHEN** a 180-pixel PNG at 180 dpi selects 50 mm through media-col.media-size-name +- **THEN** its page remains 50 mm rather than receiving the image-derived 25.4 mm length + +### Requirement: PNG orientation and resolution + +PNG SHALL preserve explicit orientation and square DPI; missing DPI SHALL mean 180 dpi and non-square DPI SHALL fail. Automatic orientation SHALL choose portrait for tall/square sources and reverse-landscape for wide sources before deriving length. Complete decoding and 1:1 preflight SHALL precede page output, and all length-derived header fields SHALL change together. + +#### Scenario: Wide source without explicit orientation + +- **WHEN** a wide PNG omits orientation and page length +- **THEN** it rotates 90 degrees clockwise and derives physical length from the resulting along-tape axis + +### Requirement: Stable offline queue and media confirmation + +The queue SHALL exist while hardware is absent, accept queued jobs, and resume after supported hardware returns. Presence alone SHALL NOT imply readiness. Live media SHALL be confirmed before PNG geometry is constructed, and idle polling SHALL share fault publication with job-owned refresh. Busy processing SHALL NOT be reported offline merely because the job owns the device. + +#### Scenario: Printer returns with another cassette + +- **WHEN** a PNG queued while offline resumes with supported tape +- **THEN** geometry uses confirmed loaded media rather than the offline placeholder + +### Requirement: Explicit batch policies + +One IPP job SHALL define one batch. Standard finishings SHALL select chain-and-final (60, alias 11), final-only (63), or no label cuts (3 or collection no-value); `finishings-col` template `ptouch-chain` SHALL select chain-only. Every nonempty batch SHALL have mandatory initial precut. Omitted selection SHALL use the synchronized printer default, initially trim (11), as specified in batch-printing. + +#### Scenario: Chain-only batch + +- **WHEN** a client requests ptouch-chain through finishings-col +- **THEN** labels are cut apart and the last end remains held for continuation + +### Requirement: Constant-size deferred batch lifecycle + +Batch state SHALL contain the resolved policy, actual-label progress, one pending print command, and failure state without an operation array or extra raster buffer. PNG copies SHALL expand once; raster labels SHALL need no declared total. A next valid label SHALL release the prior complete label with FF and confirm readiness. Successful input completion SHALL release the final label with FF for continuation or late chain-off/EJECT for finishing. + +#### Scenario: Unknown label count + +- **WHEN** a valid streamed raster batch omits its total count +- **THEN** actual complete labels determine boundaries and successful end-of-input determines finalization + +### Requirement: Healthy continuation + +The queue SHALL own closed, healthy-open, and uncertain run state with media confirmation. Only a known closed run SHALL be initialized. Healthy unfinished runs SHALL survive idle gaps; subsequent mandatory precut SHALL separate the held end without another discarded leader. Rejected or canceled followers that sent no page output SHALL preserve the preceding healthy run. + +#### Scenario: Consecutive no-cut batches + +- **WHEN** a healthy none batch is followed after an idle gap by another none batch +- **THEN** each batch remains a joined strip, separated by the later precut without discarded inter-batch leader waste + +### Requirement: Conservative output recovery + +Ambiguous transfer, decode, or readiness failure SHALL block later output without automatic reset, feed, cut, or replay. Cleanup SHALL be idempotent and emit no pending finalization. Recovery SHALL require printer power-cycle followed by server restart and explicit resubmission after inspection. Clean status or USB reopen SHALL NOT clear uncertainty; process-local queue/run persistence SHALL NOT be promised. + +#### Scenario: Incomplete label + +- **WHEN** raster input ends partway through a label that has already reached the printer +- **THEN** the job aborts without finishing that label and subsequent output remains blocked pending explicit recovery + +### Requirement: Bounded dependency corrections + +Dependency changes SHALL stay pinned, narrow, and documented in [patches/README.md](../../../patches/README.md). They SHALL preserve original IPP finishing selections, synchronized representable defaults, truthful media, and raster geometry/error handling through existing PAPPL/CUPS APIs. They SHALL NOT introduce another spooler, raster parser, or generic finishing engine. + +#### Scenario: Dependency update + +- **WHEN** a pinned dependency is updated +- **THEN** the documented correction and removal criteria are reviewed against ordinary IPP and raster regressions + +### Requirement: Container hotplug and addressing + +Container deployment SHALL bind-mount `/dev/bus/usb` and allow USB character devices with `c 189:* rwm` so newly numbered nodes remain accessible. dbus/Avahi SHALL receive a nofile limit of 65536. Reverse proxies SHALL forward a Host accepted by PAPPL; shared-network clients MAY use a stable alias. Discovery, TLS termination, and network exposure SHALL remain deployment choices. + +#### Scenario: Hotplug behind a proxy + +- **WHEN** the printer is replugged in a container reached through a reverse proxy +- **THEN** the new USB node is accessible and the proxy supplies an accepted Host without changing the print contract + +### Requirement: GPL license and attribution + +The project SHALL retain GPL-3.0-only licensing and attribution for the Brother protocol, device/tape tables, and cutter-derived work from ptouch-print and its macOS fork. LICENSE, README.md, and THIRD_PARTY_NOTICES.md SHALL preserve the licensing and upstream credit appropriate to their roles. + +#### Scenario: Distribution + +- **WHEN** the server's source or container is distributed +- **THEN** its GPL license and upstream attribution remain available diff --git a/spikes/FINDINGS.md b/spikes/FINDINGS.md index fb41561..df0fe5a 100644 --- a/spikes/FINDINGS.md +++ b/spikes/FINDINGS.md @@ -1,10 +1,9 @@ # M0 Spike Findings > **Historical spike log.** This records what was learned during the M0/M2 probes and retains technical findings. -> Some conclusions here were later superseded by the shipped implementation - notably that chained -> multi-label printing was "not achievable", which cross-job chaining (ADR-0008) solved, and the -> open question about the production USB mapping, answered in ADR-0009. For current behaviour and -> the reasoning behind it, see [`docs/adr/`](../docs/adr/README.md). +> Some conclusions were superseded by the shipped implementation, including chained multi-label +> printing and production USB hotplug. Current behavior and architectural constraints are in the +> [server specification](../openspec/specs/server-architecture/spec.md). Running log; each probe appends. Host: a Linux container host, PT-2730 `04f9:2041` on `/dev/bus/usb//`. Spike image: `ptouch-spike` (Debian bookworm + PAPPL 1.4.11). diff --git a/tests/CUT-PROBE.md b/tests/CUT-PROBE.md index c478abc..a40de2d 100644 --- a/tests/CUT-PROBE.md +++ b/tests/CUT-PROBE.md @@ -173,8 +173,8 @@ The user confirmed these physical results for the approved initial gate: All eight labels received clean completion and receiving-ready notifications. Captures contain the expected FF/EJECT commands and no initialization between healthy continued batches. The deployed server image was not replaced, and the -original server was restored afterward. Evidence lives in -`vault:/tmp/ptouch-eight-label-gate.MDnnuO/` and the OpenSpec change's validation.md. +original server was restored afterward. The acceptance summary is in the +OpenSpec change's validation.md. The separately authorized 21-label integrated acceptance subsequently passed on 12 mm tape, including PNG/raster batches and recovery. See HARDWARE-ACCEPTANCE.md and the change's validation.md. Software-only geometry diff --git a/tests/FINISHINGS.md b/tests/FINISHINGS.md index b2a2b23..d674578 100644 --- a/tests/FINISHINGS.md +++ b/tests/FINISHINGS.md @@ -57,7 +57,7 @@ tape: chain:2 then each:2, and none:2 then end:2, with an observation/idle gap a each batch boundary. The operator confirmed initial leaders cut off, expected internal/final cuts, held ends released by the following batch, and no discarded inter-batch leaders. See CUT-PROBE.md for exact commands and the change's -validation.md for status packets, captures, and operator observations. +validation.md for the acceptance summary. The separately authorized integrated acceptance also passed all 21 labels on 12 mm tape, including PNG/raster batches, cassette change, offline continuation,