Skip to content

Bug reports

When something goes wrong, the in-app diagnostics export gives you a one-tap way to attach useful context to your Codeberg issue without needing to know what adb logcat is.

How to file a bug report

  1. Reproduce the issue (or at least, dictate something that fails the way you want to report).
  2. In Wristotle Companion, open Settings → Diagnostics → "Copy diagnostics + open Codeberg issue".
  3. The app builds a markdown bundle, copies it to your clipboard, and opens the Codeberg new-issue page in a browser.
  4. Paste the bundle into the issue body.
  5. Edit the placeholder "Issue / Steps to reproduce / Expected / Actual" sections at the top of the bundle.
  6. Submit.

If the Include last 3 dictation audio files toggle is on, the bundle also surfaces local file paths for the saved WAVs — attach them to the issue manually (Codeberg's URL prefill can't carry binary attachments).


What's in the bundle

Each report contains:

  • App version + build type — so we know what code you're running.
  • Android version + device model — OS-specific bugs are real.
  • Permission state — Contacts / Phone / SMS / Record Audio / Notification Access / Default voice provider. One-line summary of each.
  • Active models — which Whisper and MiniLM models are currently selected.
  • Installed-app index summary — count of indexed apps + last-scan timestamp.
  • Recent conversation rows — last 10 entries as a markdown table (timestamp, handler, success/fail, NLU intent + confidence, query, response).
  • Recent logs — last ~200 lines from the in-app ring buffer. Covers Whisper inference timing, audio-pipe state, intent routing decisions, media-control tier hits.

Privacy: what gets redacted

Two toggles control what's included:

Redact contact names + numbers + message bodies

Default: on. Recommended for any report you'll paste in a public issue.

With redaction on:

Section What's redacted
Conversation rows query and response columns are blanked to <redacted>. Other columns (timestamp, handler, success, NLU intent + confidence) stay visible.
Log lines Runs of 7+ digits → <digits> (catches phone numbers).

Caveat that the in-app card shows under the toggle: the log section still contains contact names and any other spoken text that ended up in routing decisions. Review the clipboard before submitting if you're privacy-sensitive — the clipboard contents are right there, you can edit them or remove lines before pasting into the issue.

With redaction off, full conversation query/response text appears in the bundle. Only flip it off if you're sharing the report privately (e.g. as a Codeberg-issue comment with the participants you trust).

Include last 3 dictation audio files

Default: off (and disabled when conversation audio capture itself is off — no WAVs to attach).

When enabled, the bundle:

  1. Copies up to 3 most-recent saved WAV files to filesDir/diagnostics/.
  2. Lists their absolute paths in the report.
  3. The audio doesn't go through the clipboard; you attach the files manually after submitting the issue.

Useful for reports where the issue is in transcription quality ("Whisper heard X instead of Y") or audio capture itself ("dictation got no audio"). Less useful for routing or UI bugs — leave it off there.


Where the bundle lives on disk

The markdown bundle isn't persisted — it lives only on the clipboard. Once you paste it (or copy something else), it's gone.

The optional audio attachments are persisted at /data/data/com.lazydevs.wristotle/files/diagnostics/ (app-private). Each export wipes that directory before writing new files, so only the most recent export's audio is there. Survives across exports but cleared on uninstall.


In-app log ring buffer

The "Recent logs" section comes from an in-app buffer (Android 10+ blocks third-party apps from reading their own logcat, so we mirror at the source). The buffer:

  • Holds the most recent ~500 lines — covers a few minutes of activity.
  • Is process-scoped — lost on app process death. If you're reporting a crash, reproduce it again right before exporting so the relevant lines are in scope.
  • Captures only the high-signal call sites: Whisper recognizer events, audio pipe state, media-session targeting, app-index lookups, dispatch routing decisions. System chatter is filtered out.

If your bug involves a flow that should be in the buffer but isn't (e.g. some part of the code we missed migrating), file the issue and mention "log buffer doesn't show " — we can add the missing call site.


Where reports go

Codeberg issues at:

The in-app button opens the companion repo's new-issue page by default. If the bug is clearly watch-side (firmware, dictation session, on-screen UI), feel free to file on the watch repo instead — paste the same bundle, just change the URL.