Skip to content

release: Android 1.15.0, Plugin 1.11.1, CLI+UI 0.4.0-beta.6 - #525

Merged
Codename-11 merged 95 commits into
mainfrom
dev
Sep 1, 2026
Merged

release: Android 1.15.0, Plugin 1.11.1, CLI+UI 0.4.0-beta.6#525
Codename-11 merged 95 commits into
mainfrom
dev

Conversation

@Codename-11

@Codename-11 Codename-11 commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Summary

Promote the fully integrated and release-prepared dev tree to main for Hermes-Relay Android 1.15.0, Hermes-Relay Plugin 1.11.1, and Hermes-Relay CLI+UI 0.4.0-beta.6.

Changes

  • Ship Android’s upstream-first standard Hermes path for chat, voice, attachments/media, inbound files, current-session Git reads, usage, and notices without requiring Relay.
  • Keep Relay clearly additive for proactive Threads, Terminal, Notification Companion, Relay sessions, enhanced voice, Secure Link, and phone/device control.
  • Include Android transport-affinity, media retention, lifecycle recovery, compaction, Bot Chat, generated-image, Supervised Mode parent-access, and release-presentation fixes.
  • Publish Plugin installer compatibility and capability-gated phone-context fixes.
  • Publish the CLI+UI multi-route topology and safe Dashboard-ingress fallback beta.
  • Promote the associated Android build lanes, release checks, docs, localized guidance, and Play listing assets.

Verification

  • Release-prep PR release: Android 1.15.0, Plugin 1.11.1, CLI+UI 0.4.0-beta.6 #524 merged to dev from exact tested head e55662e0e13c755fa29c0f1e3d1574318fa65179; its Required checks aggregate passed.
  • Local Android candidate passed 2,978 unit tests (12 existing skips), lint, both release APK assemblies, and the Google Play AAB.
  • Hermes-Relay Plugin full suite and metadata checks passed.
  • Hermes-Relay CLI+UI Windows release-parity verification passed, including CLI tests/build/smoke and tray UI/Rust checks.
  • Physical Samsung phone smoke testing passed for upstream chat, voice, attachments/media, and image downloads before feat(android): prefer upstream standard surfaces #523 merged.
  • Exact-tree private Google Play preflight run 33466035298 passed against dev SHA e6368dada87d0316fcc2b5d3f0e4f4be55b1b52b, including signed release artifacts, final DEX scan, and private Production-draft upload.

Screenshots

No additional release-PR UI changes. The included Android changes were tested on a Samsung phone; release metadata uses the existing in-app What’s New screenshot coverage.

Compatibility / risk

Standard Hermes remains upstream-only and works against unmodified current upstream Hermes. Relay is optional for normal Chat, Voice, Manage, sessions, media, and attachments; it supplies compatibility fallback and Relay-exclusive enhancements. Android stable publication is fail-closed on an exact-tree Play preflight artifact, followed by the main-only approval workflow.

Lineage / contributor credit

Checklist

  • Target branch is dev, unless this is a devmain release PR or a focused production-tag hotfix PR to main
  • Scope is focused and related issues/PRs are linked
  • Android changes: lint and focused tests ran, or rationale is listed above
  • Translation changes: locale validation/review ran, or N/A is listed above
  • Server/plugin changes: focused tests ran, or N/A/rationale is listed above
  • Desktop changes: build/tests ran, or N/A/rationale is listed above
  • Docs/site changes: validation and generated-note checks ran
  • 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 user-visible changes, or N/A is listed above
  • Public writing hygiene checked: no secrets, private infrastructure, personal names, or AI/process narration
  • Salvaged/replacement work links source PRs and preserves contributor authorship, or N/A is listed above

dependabot Bot and others added 30 commits August 31, 2026 11:56
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5 to 6.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](actions/setup-java@v5...v6)

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

Signed-off-by: dependabot[bot] <support@github.com>
Bumps the testing group with 2 updates: [io.github.takahirom.roborazzi:roborazzi](https://github.com/takahirom/roborazzi) and [io.github.takahirom.roborazzi:roborazzi-compose](https://github.com/takahirom/roborazzi).


Updates `io.github.takahirom.roborazzi:roborazzi` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/takahirom/roborazzi/releases)
- [Commits](takahirom/roborazzi@1.72.0...1.73.0)

Updates `io.github.takahirom.roborazzi:roborazzi-compose` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/takahirom/roborazzi/releases)
- [Commits](takahirom/roborazzi@1.72.0...1.73.0)

---
updated-dependencies:
- dependency-name: io.github.takahirom.roborazzi:roborazzi
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: testing
- dependency-name: io.github.takahirom.roborazzi:roborazzi-compose
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: testing
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps `markdown-renderer` from 0.44.0 to 0.45.0.

Updates `com.mikepenz:multiplatform-markdown-renderer-m3` from 0.44.0 to 0.45.0
- [Release notes](https://github.com/mikepenz/multiplatform-markdown-renderer/releases)
- [Changelog](https://github.com/mikepenz/multiplatform-markdown-renderer/blob/develop/CHANGELOG.md)
- [Commits](mikepenz/multiplatform-markdown-renderer@v0.44.0...v0.45.0)

Updates `com.mikepenz:multiplatform-markdown-renderer-code` from 0.44.0 to 0.45.0
- [Release notes](https://github.com/mikepenz/multiplatform-markdown-renderer/releases)
- [Changelog](https://github.com/mikepenz/multiplatform-markdown-renderer/blob/develop/CHANGELOG.md)
- [Commits](mikepenz/multiplatform-markdown-renderer@v0.44.0...v0.45.0)

---
updated-dependencies:
- dependency-name: com.mikepenz:multiplatform-markdown-renderer-m3
  dependency-version: 0.45.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.mikepenz:multiplatform-markdown-renderer-code
  dependency-version: 0.45.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 androidx.navigation:navigation-compose from 2.9.8 to 2.10.0.

---
updated-dependencies:
- dependency-name: androidx.navigation:navigation-compose
  dependency-version: 2.10.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 [org.jetbrains.compose](https://github.com/JetBrains/compose-multiplatform) from 1.11.1 to 1.12.0.
- [Release notes](https://github.com/JetBrains/compose-multiplatform/releases)
- [Changelog](https://github.com/JetBrains/compose-multiplatform/blob/master/CHANGELOG.md)
- [Commits](JetBrains/compose-multiplatform@v1.11.1...v1.12.0)

---
updated-dependencies:
- dependency-name: org.jetbrains.compose
  dependency-version: 1.12.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 `haze` from 1.7.2 to 1.7.3.

Updates `dev.chrisbanes.haze:haze` from 1.7.2 to 1.7.3
- [Release notes](https://github.com/chrisbanes/haze/releases)
- [Changelog](https://github.com/chrisbanes/haze/blob/1.7.3/CHANGELOG.md)
- [Commits](chrisbanes/haze@1.7.2...1.7.3)

Updates `dev.chrisbanes.haze:haze-materials` from 1.7.2 to 1.7.3
- [Release notes](https://github.com/chrisbanes/haze/releases)
- [Changelog](https://github.com/chrisbanes/haze/blob/1.7.3/CHANGELOG.md)
- [Commits](chrisbanes/haze@1.7.2...1.7.3)

---
updated-dependencies:
- dependency-name: dev.chrisbanes.haze:haze
  dependency-version: 1.7.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: dev.chrisbanes.haze:haze-materials
  dependency-version: 1.7.3
  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 `coil` from 3.5.0 to 3.6.0.

Updates `io.coil-kt.coil3:coil-compose` from 3.5.0 to 3.6.0
- [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.5.0...3.6.0)

Updates `io.coil-kt.coil3:coil-gif` from 3.5.0 to 3.6.0
- [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.5.0...3.6.0)

Updates `io.coil-kt.coil3:coil-network-okhttp` from 3.5.0 to 3.6.0
- [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.5.0...3.6.0)

---
updated-dependencies:
- dependency-name: io.coil-kt.coil3:coil-compose
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.coil-kt.coil3:coil-gif
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.coil-kt.coil3:coil-network-okhttp
  dependency-version: 3.6.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>
Preserve the route-owned ChatHandler as the rendered state source from first composition and cover fast/delayed history plus handler replacement and on-device lifecycle recovery.

Supersedes PR #453 while preserving contributor credit.

Co-authored-by: layerflex <254160994+layerflex@users.noreply.github.com>
…-lifecycle-refresh

fix(android): render Bot Chat history after binding
…v/actions/setup-java-6

chore(deps): bump actions/setup-java from 5 to 6
…e-notes-expansion

# Conflicts:
#	CHANGELOG.md
test(android): refresh v1.14 What's New assertions
…e-notes-expansion

# Conflicts:
#	app/src/test/kotlin/com/hermesandroid/relay/screenshots/ChangelogHistoryScreenshotTest.kt
#	app/src/test/kotlin/com/hermesandroid/relay/screenshots/WhatsNewToastScreenshotTest.kt
Co-authored-by: Upbeat7898 <upbeat7898@noreply.git.meberthosting.de>
…lent compaction

Server-side context compaction summarizes the transcript with NO deltas
or tool events flowing until it finishes. Near the context ceiling that
silence routinely exceeds TURN_TIMEOUT_MS (180s), so the idle watchdog
fired session.interrupt on a healthy compression, rolled back its work,
and retriggered on the next prompt — an infinite 'Operation interrupted'
loop that makes near-full sessions permanently unresponsive from mobile.

Observed against a live gateway: four turns killed at exactly
prompt+~251s (visible tool work + 180.0s of silent compaction), server
compression telemetry aborted at 180469/180233/180219ms with
failure_class=explicit_interrupt.

Fix: treat a status.update event with kind 'compacting' like the ask
events that already arm longer leashes (same watchdogTimeoutFor seam):
arm COMPACTING_TIMEOUT_MS (600s) instead of the 180s default. Any
regular event rearms TURN_TIMEOUT_MS as before. Pairs with the gateway
fix that emits periodic compacting heartbeats during compression
(NousResearch/hermes-agent#98371); a single compacting event at
compaction start already engages the longer leash on current gateways.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chore(android): serialize Windows build lanes
…s-expansion

feat(android): make What's New a complete release record
…ay-salvage

fix(android): harden supervised Gateway setup
…retention

fix(android): retain generated image results
Codename-11 and others added 27 commits August 31, 2026 18:37
…ffinity

fix(android): keep chat transport ownership stable
…r-compat

fix(plugin): restore native installer compatibility
…activity

fix(android): show passive external session activity
# Conflicts:
#	CHANGELOG.md
#	docs/spec.md
#	docs/upstream-surface-matrix.md
…eness

fix(android): settle owned streams from live idle state
# Conflicts:
#	CHANGELOG.md
#	README.md
#	docs/localization-status.json
#	docs/upstream-surface-matrix.md
#	user-docs/features/connections.md
#	user-docs/features/index.md
#	user-docs/guide/index.md
#	user-docs/guide/remote-access.md
#	user-docs/reference/configuration.md
feat(android): prefer upstream standard surfaces
Comment on lines +78 to +81
- name: Run repository checks and focused sideload tests
run: python3 scripts/android-prepush.py --skip-lint

- name: Run the same focused tests for Google Play
Comment on lines +81 to +92
- name: Run the same focused tests for Google Play
shell: bash
run: |
mapfile -t focused_tests < <(python3 -c \
"import runpy; print(*runpy.run_path('scripts/android-prepush.py')['FOCUSED_TESTS'], sep='\n')")
test_args=()
for test_name in "${focused_tests[@]}"; do
test_args+=(--tests "$test_name")
done
./gradlew :app:testGooglePlayDebugUnitTest "${test_args[@]}" --console=plain

- name: Upload failed test reports
Comment on lines +121 to +134
- name: Validate Android repository inputs
run: |
python3 scripts/check-android-locales.py
python3 scripts/check-user-docs-locales.py
python3 scripts/check-android-collection-apis.py
python3 scripts/check-android-release-notes.py
python3 scripts/check-version-tracks.py
if [[ -f scripts/tests/android_prepush_test.py ]]; then
python3 -m unittest scripts.tests.android_prepush_test
fi
python3 -m unittest scripts.tests.check_android_release_notes_test
python3 -m unittest scripts.tests.check_android_native_compat_test

- name: Run Android lint
Comment on lines +134 to +137
- name: Run Android lint
run: ./gradlew lint --console=plain

- name: Upload lint reports
Comment on lines +166 to +169
- name: Build debug APKs
run: ./gradlew assembleDebug --console=plain

- name: Verify packaged native compatibility
Comment on lines +169 to +175
- name: Verify packaged native compatibility
run: |
python3 scripts/check-android-native-compat.py \
app/build/outputs/apk/googlePlay/debug/*.apk \
app/build/outputs/apk/sideload/debug/*.apk

- name: Upload debug APKs
Comment on lines +203 to +206
- name: Build release bundles and APKs
run: ./gradlew bundleRelease assembleRelease --console=plain

- name: Scan release DEX for unsupported collection APIs
Comment on lines +206 to +212
- name: Scan release DEX for unsupported collection APIs
run: |
python3 scripts/check-android-collection-apis.py \
--apk app/build/outputs/apk/googlePlay/release/*.apk \
--apk app/build/outputs/apk/sideload/release/*.apk

- name: Verify packaged native compatibility
Comment on lines +212 to +218
- name: Verify packaged native compatibility
run: |
python3 scripts/check-android-native-compat.py \
app/build/outputs/apk/googlePlay/release/*.apk \
app/build/outputs/apk/sideload/release/*.apk

- name: Upload release smoke artifacts
@Codename-11
Codename-11 merged commit f4b3663 into main Sep 1, 2026
35 of 36 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