Files
james.maes 4f96071157
QRun-IO/ci-policy: ci / fork-guard (push) Skipped
QRun-IO/ci-policy: native / fork-deny (push) Skipped
QRun-IO/ci-policy: native / dotnet-0 (push) Skipped
QRun-IO/ci-policy: ci / Scoped workflow [workflow 9cb8c13124a99d18da83cbcd4faa795859ac9e55] (push) Successful in 6s
QRun-IO/ci-policy: ci / head-profile (push) Skipped
QRun-IO/ci-policy: ci / repository-policy (push) Skipped
QRun-IO/ci-policy: ci / application-template-0 (push) Skipped
QRun-IO/ci-policy: native / native-result (push) Successful in 5s
QRun-IO/ci-policy: ci / gradle-1 (push) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3 (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (push) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (push) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (push) Skipped
QRun-IO/ci-policy: ci / node-8 (push) Skipped
QRun-IO/ci-policy: ci / node-9 (push) Skipped
QRun-IO/ci-policy: ci / node-10 (push) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (push) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (push) Skipped
QRun-IO/ci-policy: ci / source-config-13 (push) Skipped
QRun-IO/ci-policy: ci / source-config-14 (push) Skipped
QRun-IO/ci-policy: ci / android-0 (push) Skipped
QRun-IO/ci-policy: ci / original-business (push) Skipped
QRun-IO/ci-policy: ci / original-mcp (push) Skipped
QRun-IO/ci-policy: ci / original-voyage (push) Skipped
QRun-IO/ci-policy: ci / original-cli (push) Skipped
QRun-IO/ci-policy: ci / not-enrolled (push) Skipped
QRun-IO/ci-policy: ci / shared-pipeline (push) Skipped
QRun-IO/ci-policy: ci / ci-result (push) Successful in 4s
maven / build (push) Failing after 1m0s
build / maven (push) Failing after 1m0s
Merge pull request 'fix(echo): make approved scanner photos available immediately' (#22) from fix/approved-scanner-photo-availability into develop
2026-11-07 13:12:15 +00:00

9.9 KiB

Session state

Current as of 2026-11-05. Open work is in TODO, release gates in production readiness, and prior evidence in history.

Source and publication

GS1-128 duplication, including barcode and printed HRI, is merged through PR 15, commit f9b0eb2, and included in the Forge source prerelease. This is source publication, not a published Echo Maven dependency. PRs 17 and 18 add publication metadata, the frozen contract baseline and recovery guidance; those changes are retained in this feature branch.

The rich demo fixture and record UX improvements are implemented. Native browsing, record Actions and photo presentation belong to the companion Android repository. The user authorized the final release, signing and publication for this bounded goal. Android PR 15 merged as c782aaaaba3f62422232436a9000af9d4b38fc82 after all CI. Maven publication switches stay disabled until the public dependency cohort is adopted.

Item State
Primary forge Gitea QRun-IO/qbit-mobile-scanners, default develop; Android uses protected main. GitHub is a shadow/archive.
Scanner development snapshot PR 12 merged; run 3645 published 0.1.0-20261103.233448-3645, anonymously read back and compared to its reviewed source.
Printing PR 13 merged; Echo defaults to released Printing 1.0.0.
Android libraries and signed preview PRs 8/10 merged at 0ae2101, documentation through PR 14 (464814f); SDK run 3634 verified. scanner-v1.0.0 is a signed preview, not production qualification.
Production 1.0 Not released. Publication policy and switches are unchanged.

Local runtime

The maintained composed Echo server and existing TC22 app were updated in place on November 5. Database and attachment objects were backed up first; accounts, enrollment, app data and printer configuration were preserved. Live reads verified 1,000 test orders, 12,000 items and 3,000 history entries; orders have 39 fields, six groups and two associations.

Use Test Data → Test Orders → a record → Actions → Add photo. Details, Items, History and Photos tabs provide direct access. Search/filter/count and Back preserve table context. Approved photos have thumbnails/previews; quarantined uploads remain listed as awaiting review. Ordinary read/attach permissions still apply.

Approved-scanner photos. The Echo host sets Record Files quarantineCapturedFiles=false, so a JPEG/PNG captured by a currently approved device is AVAILABLE at once. Uploads, imports and attachment-panel files stay QUARANTINED. Parent tables are Echo scans plus the test orders, items and events; the scanner's existing .attach grants are retained. Only admin gains record-files.release; scanner grants are unchanged. Three earlier quarantined photos were released through the audited admin Release process. The server's current aggregate was built from public Core SNAPSHOT, current Collaboration, the scoped local Record Files change and qualified private document inputs, not a final public cohort. The scoped Record Files change is owner PR 1 (policy commit 3f08c584), open and unmerged; its public CI currently fails an enrollment check that the coordinator owns, so neither the check nor its merge gates are changed here. No version or POM was guessed.

The local demo source defaults remain QQQ 4.1.0-RC.21 and Printing 1.0.0 pending the public-cohort update; the maintained runtime uses the verified development aggregate described above. Host port is 57832. The TC22 development app retains its loopback forwarding; the signed MC9400 app connects through trusted HTTPS. Contract versions remain UI API 1.10, mobile-scanners 1.5, printing 2.3 and mobile-record-files 1.0. This is local development qualification, not a customer production deployment.

Verification

  • Photo/admin change set (root-reported, not rerun in this review): 69 owner tests and 197 scanner/Echo tests passed (runs of 31, 158 and 8), 13 focused Android tests passed, and the relevant Checkstyle passed. These groupings differ from the module split below, so no per-module counts are claimed. Public immutable dependency qualification is still pending.
  • Live evidence: a fresh synthetic gallery PNG uploaded from the production-signed MC9400 app returned "Saved photo", and the server showed AVAILABLE with the exact parent, type, size and SHA-256. An older photo's Available state, thumbnail and Preview control were observed. The new photo's full preview was not clicked because ADB disconnected. No camera-hardware or full-preview proof is claimed.
  • The earlier combined five-module verify (2026-11-05, base 9e8685f plus the storage fixes) passed 196 server tests with zero failures, errors and skips and zero Checkstyle violations: scanner 53, base demo 8, mobile Record Files 22, Echo 74, Echo demo 39. It used qualified private owner dependencies; there is no public-dependency or physical-output qualification, and the gate must be repeated when the public cohort is adopted. The new build parent's report-only schema-location/contract-test findings remain visible.
  • Storage/recovery PR 21 is merged (59959247), with bounded cold-restore and race proof complete. Website 0.1.17 is complete. Evidence: PrivateObjectFilesTest.concurrentSameKeyWritersLeaveOneWinnersBytesAndMetadata and dotBucketsAreRefusedAndValidBucketsStillWork; recovery acceptance EchoDemoAcceptanceTest.restoredSnapshotKeepsScanAndRetainedFileAndRevertedApprovalStateIsReaudited (details in OPERATIONS).
  • Android passed 232 unit tests, lint with 0 errors/0 warnings, and the debug APK build. E2E APK/instrumentation builds and eight runner guard tests also passed.
  • Isolated MC9400 native acceptance passed search/filter/paging/Back, grouped/related records, camera/gallery upload, parent-scoped saved-photo list, approved preview, rotation, pending-upload navigation protection and forced-logout cleanup. All requests matched the semantic API. Process-photo regression also passed.
  • The final date-only correction received unit/lint/build checks and actual TC22 verification. Actual-device screenshots confirm Actions → Add photo, dates/timezones, currency, related tabs, photo empty state and return to page two. Synthetic camera/gallery inputs in automated acceptance are not a new operator camera report.
  • Earlier 135/188/198/377-test cohorts and 15 browser E2E cases are historical evidence, not a fresh run against future public dependencies. The snapshot source comparison applies to its original revision only.
  • 2026-11-06, branch fix/refresh-device-versions: the MC9400 in-place 1.0.0 to 1.0.1 update left the device record and every later scan reporting appVersion 1.0.0, because only enrollment ever wrote manufacturer/model/osVersion/appVersion and no later client request carried them. Extension 1.6 adds the same optional fields to MobileScannersHeartbeatRequestV1; the heartbeat refreshes the device record when a value differs and scans copy the refreshed record (see UI-API). The Android host change (send osVersion/appVersion on heartbeat) is on the same-named branch in the Android repository; devices need that client build before their versions refresh. Root module: 56 tests, zero Checkstyle violations, new baseline mobile-scanners-1.6.0.yaml.

Handhelds and remaining limits

Previous TC22 APK SHA-256: F71033C835AC3EB361A04D78C842947C5A04C85CE1AB1B999AA8CEFBFC9D7A95; prior preview hashes are in history.

Signed Android 1.0.1 (code 3) was built from the identical merged source tree (PR 15) and installed in place on the MC9400. The installed bytes match the built APK, login and enrollment were preserved, the authorized Scan Capture screen reopened, and the HTTPS connection was established. The MC9400 physical trigger is done: an actual operator trigger produced a Saved scan, and the backend confirmed EMDK CODE128, AIM and raw bytes with server-derived attribution. The barcode scanned was not the literal string requested, so no exact-test-string claim is made.

Shared Authenticator server configuration is verified: real trusted HTTPS, UI API 1.10, both scanner and printing extensions and channels, exact callbacks and a REQUIRED nonce. Native client login, logout and account switching are not yet tested (this needs the MC9400 wireless-debugging endpoint), so no native-auth pass is claimed. The Printing client required-nonce fix (PR 11, 443f642; 352 Windows/CLI tests and build passed) awaits hosted Core. Pending: native Authentik login/logout/account switching, the final public Core/Collaboration/document/files/scripting/bridge artifacts, a public-cohort rerun, GS1 physical print/rescan, signing-APK download publication and owned cleanup.

The November 4 TC22 operator group pass remains accepted and is not requested again. Physical GS1 print/rescan, provider callback acceptance and fleet rollout remain open. Echo supports only its documented barcode profiles. Company profile/wallpaper is separate tracked scope, not a blocker for this release goal.

Operations and recovery guidance is in OPERATIONS. The automated stopped-H2 plus object snapshot/restore case passed as isolated local-demo recovery acceptance (no physical printing, no normal demo data changed). Enterprise object-store/HA and non-H2 databases are unsupported and unqualified, not release tasks. The dated review records its scope and supplement. Public owner dependencies require a separate reviewed adoption and a new gate.