Repository navigation
[Bug]: SnapShots keep triggering while typing even though the feature is turned off (stable 0.0.42, macOS) #12769
Description
Activity
Triage
Confirmed against current
main. This is a real desktop SnapShot bug, still present, and not a “settings failed to save” issue.client-settings.jsonwithsnapShotEnabled: falseis doing what it should. The remaining flood is leftover pending captures plus a renderer coordinator that never looks at that flag.What the traces and screenshots show
The two captures in today’s desktop trace (
10:27:21,11:14:09) are real shortcut captures (desktop.snapShot.shortcutActivated→capture→persistCapture). The second one sits next tocheckShortcut, so it happened while Settings was still checking/recording the both-Shift pair, i.e. while the feature was still on.After the last
applySettings/configureat11:32:48there are no furthershortcutActivated/capturespans. That matchesapplySettings: whensnapShotEnabledflips off it callsreleaseShortcut()(kills the macOS osascript both-Shift poller) andcapture()fails closed.The symptoms that continue after that — sound, motion, and the toast stack, including with the app in the background — are a second path:
SnapShotCoordinatoris always mounted in__root.tsx. It is not gated onsnapShotEnabled. On mount, focus, visibility,"ready", and any effect-dep change (thread/draft store updates count, even in the background) it callslistPendingSnapShots(). That is the 150+desktop:list-pending-snap-shotspolls with the feature off.For each pending file it:
- Plays the capture sound (
playCaptureSound) before it knows whether delivery can succeed. - If there is no attach target, toasts Snapshot taken, but no project is available / Add a project, then capture the window again.
- Does not acknowledge the file, and removes the id from the “already sounded” set.
So the same leftover
~/.t3/userdata/snap-shots/*.jsonis retried forever. Each retry is another whoosh + another toast. The screenshots on this issue are exactly that toast, on Settings → SnapShots with the toggle off.On the Settings route there is no thread/draft, so
resolveExistingSnapShotTargetoften misses, and ifdefaultProjectRefis empty the coordinator takes the “no project” branch every time.Docs say turning capture off releases the shortcut. The main process does that. The renderer does not stop draining, sounding, or toasting.
Not a duplicate
- fix(desktop): ignore snapshot shortcut repeats during flight #11037 — ignore shortcut repeats while a capture is in flight. Different bug.
- fix(web): attach SnapShots to the open question instead of the hidden composer #12293 — attach to the open question instead of a hidden composer. Different delivery target.
- fix(desktop): restore SnapShot shortcuts after portal restarts #11495 / fix(desktop): enable SnapShots shortcuts on GNOME 45–47 #12596 — Linux portal/GNOME shortcut registration. Not this macOS disable path.
No open issue or PR covers “disabled SnapShots still toast/sound from leftover pendings.”
DesktopSnapShot.ts/SnapShotCoordinator.tsxare unchanged in the relevant paths since v0.0.42.Suggested fix
- Gate
SnapShotCoordinatordrain / sound / toast onsnapShotEnabled. When the flag is off, do notlistPendingon every chat-state effect, and do not play capture feedback. - On disable (or on the “no project” / hard-fail path), either acknowledge/discard the pending files or back off. Do not
continueafter toasting and then immediately allow the same id to sound again. - Add a macOS regression:
configure({ snapShotEnabled: false })mustkill()the osascript both-Shift poller. Today we only assert teardown for Niri / Hyprland / portal. - Optional: put
enabledondesktop.snapShot.applySettings/configurespans, as the report asked. Would have made this trace one read.
Workaround
Fully quit T3 Code, then delete leftover captures under
~/.t3/userdata/snap-shots/(*.json/*.png). Turning the toggle off is not enough while those files remain.Accepting as a desktop SnapShot bug.
- Plays the capture sound (
- addedbugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.acceptedfeature request acceptedfeature request acceptedvia-triageFiled through npx t3 triageFiled through npx t3 triage
on Sep 20, 2026 I'd like to take this — focused fix so the SnapShots shortcut listener is torn down when the feature is off.
stepping back — #12775 already covers this


Before submitting
Area
apps/desktop
Steps to reproduce
I don't have a fully deterministic repro; it recurs during ordinary typing.
Expected behavior
With SnapShots disabled, the shortcut listener should be torn down. Nothing SnapShot-related (flash, sound, animation, capture) should ever fire.
Actual behavior
The SnapShot flash / sound / animation keeps triggering repeatedly while I'm typing, even though the feature is turned off. It appears to be the both-Shift-keys shortcut still being live after the feature is disabled.
Persisted settings at the time (
~/.t3/userdata/client-settings.json):Impact
Major degradation or frequent failure
Version or commit
0.0.42 (stable channel,
com.t3tools.t3code)Environment
macOS 27.0 (26A428), T3 Code desktop 0.0.42, stable update channel (
updateChannelConfiguredByUser: true)Logs or stack traces
SnapShot spans from
~/.t3/userdata/logs/desktop.trace.ndjson*for today (local time), polling spans (listPending/ensureTrustedSender) omitted:Notes on the trace:
desktop.snapShot.shortcutActivated, i.e. the keyboard shortcut, not a UI action.applySettings/configurespans carry no attributes, so the trace doesn't show whetherenabledwas true or false at each point. Logging the appliedenabledvalue there would make this much easier to diagnose.shortcutActivated/capturespans, so the flash/sound/animation path seems to fire without going through (or being recorded by) the capture pipeline.desktop:list-pending-snap-shotscontinuously while the feature is off (150+ spans in ~30 minutes).Workaround
None found. Turning the feature off does not stop it.