Repository navigation
Fix voice turn failures, silent checkout, and broken usage telemetry - #106
Merged
Merged
Conversation
OpenAI rejects a voice change once a session has produced assistant audio (cannot_update_voice), and the app aborted the turn on that error. Pre-turn session updates now omit the voice, and a changed voice setting starts a fresh session at the next turn instead of updating the live one. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The launch-time prewarm connected without starting a telemetry session, so endTurn() returned early and no skilly_turn_completed was sent for any turn on that connection. PostHog showed these as messages with no response while the backend recorded relay_completed usage for each one. The telemetry session now starts at the first turn on a prewarmed connection, which keeps idle prewarm time out of the session duration used for billing. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
startCheckout() returned without any user-visible result on missing auth, a missing session token, non-200 responses, a malformed URL, a failed browser open, or an exception, and every paywall dismisses right after it returns. Missing auth now opens sign-in, a 401 refreshes the session once and retries (same recovery as the voice token fetch), and every other failure shows an alert with a support contact. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
captureServerEvent defaulted to tenant_id or a shared "skilly_web_backend" identity, and the 21 Mac and extension events that only carry workos_user_id never passed an explicit id. Every account's entitlement checks and usage reports collapsed into one PostHog person. The default now prefers workos_user_id, which matches the native app's distinct_id, so backend and app events join on the same person. Tenant-scoped events are unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
First-run setup still played ff.mp3 (third-party game music inherited from the Clicky fork), the "hey! i'm skilly" welcome animation, and the intro video, and Settings plus the panel footer offered "Replay intro". Finishing setup now shows the cursor overlay directly; the music file, player, and replay entry points are gone. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Debug and production builds both claimed skilly://, so the WorkOS callback opened whichever copy LaunchServices preferred, usually the installed production app, which then rejected the foreign OAuth state. Debug builds now register skilly-dev:// and prefix their OAuth state with skillydev_; the backend callback page routes those states to skilly-dev://. Production states and the WorkOS redirect are unchanged. The project file still said 1.6 (1) because release.sh only passed the version to xcodebuild. It now reads 3.4 (30), and release.sh writes each released version back into the project file. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Production PostHog (Oct 18–25) showed real users losing turns, checkouts failing with no feedback, and dashboards undercounting usage. This fixes the causes found in the app and backend.
Mac app
cannot_update_voiceaborted turns. Every turn on a reused Realtime session resentaudio.output.voice, which OpenAI rejects once the session has spoken. Both new users this week hit it in their first session. Pre-turn updates now omit the voice; a changed voice setting starts a fresh session at the next turn.endTurn()returned early and noskilly_turn_completedfired. Since Oct 12 the backend recorded 254 completed responses against 92 tracked turns. The telemetry session now starts at the first turn on a prewarmed connection, keeping idle prewarm time out of billed seconds.startCheckout()returned with no user-visible result on missing auth, missing token, non-200, malformed URL, browser-open failure, or exception, and every paywall dismisses right after it. Missing auth now opens sign-in, a 401 refreshes once and retries, and other failures show an alert.ff.mp3(third-party game music from the Clicky fork), the welcome animation, or the intro video; "Replay intro" is gone.skilly-dev://and askillydev_OAuth state prefix, so sign-in returns to the dev build instead of an installed production copy. Project version now reads 3.4 (30), andrelease.shwrites each released version back to the project file.Backend
captureServerEventnow defaults toworkos_user_id(the native app's distinct_id) for the 21 user-scoped events; tenant events are unchanged./api/mac/auth/callbackroutesskillydev_states toskilly-dev://; production states still go toskilly://. No WorkOS dashboard change needed.Verification
bun test295/295 (3 new identity tests, 2 new callback tests),tsc --noEmitclean.did_open: true).Deploy notes
release.sh.project.pbxprojwith each release now thatrelease.shupdates it.🤖 Generated with Claude Code