Scanner host now reports the installed osVersion and appVersion on every session heartbeat.
MC9400 finding. After the authorized in-place update 1.0.0 → 1.0.1 (versionCode 2 → 3) on the MC9400, scan receipts still reported appVersion 1.0.0. The host only sent osVersion/appVersion at enrollment, and the server never refreshed them on the device record.
Change.
MobileSessionApi carries osVersion (Build.VERSION.RELEASE) and appVersion (BuildConfig.VERSION_NAME) in each heartbeat body; blank values are omitted and values are capped at 200 characters. The map is injectable for tests.
Docs: docs/UI-API.md (heartbeat contract) and docs/SESSION-STATE.md (finding).
Validation
Shared-library and scanner JVM tests passed: core 52, mobileapp 62, scanner-host 125 (MobileSessionTest.networkPayloadUsesSemanticRoutesAndCarriesOnlyScreenMetadata now asserts both version keys are present and that no other device metadata such as manufacturer/model is sent)
Scanner lint clean
Native emulator tests: not run for this change
Hardware: not yet installed on the MC9400; ships in the planned 1.0.2 build. Remaining check: a scan receipt after the update shows the new appVersion.
Compatibility and rollout
Additive optional keys on the existing heartbeat. Effective with a mobile-scanners 1.6.0 server (same-named server branch refreshes the device record when the values change); older servers ignore the keys. The installed 1.0.1 APK does not include this change. No credentials, cookies, tokens or barcodes included.
## Summary
Scanner host now reports the installed `osVersion` and `appVersion` on every session heartbeat.
**MC9400 finding.** After the authorized in-place update 1.0.0 → 1.0.1 (versionCode 2 → 3) on the MC9400, scan receipts still reported `appVersion` 1.0.0. The host only sent `osVersion`/`appVersion` at enrollment, and the server never refreshed them on the device record.
**Change.**
- `MobileSessionApi` carries `osVersion` (`Build.VERSION.RELEASE`) and `appVersion` (`BuildConfig.VERSION_NAME`) in each heartbeat body; blank values are omitted and values are capped at 200 characters. The map is injectable for tests.
- Docs: `docs/UI-API.md` (heartbeat contract) and `docs/SESSION-STATE.md` (finding).
## Validation
- [x] Shared-library and scanner JVM tests passed: core 52, mobileapp 62, scanner-host 125 (`MobileSessionTest.networkPayloadUsesSemanticRoutesAndCarriesOnlyScreenMetadata` now asserts both version keys are present and that no other device metadata such as `manufacturer`/`model` is sent)
- [x] Scanner lint clean
- [ ] Native emulator tests: not run for this change
- [ ] Hardware: not yet installed on the MC9400; ships in the planned 1.0.2 build. Remaining check: a scan receipt after the update shows the new `appVersion`.
## Compatibility and rollout
Additive optional keys on the existing heartbeat. Effective with a mobile-scanners **1.6.0** server (same-named server branch refreshes the device record when the values change); older servers ignore the keys. The installed 1.0.1 APK does not include this change. No credentials, cookies, tokens or barcodes included.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
After the MC9400 in-place 1.0.0 to 1.0.1 update, scan receipts still showed
appVersion 1.0.0: the host sent osVersion/appVersion only at enrollment and
the server never refreshed them. MobileSessionApi now carries both values
(Build.VERSION.RELEASE and BuildConfig.VERSION_NAME, blank values omitted,
200-character cap) on each heartbeat so a mobile-scanners 1.6 server
refreshes the device record; older servers ignore the optional keys.
MobileSessionTest verifies the heartbeat payload carries only the two
version keys and no other device metadata. UI-API.md and SESSION-STATE.md
record the change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Scanner host now reports the installed
osVersionandappVersionon every session heartbeat.MC9400 finding. After the authorized in-place update 1.0.0 → 1.0.1 (versionCode 2 → 3) on the MC9400, scan receipts still reported
appVersion1.0.0. The host only sentosVersion/appVersionat enrollment, and the server never refreshed them on the device record.Change.
MobileSessionApicarriesosVersion(Build.VERSION.RELEASE) andappVersion(BuildConfig.VERSION_NAME) in each heartbeat body; blank values are omitted and values are capped at 200 characters. The map is injectable for tests.docs/UI-API.md(heartbeat contract) anddocs/SESSION-STATE.md(finding).Validation
MobileSessionTest.networkPayloadUsesSemanticRoutesAndCarriesOnlyScreenMetadatanow asserts both version keys are present and that no other device metadata such asmanufacturer/modelis sent)appVersion.Compatibility and rollout
Additive optional keys on the existing heartbeat. Effective with a mobile-scanners 1.6.0 server (same-named server branch refreshes the device record when the values change); older servers ignore the keys. The installed 1.0.1 APK does not include this change. No credentials, cookies, tokens or barcodes included.
🤖 Generated with Claude Code