Skip to content

Releases: chezgoulet/hermes-vox

Hermes Vox 0.8.0 — the accelerator release

Choose a tag to compare

@big-cookie big-cookie released this 30 Sep 15:43

Enhanced Realtime, complete: the warm soul, the beat, no more double answers, and a
clean handoff. A better voice (Supertonic), a soul that hears your tone, and speech
recognition that refuses to invent words. Downloads that survive leaving the screen,
int8 speech recognition, the GPU-rendered being, and keep-awake.

versionCode 141, signed CN=Hermes Vox.

One gate was not run. G1 — the GPU initialising on a Tensor G4 — is untestable on the
hardware available, so this release proceeds without it deliberately. The substitute
evidence is the nightly series in daily use on a real device. Recorded in full at the top
of docs/RELEASE-0.8.0.md.

Full notes: docs/RELEASE-0.8.0.md

Hermes Vox 0.7.3 — the first-run fix

Choose a tag to compare

@robot-chezgoulet robot-chezgoulet released this 29 Sep 09:32
36418d9

Hermes Vox 0.7.3 — the first-run fix

Version code 115 · versionName 0.7.3 · built from main (0.7.2 + this fix).

What this is

A one-bug release. It fixes a hard block on first run: on a phone whose display
size or font size is turned up, the onboarding explainer could be taller than the
window, and because that screen had no scroll container, everything past the bottom
edge was never drawn. The only control that moves a new user forward — "Got it —
connect"
— was unreachable, and there was no scroll to reach it with. Back or Home
was the only exit.

Reported from a Pixel 8 on Android 17 QPR1 beta with Font size ~150% and Display size
one step up (#130). The framing in the report — "splash screen too
large", blamed on the beta — was not what was happening.

The measurements, because the report's framing was wrong

From the screenshot's pixels rather than its caption: the screen was rendering at
density ~2.875 × font scale ~1.5, with Android's non-linear font scaling visible in
it — a 30sp heading does not scale at all below ~1.8, so the 12sp caption caught up to
it and the screen read as one uniform wall of text. That is ~1080dp of column inside a
~760dp window; the model predicts the clip edge within two pixels of where the
screenshot cuts a line mid-glyph.

At default settings the same column is ~790dp in ~840dp of window — about 6% of
slack
. Font size: Large (1.15) consumes it; Largest (1.3), or Display size one
step up, puts the button off-window. The screen that "worked" was never tested; it was
lucky.

The fix

  • activity_onboarding.xml is a scroll container. The column is wrapped in a
    fillViewport ScrollView and becomes wrap_content. When the content fits,
    fillViewport stretches the column to the window and gravity="center" centres it
    exactly as before — the default screen does not move, and the code does not even
    rewrite the declared presence size on a default device. When it does not fit, it
    scrolls instead of clipping.
  • The presence yields space as the text grows (OnboardingLayout.avatarSizeDp):
    250dp at defaults, 205/170/140dp as the font scale or a short window demands. The copy
    and the controls never shrink. This puts the button ~1/8 of a screen below the fold at
    the reported settings, and ~1/5 at the accessibility maximum, instead of out of reach.
  • OnboardingActivity gets windowSoftInputMode="adjustResize", so the keyboard
    cannot bury Connect on the connection form (those fields are in the same container).
  • Each step opens at its top, so a user who scrolled the explainer to reach its
    button does not arrive at the form mid-scrolled with the first field above the fold.

Gated, not decorated

OnboardingLayoutTest and OnboardingAvatarSizeTest (device-free JVM, in the shape of
the existing suite) hold the structure: the root is a vertical scroll container with
fillViewport, its single child is wrap_content, every id in the file lives inside it,
the column still centres and pads as the old root did, and the size rule is pinned down
to its literals and boundaries. Run against the pre-fix layout, the same suite fails
three assertions — the negative control — so the gate bites.

What is NOT in this release

The accelerator series (Gemma on the GPU, speech-model threading, model-size
corrections) stays on testing. Its plan status is UNPROVEN — docs/PLAN-0.8-accelerator.md
— and it ships as part of 0.8.0 when the series completes, per ROADMAP.md. Its
draft notes, which had been filed under this version number, are re-labelled
docs/RELEASE-0.8.0.md on testing. The entity-scope field (#129) and the
Enhanced-Realtime soul-lane work are likewise testing-only and not in 0.7.3.

Verify on a device

Install over 0.7.2 (same release key, no uninstall), then:

  1. Defaults first: first run looks exactly as before — presence centred, everything
    one screen.
  2. Font size → Largest: first run scrolls; "Got it — connect" is reachable by
    scrolling; tapping it opens the form at its top.
  3. Form: with the keyboard up, the fields and Connect stay reachable.

Artifact

hermes-vox-0.7.3.apk — 96446744 bytes

sha256  c6abdbc1d679a0c2a2bf81109b4b722fd14fd831020f0ea0526ebb8135511e49

Signed with the House release key (CN=Hermes Vox, OU=ChezGoulet, O=ChezGoulet,
SHA-256 8be7feed8a6135d3d2df8fd51598517dabd4b14ea16a1a02b00c10ea4dcbbb19) — the same
key the nightlies use, so it installs over 0.7.2 without an uninstall. A device
running a nightly is ahead of this release in version-code order (nightlies are
versionCode 116+, this release is 115), and Android refuses a downgrade: coming back
from a nightly to the release track needs an uninstall first.

Built and gated on the Thelio: go vet + go test -race ./voice/... clean,
gomobile bind → staged AAR, assembleRelease + testReleaseUnitTest green
(269 tests, 0 failures), aapt2 dump badging reports versionCode=115
versionName=0.7.3, apksigner verify reports the key above.

Nightly nightly-20260930-150133-ebafe31

Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 15:01
36418d9

Automated nightly from testing @ ebafe31.
Install via Obtainium (prereleases) — NOT for the release track.

Nightly nightly-20260930-143819-488b5bf

Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 14:38
36418d9

Automated nightly from testing @ 488b5bf.
Install via Obtainium (prereleases) — NOT for the release track.

Nightly nightly-20260930-125225-f2acd16

Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 12:52
36418d9

Automated nightly from testing @ f2acd16.
Install via Obtainium (prereleases) — NOT for the release track.

Nightly nightly-20260930-021019-9dd6654

Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 02:10
36418d9

Automated nightly from testing @ 9dd6654.
Install via Obtainium (prereleases) — NOT for the release track.

Nightly nightly-20260930-012409-121310c

Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 01:24
36418d9

Automated nightly from testing @ 121310c.
Install via Obtainium (prereleases) — NOT for the release track.

Nightly nightly-20260930-010417-9480623

Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 01:04
36418d9

Automated nightly from testing @ 9480623.
Install via Obtainium (prereleases) — NOT for the release track.

Nightly nightly-20260930-004504-b31e6d9

Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 00:45
36418d9

Automated nightly from testing @ b31e6d9.
Install via Obtainium (prereleases) — NOT for the release track.

Nightly nightly-20260929-191604-7eab8aa

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 19:16
36418d9

Automated nightly from testing @ 7eab8aa.
Install via Obtainium (prereleases) — NOT for the release track.