Skip to content

[FEATURE] Say what the app is doing in the system log - #131

Merged
tornikegomareli merged 1 commit into
mainfrom
feature/logging
Sep 8, 2026
Merged

tornikegomareli merged 1 commit into
mainfrom
feature/logging

Conversation

@tornikegomareli

Copy link
Copy Markdown
Owner

There was not one Logger call anywhere in the project. When dictation stopped hearing anything on Bluetooth, AVAudioEngine had stopped itself and said so to nobody: log show returned nothing from this process, and finding it took four throwaway binaries reproducing the audio stack outside the app.

Four categories under one subsystem, com.tgomareli.Talkify: session, audio, speech and delivery. The lines added are the ones that were silent by construction. The audio route changing and whether the rebuild that answers it worked. A session beginning, with its trigger slot and locale, and how it ended, with the outcome and the word count. A speech model downloading. And every path where shaping quietly hands back the words as spoken, which is correct for the user and unhelpful when someone asks why their prompt did nothing.

The constraint that shaped it: nothing carrying what the user said goes through it. Logger redacts interpolations unless they are marked public, so the rule on top is that only error descriptions, locale identifiers, enum case names, counts and durations are ever public. A session's word count is logged; the words are not. Every call site is listed in the type's doc comment and I audited each public interpolation against that rule.

Verified that the subsystem, the categories and the privacy annotations behave, including that a public value renders rather than reading as private. I could not drive a real dictation session through the status menu to capture an end-to-end trace, so the call sites themselves are verified by reading rather than by running.

Closes #129

There was not one Logger call in the project. When dictation stopped
hearing anything on Bluetooth, AVAudioEngine had stopped itself and said
so to nobody, and finding it took four throwaway binaries reproducing
the audio stack outside the app.

Four categories under one subsystem: session, audio, speech, delivery.
The lines are the ones that were silent by construction — the route
change and the rebuild that answers it, a session beginning and how it
ended, a model download, and every path where shaping quietly returns
the words as spoken.

Nothing that carries what the user said goes through it. Every value
marked public is an error description, a locale identifier, an enum case
name, a count or a duration. The word count of a session is logged; the
words are not.

Closes #129

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Abfbei4sXuCngAWEH8Z2k
@tornikegomareli
tornikegomareli merged commit 795e412 into main Sep 8, 2026
1 check passed
@tornikegomareli
tornikegomareli deleted the feature/logging branch September 8, 2026 11:07
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.

The app has no logging, so a silent failure is invisible

1 participant