fix: use released Printing for Echo #13

Merged
james.maes merged 1 commits from james.maes/fix-echo-released-printing AGit into develop 2026-11-04 15:51:06 +00:00
7 changed files with 44 additions and 25 deletions

No files matched your search

+14 -7
View File
@@ -1,12 +1,19 @@
## November 3 — snapshot publication preparation (proposed branch `ci/enable-scanner-snapshots`)
## November 4 — current checkpoint
- PR 7 merged as `795a0a2`. Exact feature head `090e3c1`: CI 3603 PASS (2m09s). Post-merge run 3607: PASS (2m08s), but the snapshot flag was disabled, so nothing was captured (confirmed by the shared CI owner).
- This branch changes only `publish.snapshot` to true in `.qqq-ci.yml` to enable development snapshots on `develop`. It is not a stable release or a `main` promotion. Still needed: owner enrollment reconciliation, normal CI and merge, and actual artifact receipt.
- The local runtime on 57832 still runs the earlier qualified private core and has not been upgraded to RC.21.
- Generation copies, signed `aac68907`, is acknowledged by the owner and adoption is underway. There is no canonical artifact yet.
- Physical checks (operator remote), native Authentik, and production Android signing remain deferred. The proven RC.21 evidence (377 tests plus 15 admin-browser E2E) still stands. Source publication does not equal 1.0.
This section supersedes the historical checkpoints below. The operator reports that the manual tests all passed. Release packaging and publication remain incomplete.
## November 3 — current checkpoint (supersedes everything below)
- **Scanner publication complete:** PR 12 merged normally as `286e2e0`; run 3645 succeeded. Anonymous Central readback verified the JAR, POM, sources and Javadocs for `com.kingsrook.qbits:qbit-mobile-scanners:0.1.0-20261103.233448-3645`. All 37 published Java source files match the reviewed source.
- **Android publication complete:** PRs 10 and 8 merged into `main` at `0ae2101`. Main lifecycle 3634 succeeded; the shared CI owner's independent registry readback matched all ten primary files, including both AARs, at timestamp `0.1.1-20261103.232145-3634`. This publishes development libraries, not a signed production APK.
- **Local runtime updated:** the server on port 57832 now uses public QQQ `4.1.0-RC.21` and released Printing `1.0.0`. The existing database and settings were retained. A fresh identity and health check confirms API `1.10.0`, mobile extension `1.5.0` and printing extension `2.3.0`. The normal TC22 remains signed in, shows Echo setup with Copies 1 and Connected; the existing Print Agent shows Connected and ready against this server. No physical print was submitted during this update.
- **Exact updated cohort qualified:** 198 tests passed with no failures, errors or skips and Checkstyle passed. All 94 scanner Java inputs match reviewed source; all five QQQ backend dependencies resolve to public RC.21. Released Printing removes the three private QQQ transitive dependencies from the prior gate. Other document/files components still use qualified local owner artifacts.
- **Echo Printing default implemented and reviewed:** both Echo POMs now select released Printing `1.0.0`; the dependency comment and READMEs match. Both modules pass Maven validation and Checkstyle. The version pin is the only semantic POM change, and all 94 Java files match the prior 198-test qualification. Remaining owner package versions are unchanged; normal source review/publication is next.
- **Remaining source/publication work:** commit, review and publish the two Echo POM defaults for Printing `1.0.0` (prepared above), and obtain the document owner's coherent standalone Generation/bridges/Record Files/Scripting artifacts, including copies. The owner's website image pipeline does not publish these Maven artifacts. The owner verified that the local standalone directories are not Git repositories and have no release workflows; reviewed code lives in host candidate `b6fb238`, using private coordinates. The remaining work is source extraction with provenance, public dependency pins and standard standalone release wiring. No new domain feature is required for this publication step. Claude access is restored, and the dependency owner's actual Claude standalone packaging is active as of November 4; no claim of completion is made.
- **Manual acceptance passed, operator reported:** on November 4 the user stated, "i have ran the manual tests - it all works". Accept this as completion of the outstanding manual acceptance group and do not request the same checks again. See [TC22 acceptance](TC22-ACCEPTANCE.md). This is the operator's report, not a newly instrumented run or separate per-case evidence.
- **Remaining scope/distribution decisions:** Echo's documented scanner profile still explicitly refuses unsupported GS1/ECI/binary variants; the manual pass does not add encoder support. Production Android signing and distribution remain deferred by the user.
Evidence: local `qqq-scanner-published-3645/anonymous-readback.json`, `qrun-android-3634-readback/registry-readback-proof.json`, `qqq-printing100-echo-gate-20261103/verified-summary.json`, and the runtime pointer `qqq-public-core-printing-runtime-current.txt` under the user's cache directory.
## November 3 — historical checkpoint
- **Server source:** `45f9cbddb14999d28add02dd9a37e4ce018e282e` is signed and pushed on Gitea PR 7 (earlier "uncommitted" statements below are historical). The five `qqq.version` POM pins to public **QQQ 4.1.0-RC.21** (root, demo, Echo, Echo demo, record-files) and the record-files POM test fix below are included in this verified dependency update.
- **Final RC.21 gate: PASS** (`C:/Users/james/.cache/qqq-rc21-copies-gate-076d059d8d0641d9a85874ec64008def/verified-summary.json`). 377 unique tests with zero failures, errors or skips and Checkstyle PASS: Generation 179 and Printing bridge 16 (`verify-recovery.log`); scanner 53, demo 8, mobile Record Files 18, Echo 68 and Echo demo 35 (`verify-consumers-junit-fixed.log`). Plus 15 real admin-browser E2E cases on public RC.21 (single, checked and query selection, first-N approve, revoke, end session, display name/description, location/online, screenshot widget). The three earlier MySQL network timeouts did not recur in the focused 31 or the full 179 runs; the original failure reports are retained.
+8
View File
@@ -2,6 +2,14 @@
This checklist records steps to run on physical hardware. A passing JVM test or APK build does not establish that a TC22 scan succeeded.
## Operator acceptance — November 4, 2026
**PASS — operator reported.** The user confirmed in the project conversation: "i have ran the manual tests - it all works". This closes the outstanding manual acceptance group for the installed local demo. The user did not supply separate per-case logs or output samples; this entry records their acceptance without inventing those artifacts. No repeat of the same manual checks is requested.
The last recorded installed configuration was the normal TC22 APK with SHA-256 `38A11155BF6A9C089A1EE6D9E44401E8FF39497B7150B51A85F1F916148BE60D`, connected to the local composed server on port 57832 with public QQQ RC.21 and Printing 1.0.0. This identifies our last deployment record, not a new device inspection at the time of the user's tests.
Release packaging/publication and the documented unsupported barcode profiles remain separate from this manual acceptance. Production signing and distribution remain deferred by the user. The procedures below are retained for future deployments and regressions.
## Start the server
From `qbit-mobile-scanners`, build and install the qbit, then build the demo:
+11 -8
View File
@@ -1,15 +1,18 @@
# QQQ Mobile Scanners TODO
Snapshot publication (November 3, proposed branch `ci/enable-scanner-snapshots`):
Current checkpoint (November 4; supersedes historical notes below):
- [x] PR 7 merged as `795a0a2`; feature `090e3c1` CI 3603 PASS (2m09s); post-merge 3607 PASS (2m08s) but snapshot flag was disabled, so no artifact.
- [x] Propose `publish.snapshot: true` only in `.qqq-ci.yml` (develop development snapshots; not a stable release or `main` promotion).
- [ ] Owner enrollment reconciliation; normal CI and merge of this change; actual snapshot artifact receipt.
- [ ] Local runtime 57832 is still the earlier qualified private core, not upgraded to RC.21.
- [ ] Generation copies `aac68907` is owner-acknowledged and adoption is underway; no canonical artifact yet.
- [ ] Physical checks, native Authentik and production Android signing stay deferred. Source publication does not equal 1.0.
- [x] Scanner PR 12 merged `286e2e0`; full run 3645 succeeded. Central snapshot `0.1.0-20261103.233448-3645` verified anonymously, including all 37 published Java source files.
- [x] Android PRs 10 and 8 merged into main `0ae2101`; full main lifecycle 3634 succeeded. Shared CI's independent registry readback matched all ten primary library files at `0.1.1-20261103.232145-3634`.
- [x] Qualify released Printing `1.0.0` with public QQQ RC.21: 198 tests pass, Checkstyle passes, all 94 scanner Java files match reviewed source, and no private QQQ backend artifacts remain in that cohort.
- [x] Adopt that cohort on local port 57832 while retaining the database/settings. Confirm API health, TC22 Echo setup/Copies 1/Connected and Print Agent Connected and ready after restart.
- [x] Adopt and review Printing `1.0.0` in both Echo POMs and matching READMEs. Both Maven validate/Checkstyle checks pass; 94 Java inputs match the 198-test qualification.
- [ ] Document owner: extract reviewed code from host candidate `b6fb238` with provenance, set public dependency pins and standard standalone release wiring, then publish coherent document/files/scripting Maven artifacts including Generation copies. The local standalone directories are not Git repositories and have no workflows; the website image pipeline does not publish these artifacts. Claude access is restored; the dependency owner's actual Claude standalone packaging is active as of November 4, not finished.
- [x] Outstanding manual acceptance group: user reported on November 4, "i have ran the manual tests - it all works". Recorded as operator acceptance in [TC22 acceptance](TC22-ACCEPTANCE.md); no duplicate manual checks requested. Separate per-case artifacts were not supplied.
- [ ] Resolve or explicitly scope the unsupported GS1/ECI/binary scanner profiles before claiming universal barcode reproduction.
- [ ] Production Android signing/distribution last, as requested. Development publication and demo availability are not production 1.0 acceptance.
Current checkpoint (November 3; supersedes the notes below where they differ):
Historical checkpoint (November 3):
- [x] Server `45f9cbd` is signed and pushed (Gitea PR 7). Android `f72b90d` is signed and pushed to the existing AGit PR 10 head and Gitea CI 3480 succeeded on it (pull requests #8 and #10 still open; not merged, not released). Updated normal APK installed without clearing data; fresh disposable TC22 Echo run passed 109/109 semantic requests (simulated inputs/printing).
- [x] Final RC.21 gate PASS: 377 unique tests (Generation 179, Printing bridge 16, scanner 53, demo 8, mobile Record Files 18, Echo 68, Echo demo 35), zero failures/errors/skips, Checkstyle PASS, plus 15 real admin-browser E2E on public RC.21. The earlier MySQL timeouts did not recur (focused 31, full 179). Evidence: `C:/Users/james/.cache/qqq-rc21-copies-gate-076d059d8d0641d9a85874ec64008def/verified-summary.json`.
+5 -5
View File
@@ -6,9 +6,9 @@ The source implements ordinary QQQ metadata and processes; no Echo-specific Andr
**Status.** The owner adapters and host composition are source-complete and pass `verify` (Checkstyle clean) against the qualified owner inputs described under Build and acceptance, and the [runnable demo](#runnable-demo) passes its tests, including a complete composed acceptance (current counts and progress: [session state](../../docs/SESSION-STATE.md)): an authenticated approved scanner, two scans, two retained originals and two accepted Printing jobs on one printer, an idempotent retry and leaving. That automated acceptance uses a controlled synthetic renderer and a simulated Printing queue.
The composed demo runs as one local server with a real Printing client, printer and 4x1 media, and a published Echo barcode document. A TC22 completed setup against it (printer, media and document, then Next) and Cancel then Leave. A separate, explicitly synthetic native HTTP event now completes the real render/retain/print pipeline: one `ECHO-HTTP-TEST-001` Code128 job reached `SPOOLED` with a Windows spooler job assigned, and its Echo process closed successfully. This is printer delivery evidence, not physical trigger, paper output or rescan confirmation. See the [delivery receipt](demo/docs/echo-delivery-acceptance.json). Public Maven publication and full production acceptance remain open.
The composed demo runs as one local server with a real Printing client, printer and 4x1 media, and a published Echo barcode document. A TC22 completed setup against it (printer, media and document, then Next) and Cancel then Leave. A separate, explicitly synthetic native HTTP event now completes the real render/retain/print pipeline: one `ECHO-HTTP-TEST-001` Code128 job reached `SPOOLED` with a Windows spooler job assigned, and its Echo process closed successfully. That synthetic event is printer delivery evidence only; the later manual TC22 trigger, paper output and rescan checks are operator-reported as all passing (November 4, group report without individual artifacts). See the [delivery receipt](demo/docs/echo-delivery-acceptance.json). Public Maven publication of the remaining owner qbits and production signing/distribution remain open.
The actual renderer's Code128 and leading-zero QR outputs now pass independent pixel decoding and 4x1 stock/fit checks. See the [rendering evidence and scannable test images](demo/docs/ECHO-RENDERER-ACCEPTANCE.md). This no-print check does not replace physical acceptance.
The actual renderer's Code128 and leading-zero QR outputs now pass independent pixel decoding and 4x1 stock/fit checks. See the [rendering evidence and scannable test images](demo/docs/ECHO-RENDERER-ACCEPTANCE.md). This no-print check is separate from the operator-reported physical acceptance.
## Host composition
@@ -44,15 +44,15 @@ From the repository root, use Java 21 and the included wrapper:
On Windows, run `mvnw.cmd -f examples/echo/pom.xml verify` from the repository root. From `examples/echo`, use `../../mvnw -f pom.xml verify` (Windows: `..\..\mvnw.cmd -f pom.xml verify`). Both forms use the checked-in wrapper; Checkstyle and resource paths resolve from the module directory.
This optional module is outside the root lifecycle. The POM's defaults are `qqq.version` 4.1.0-RC.21 (public), `mobile.version` and `generation.version` 0.1.0-SNAPSHOT, and `printing.version` 0.4.0-SNAPSHOT. The owner qbits (Generation and bridges, Printing, Collaboration, Record Files) are still qualified private inputs, not a fully public or released dependency cohort, so these snapshot defaults alone may not resolve or match what was verified. Copies per scan also needs the Generation copies change described above. Use a dedicated Maven repository and one coherent owner cohort; never install cross-chat snapshots over the shared cache. The source requires the narrow protected-process-identity API and current `MobileScannerActions.capture(input, appName)` API. These private artifacts are not published to a public Maven repository and are not a production handoff. The primary forge is Gitea; GitHub is a shadow/archive.
This optional module is outside the root lifecycle. The POM's defaults are `qqq.version` 4.1.0-RC.21 (public), `mobile.version` and `generation.version` 0.1.0-SNAPSHOT, and `printing.version` 1.0.0 (released Printing, qualified with public RC.21). The other owner qbits (Generation and bridges, Collaboration, Record Files, Scripting) are still qualified private inputs, not a fully public or released dependency cohort, so their snapshot defaults alone may not resolve or match what was verified. Copies per scan also needs the Generation copies change described above. Use a dedicated Maven repository and one coherent owner cohort; never install cross-chat snapshots over the shared cache. The source requires the narrow protected-process-identity API and current `MobileScannerActions.capture(input, appName)` API. The remaining private owner artifacts are not published to a public Maven repository and are not a production handoff. The primary forge is Gitea; GitHub is a shadow/archive.
Tests: core and HTTP-fixture tests (real QQQ process state, H2 persistence and the mobile QBit's approval and binding, with synthetic destination, layout and queue fixtures) and adapter tests (controlled owner facades for exact pins, receipts, lookup, media filtering, the published scene geometry and the absent-deployment refusals). They qualify orchestration, event identity, permission boundaries and adapter mapping, not render output or physical printing. The adapter tests do not run the renderer worker.
## Runnable demo
[`demo/`](demo/README.md) is a separate optional module that composes the real owners into a startable server (tested, Checkstyle clean). Its production `EchoDemo` keeps the owner's cold bridge, which defaults to the `runsc` Docker runtime and fails closed on Windows Docker Desktop (`runc`). `TrustedLocalEchoDemo` is the explicit developer launcher over the renderer owner's public trusted-local factory (owner tests pass; the demo copies no transport) and is not a production sandbox qualification. An earlier local run on an ephemeral loopback port (November 1, historical) had no printer or template. A real combined setup now exists: one local server runs Echo, Record Files, Document Generation and Printing with a real Printing client, printer, 4x1 media and a published Echo barcode document, and a TC22 completes setup against it. Physical output remains unproven. Operator prerequisites, from its README: a Printing tenant and administration token, a Windows printing agent that reports printer media, an approved scanner enrolled through the mobile flow, published Echo-compatible ZPL templates for the reported media, chosen by the operator during process setup, and Record Files' generated-file release switch.
[`demo/`](demo/README.md) is a separate optional module that composes the real owners into a startable server (tested, Checkstyle clean). Its production `EchoDemo` keeps the owner's cold bridge, which defaults to the `runsc` Docker runtime and fails closed on Windows Docker Desktop (`runc`). `TrustedLocalEchoDemo` is the explicit developer launcher over the renderer owner's public trusted-local factory (owner tests pass; the demo copies no transport) and is not a production sandbox qualification. An earlier local run on an ephemeral loopback port (November 1, historical) had no printer or template. A real combined setup now exists: one local server runs Echo, Record Files, Document Generation and Printing with a real Printing client, printer, 4x1 media and a published Echo barcode document, and a TC22 completes setup against it. Physical output is operator-reported as passing (November 4). Operator prerequisites, from its README: a Printing tenant and administration token, a Windows printing agent that reports printer media, an approved scanner enrolled through the mobile flow, published Echo-compatible ZPL templates for the reported media, chosen by the operator during process setup, and Record Files' generated-file release switch.
What remains before any print claim: a TC22 scan against the real server that produces a physical print, independent decode of the output and a rescan of Code 128 and leading-zero QR labels. Beyond that: full AIM, EAN/UPC, GS1 and raw fidelity (the six admitted types are printable ASCII only, and the rest fail explicitly as unsupported), then public immutable SDK publication, Gitea CI and distribution, and signing. The source pull request is on Gitea (PR 7); earlier GitHub references are historical.
Manual physical acceptance: on November 4 the operator reported, "i have ran the manual tests - it all works"; this is recorded as operator-reported group acceptance (see [TC22 acceptance](../../docs/TC22-ACCEPTANCE.md)), not separate per-case evidence. Beyond that: full AIM, EAN/UPC, GS1 and raw fidelity (the six admitted types are printable ASCII only, and the rest fail explicitly as unsupported). Android SDK publication, Gitea CI and the scanner PR 7 work are complete (Android `main` `0ae2101`, run 3634, AARs published; scanner `develop` `286e2e0`, run 3645, snapshot published). Still open: the document owner's coherent public Generation/bridges/Record Files/Scripting dependencies, and final production distribution and signing. The source pull request is on Gitea (PR 7); earlier GitHub references are historical.
## License packaging
+1 -1
View File
@@ -2,7 +2,7 @@
Optional module (`qqq-echo-demo`) that turns the Echo example into a server you can start. The library module `examples/echo` does not depend on it. It reuses `MobileScannersDemo` (database, `scanner`/`admin` accounts, native server) and adds Collaboration, Record Files, Printing, Document Generation and Echo from their public production classes. Nothing is simulated: the renderer is the owner's cold Docker bridge, output is retained by Record Files, and printing is Printing's own service. The server binds `127.0.0.1` only.
Status: the demo and Echo library tests pass with Checkstyle clean (current counts and progress: [session state](../../../docs/SESSION-STATE.md); the qqq version default is 4.1.0-RC.21 while owner qbits remain qualified private inputs). The composed acceptance test passes: an authenticated approved scanner, two scans, two retained originals and two accepted Printing jobs on one printer, an idempotent retry, and leaving closes the run. It uses a controlled synthetic renderer and a simulated Printing queue, so it is **not physical output**. The production `EchoDemo` default is unchanged and fails closed (the owner's cold bridge needs `runsc`; Windows Docker Desktop reports `runc`). A local run prints its URL in the startup log (`ECHO_DEMO_READY port=<port>`, then `http://127.0.0.1:<port>`; the port is chosen per run). Not production-ready and not a public SDK release. See `CLAUDE-HANDOFF.md` for status and what remains.
Status: the demo and Echo library tests pass with Checkstyle clean (current counts and progress: [session state](../../../docs/SESSION-STATE.md); the qqq version default is 4.1.0-RC.21 and Printing defaults to released 1.0.0, while the other owner qbits remain qualified private inputs). The composed acceptance test passes: an authenticated approved scanner, two scans, two retained originals and two accepted Printing jobs on one printer, an idempotent retry, and leaving closes the run. It uses a controlled synthetic renderer and a simulated Printing queue, so it is **not physical output**; physical TC22 acceptance is separately operator-reported as passing (November 4, group report). The production `EchoDemo` default is unchanged and fails closed (the owner's cold bridge needs `runsc`; Windows Docker Desktop reports `runc`). A local run prints its URL in the startup log (`ECHO_DEMO_READY port=<port>`, then `http://127.0.0.1:<port>`; the port is chosen per run). Not production-ready and not a public SDK release. See `CLAUDE-HANDOFF.md` for status and what remains.
## Trusted local development launcher
+1 -1
View File
@@ -21,7 +21,7 @@
<echo.version>0.1.0-SNAPSHOT</echo.version>
<generation.version>0.1.0-SNAPSHOT</generation.version>
<renderer.version>${generation.version}</renderer.version>
<printing.version>0.4.0-SNAPSHOT</printing.version>
<printing.version>1.0.0</printing.version>
<recordfiles.version>0.1.0-SNAPSHOT</recordfiles.version>
<mobilerecordfiles.version>0.1.0-SNAPSHOT</mobilerecordfiles.version>
<collaboration.version>0.1.0-record-files-SNAPSHOT</collaboration.version>
+4 -3
View File
@@ -20,10 +20,11 @@
<mobile.version>0.1.0-SNAPSHOT</mobile.version>
<!-- Echo's copies per scan needs a Generation build with the print-copies change (appended copies on
DocumentGenerationService.Request and GenerationPorts.PrintRequest, supportsCopies on the printing bridge,
migration 20261102-print-copies-h2.sql). Until that is published at this coordinate, override
generation.version and printing.version with a coherent build that has it; no private build is named here. -->
migration 20261102-print-copies-h2.sql). Printing 1.0.0 is released and qualified; only the Generation
cohort still needs a coherent published input. Until that is published at this coordinate, override
generation.version with a coherent build that has it; no private build is named here. -->
<generation.version>0.1.0-SNAPSHOT</generation.version>
<printing.version>0.4.0-SNAPSHOT</printing.version>
<printing.version>1.0.0</printing.version>
</properties>
<dependencyManagement><dependencies>
<dependency><groupId>com.kingsrook.qqq</groupId><artifactId>qqq-bom-pom</artifactId><version>${qqq.version}</version><type>pom</type><scope>import</scope></dependency>