v0.0.2-alpha.37
Pre-releaseHueMux v0.0.2-alpha.37 — Screen capture works again, and Kotlin shows up in diagnostics
Alpha. If capture started failing on your device in alpha.36, this build
fixes it. It also makes the in-app diagnostics report say something useful
about Kotlin-side failures, which is why the regression survived in the
first place.
Capture is fixed
alpha.36 tried to start audio alongside the screen by passing a third argument
to the Android bridge:
no method startCapture
The Kotlin method takes two. Android's JavaScript bridge matches methods by
name and argument count, so the call failed before anything could start —
screen capture included, which is why your diagnostics showed the capture never
permitted.
The fix is simple and also a small simplification: on Android, internal audio
already rides the same MediaProjection as the screen. One consent dialog has
always yielded both streams, so there was never a flag to pass. The web UI now
says exactly that, and calls startCapture(areaId, id).
Kotlin failures now reach the diagnostics report
Until now, the report's "recent log" only contained what the Go core decided to
say. A Kotlin exception on the capture path — like the missing-method bridge
error — happened and died without a trace, so the report you got back could not
tell you what went wrong.
There is now a global error grab on the Android side. Kotlin errors and
warnings are routed into the same 800-line ring buffer the Go core logs into,
so the next diagnostics report you send will name the Kotlin failure. It is
rate-limited so a hot error loop cannot flood the ring.
A crash is the one failure mode with no trace at all — the process dies with
it. The app now writes the last uncaught exception to disk, and the next
report's host block includes a "last crash" line naming what died.
CI now tests the Kotlin side
The bridge mismatch shipped because nothing checked it: CI ran Go tests, and
the bridge surface lives entirely in Kotlin and JavaScript.
There is now a dedicated Kotlin test job that runs on every push and pull
request. It builds the AAR, compiles the app against it, and runs the unit
tests — including a bridge-contract test that parses every
@JavascriptInterface method and every call site in web/ and fails if a call
names a method with the wrong argument count. The exact regression that broke
alpha.36 would now fail CI in seconds.
What this does not do
It does not change how capture behaves — same one-dialog capture, same audio
path. If alpha.36 capture was working for you, this is a diagnostics and
pipeline release.
Full Changelog: v0.0.2-alpha.36...v0.0.2-alpha.37