Skip to content

release: Android 1.16.0 and Plugin 1.11.2 - #575

Merged
Codename-11 merged 43 commits into
mainfrom
dev
Sep 10, 2026
Merged

Codename-11 merged 43 commits into
mainfrom
dev

Conversation

@Codename-11

Copy link
Copy Markdown
Owner

Summary

Promote the verified dev release tree for Hermes-Relay Android 1.16.0 and Hermes-Relay Plugin 1.11.2. Android improves cold startup, connection-owned sign-in, network-change recovery, Bot Mode identity, and delegated-work feedback. The Plugin release removes repeated tool-availability delays and recovers Android bridge credentials created after Hermes startup.

This PR is intentionally held from merge until the remaining interactive physical-device checks pass or receive an explicit release disposition.

Changes

Verification

  • Final source: dev commit 5372fc1fef0ad35ca05fd8bb7130e4274b1b7d5e, tree 99d9712dcdce8316d3fed9c60a1b7c737274fccd.
  • Android release-prep PR release(android): android-v1.16.0 #574 exact-head checks passed; post-merge dev CI run 34430639050 passed tests, lint, both-flavor release smoke, DEX scanning, and packaged native compatibility.
  • python scripts/android-prepush.py --release-prep passed, including release metadata, version tracks, 12 locale catalogs, localized docs, collection compatibility, and rendered Changelog/What's New tests.
  • Exact final tree focused regressions: 334/334 tests passed for sideload and 334/334 for Google Play.
  • Android Play Preflight run 34431705999 passed on the exact dev commit/tree, built signed artifacts, passed DEX/native scans, and uploaded versionCode 55 as a private Production draft. Immutable artifact ID: 10134763901.
  • Plugin release-prep PR release(server): server-v1.11.2 #573 exact-head checks passed; post-merge Plugin and Dashboard CI runs 34429389798 and 34429389689 passed. Local version checks and 98 focused Plugin tests passed.
  • Physical Android 16: exact-tree 1.16.0-sideload/code 55 APK installed and launched; endpoint invalidation concurrency passed 1/1. The secure keyguard currently blocks saved-signin switching, Bot Mode, LAN/Tailscale, and UI lifecycle checks. Those remain release gates and are not claimed here.

Screenshots

Release presentation passed rendered Changelog and What's New tests. No new screenshots are required for this promotion PR.

Compatibility / risk

Standard Chat, sessions, profiles, Manage, voice, Bot Mode, and delegated activity remain on current upstream Hermes. Plugin 1.11.2 remains optional for Relay tools. Existing erased or revoked Dashboard credentials still require legitimate sign-in. Direct API/API-only connections remain explicit. Device Control and the system Voice Focus overlay remain sideload-only.

The Android public release must reuse the exact successful private preflight artifact; any tree, signing, hash, or Play mismatch fails closed. Plugin and Android use separate immutable tags and release workflows.

Lineage / contributor credit

Checklist

  • Target branch is main for the canonical dev → main coordinated release PR
  • Scope is focused and related issues/PRs are linked
  • Android changes: exact-tree CI, release prep, focused tests, partial device proof, and private Play preflight completed; remaining interactive device gates are stated
  • Translation changes: locale validation passed; no translation catalogs changed
  • Server/plugin changes: focused tests, version sync, Dashboard build, and hosted CI passed
  • Desktop changes: N/A; CLI+UI remains unchanged
  • Docs/site changes: release and Play copy validated; no site routes changed
  • UI changes were tested on a relevant device/emulator/desktop surface, or the missing proof is stated above
  • Commit messages follow Conventional Commits
  • CHANGELOG.md is updated for both released surfaces
  • Public writing hygiene checked: no secrets, private infrastructure, personal names, or AI/process narration
  • Salvaged/replacement work links source PRs and preserves contributor authorship

nicolasestrem and others added 30 commits September 3, 2026 22:40
…llable

Every android_* tool returned `401 Client Error: Unauthorized` on a phone
that was paired, connected and healthy (`/bridge/status` reported
phone_connected: true, accessibility_granted: true).

Cause: `_bridge_token()` read ANDROID_BRIDGE_TOKEN from the process
environment only. The env is snapshotted when the host starts, so a token
written afterwards — by `android_setup`, by `hermes-pair`, or by hand —
stayed invisible and `_require_bearer_session` rejected every bridge
dispatch until a full restart.

Resolution order is now env -> ~/.hermes/.env -> most-recently-seen paired
session in ~/.hermes/hermes-relay-sessions.json, with the disk fallbacks
cached for 30s so we don't stat two files on every bridge call. The process
environment still wins when set, and HERMES_HOME is honoured.

The documented recovery path was itself broken: android_setup's schema
required `pairing_code` while the signature had been renamed to
`bridge_session_token`, and the dispatcher calls func(**call_args) — so the
schema-conformant call raised TypeError and the canonical one was rejected
by the validator. The tool could not be invoked at all. Both spellings are
now accepted (canonical wins), neither is schema-required, a missing token
returns a structured error, and the description no longer mislabels the
value as a "6-character pairing code" or claims the tool performs pairing.

Also pin TestSetup to a temporary home. It exercises the real
android_setup, which persists ANDROID_BRIDGE_* to ~/.hermes/.env — running
the suite on a real host overwrote the machine's live paired session token
with a fixture value.

Verified: 43 passed (test_android_tool.py + test_android_tool_device_selector.py),
and against the physical device with ANDROID_BRIDGE_TOKEN unset from the
environment — /ping and /current_app both 200 via the new disk fallback.
…allback-final

fix(plugin): resolve bridge token after host startup
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](actions/cache@v5...v6)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps com.android.application from 9.3.2 to 9.4.0.

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps `coil` from 3.6.0 to 3.6.2.

Updates `io.coil-kt.coil3:coil-compose` from 3.6.0 to 3.6.2
- [Release notes](https://github.com/coil-kt/coil/releases)
- [Changelog](https://github.com/coil-kt/coil/blob/main/CHANGELOG.md)
- [Commits](coil-kt/coil@3.6.0...3.6.2)

Updates `io.coil-kt.coil3:coil-gif` from 3.6.0 to 3.6.2
- [Release notes](https://github.com/coil-kt/coil/releases)
- [Changelog](https://github.com/coil-kt/coil/blob/main/CHANGELOG.md)
- [Commits](coil-kt/coil@3.6.0...3.6.2)

Updates `io.coil-kt.coil3:coil-network-okhttp` from 3.6.0 to 3.6.2
- [Release notes](https://github.com/coil-kt/coil/releases)
- [Changelog](https://github.com/coil-kt/coil/blob/main/CHANGELOG.md)
- [Commits](coil-kt/coil@3.6.0...3.6.2)

---
updated-dependencies:
- dependency-name: io.coil-kt.coil3:coil-compose
  dependency-version: 3.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.coil-kt.coil3:coil-gif
  dependency-version: 3.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.coil-kt.coil3:coil-network-okhttp
  dependency-version: 3.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps com.android.library from 9.3.2 to 9.4.0.

---
updated-dependencies:
- dependency-name: com.android.library
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Mutation success is published before detail refresh finishes and the callback runs. Await callback delivery explicitly instead of treating the state flow as a callback-completion barrier.

Signed-off-by: Jack <JLHunzicker@gmail.com>
…v/actions/cache-6

chore(deps): bump actions/cache from 5 to 6
…droid.library-9.4.0

chore(deps): bump com.android.library from 9.3.2 to 9.4.0
…t-preview

fix(android): preserve chat activity and correct feedback ownership
fix(android): prevent duplicate Bot Mode keys across connections
…-test-order

test(android): await git commit success callback
…auth

fix(android): bind dashboard auth to connection-owned routes
Co-authored-by: Jack Hunzicker <JackHunzicker@users.noreply.github.com>
fix(plugin): share relay availability checks
@Codename-11
Codename-11 merged commit a5f671c into main Sep 10, 2026
21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants