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¶
- Reproduce the issue (or at least, dictate something that fails the way you want to report).
- In Wristotle Companion, open Settings → Diagnostics → "Copy diagnostics + open Codeberg issue".
- The app builds a markdown bundle, copies it to your clipboard, and opens the Codeberg new-issue page in a browser.
- Paste the bundle into the issue body.
- Edit the placeholder "Issue / Steps to reproduce / Expected / Actual" sections at the top of the bundle.
- 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:
- Copies up to 3 most-recent saved WAV files to
filesDir/diagnostics/. - Lists their absolute paths in the report.
- 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
Where reports go¶
Codeberg issues at:
- Companion: codeberg.org/wristotle/wristotle-companion/issues
- Watch: codeberg.org/wristotle/wristotle/issues
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.