Skip to content

fix(desktop): SnapShot shortcut helper no longer adds a Dock icon on macOS - #13286

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
Gigioxx:fix/snapshot-poller-dock-tile
Sep 24, 2026
Merged

maria-rcks merged 1 commit into
pingdotgg:mainfrom
Gigioxx:fix/snapshot-poller-dock-tile

Conversation

@Gigioxx

@Gigioxx Gigioxx commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

On macOS, the SnapShot modifier-pair shortcut (the default "both Shift keys") runs a JXA osascript poller. Its CGEventSourceFlagsState call connects the process to the window server, and LaunchServices registers it as a foreground app attributed to T3 Code. That shows up as an extra "T3 Code" Dock icon with no window, reported as "not responding", until the app quits. This is the osascript tile diagnosed in #12975.

The poller now sets NSApplicationActivationPolicyProhibited before it touches CoreGraphics, so it registers as a background-only process and never gets a Dock tile. The shortcut polling itself is unchanged.

Validation:

  • Before, in the dev desktop app with SnapShots on and the default shortcut: lsappinfo lists the poller under T3 Code (Dev).app as type="Foreground", a second Dock app next to the main process.
  • After, same setup: the poller is type="BackgroundOnly", and the main process is the only foreground T3 Code (Dev) entry.
  • With the Prohibited policy, CGEventSourceFlagsState still returns normally.
  • vp test run apps/desktop/src/snapShot/MacModifierPairShortcutProcess.test.ts passes (3 tests). Targeted vp lint and vp fmt --check pass.

This only affects macOS; Windows and Linux use the Node worker. The other process types in #12975 (backend, accessibility worker) don't create a Dock tile here, so this PR doesn't touch them. No screenshots: the Dock was hidden during testing, so lsappinfo output is the evidence.

Model: Claude Opus 5.5. Harness: Claude Code in T3 Code.

Summary by CodeRabbit

  • Bug Fixes
    • Modifier-key shortcut monitoring now runs without activating the desktop app or presenting it as a regular app window.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 23, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8ff2f1d

Macroscope's review found this PR approvable — This narrowly scoped macOS fix changes only the helper process's activation policy so it does not create an unwanted Dock icon; shortcut polling and all other platform paths remain unchanged. No product defaults, schemas, deployment settings, or static-analysis directives are modified.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Sep 23, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 5915d7a2-0493-4be8-934c-d13333ea2bda

📥 Commits

Reviewing files that changed from the base of the PR and between f5ef0dd and 8ff2f1d.

📒 Files selected for processing (1)
  • apps/desktop/src/snapShot/MacModifierPairShortcutProcess.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

POLLER_SCRIPT imports AppKit and sets the shared application’s activation policy to prohibited before its existing CoreGraphics and modifier-polling logic.

Changes

Mac modifier shortcut polling

Layer / File(s) Summary
Application activation policy
apps/desktop/src/snapShot/MacModifierPairShortcutProcess.ts
POLLER_SCRIPT sets NSApplication’s activation policy to prohibited before the existing polling code.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~4 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 8ff2f

The helper is configured as background-only, and macOS documents no foreground-app requirement for its modifier-state query. No actionable merge-blocking risk is established.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: preventing the macOS SnapShot shortcut helper from adding a Dock icon.
Description check ✅ Passed The description explains what changed, why it was needed, the macOS-only scope, validation results, and the lack of screenshots. It does not use the template headings or checklist, but it provides the…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Comment @coderabbitai help to get the list of available commands.

@maria-rcks
maria-rcks merged commit 6b4b190 into pingdotgg:main Sep 24, 2026
24 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 24, 2026
## What's Changed
* fix(ci): shard release tests like pull request CI by @juliusmarminge in pingdotgg/t3code#13321
* fix(web): show previous worktree branch on second line by @Yash-Singh1 in pingdotgg/t3code#13314
* fix(providers): restore compatibility ranges for every harness by @juliusmarminge in pingdotgg/t3code#13328
* fix(preview): use the visible browser for new agent sessions by @Bil0000 in pingdotgg/t3code#13064
* fix(server): stop replaying old agent alerts on restart by @juliusmarminge in pingdotgg/t3code#13340
* fix(web): use a brain icon for the effort dropdown by @t3-code[bot] in pingdotgg/t3code#13309
* fix(desktop): SnapShot shortcut helper no longer adds a Dock icon on macOS by @Gigioxx in pingdotgg/t3code#13286
* fix(web): composer chip rings no longer clip at the editor edge by @flamboh in pingdotgg/t3code#13301
* fix(web): switches announce their real state to screen readers by @Leos-Khai in pingdotgg/t3code#11580
* fix(shared): preserve final quoted empty CSV records by @Lucenx9 in pingdotgg/t3code#11425
* feat(web): add an interactive 3D device workspace by @juliusmarminge in pingdotgg/t3code#12787


**Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260923.2173...v0.0.43-nightly.20260924.2187

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260924.2187
aorwall added a commit to aorwall/t3code that referenced this pull request Sep 24, 2026
Merges `pingdotgg/t3code` up to `78af372cf`: 27 commits on top of base
`aca3c87cd`. It branches from `main`; no earlier merge PR was open.

## Resolution

Six files conflicted, and each was resolved with the verdict
`preflight.mjs` printed:
- `AGENTS.md` (decide): the fork's Taste prose stays. Upstream's rule
change is folded into it: `shadcn/no-restyle` now fails lint, and a look
that belongs to one feature stays in that feature's component.
- `GitActionsControl.tsx`, `ProjectScriptsControl.tsx`,
`settings/ProjectActionsList.tsx`, `settings/SettingsSidebarNav.tsx`
(converged): these take upstream's markup that no longer restyles `ui`
components. The `FEATURES.openInEditor` gate, the
`editable`/`taskScoped` gates and the personal/admin settings-nav split
are re-applied at their new anchors.
- `pnpm-lock.yaml` (theirs): upstream's copy, re-derived with
`install.mjs`.

`projectScriptEditor.tsx` merged without a conflict but had no
path-policy entry, so it now has one: `project-script-editor`.

**Changes needed after the merge.** Upstream pingdotgg#13210 made
`shadcn/no-restyle` a lint error. That surfaced 65 violations, all in
fork-only files, and I fixed them at the call sites:
- `DialogPanel` in the Moatless settings dialogs keeps its own padding.
- Inputs use `font="mono"`.
- The sandbox tooltip uses `variant="code"`.
- The repository search field uses `InputGroup`.
- Muted captions in the sidebar filter are plain elements.
- The task-link empty state uses the `Empty` defaults.

`ui/textarea.tsx` gained the same `font` prop `Input` already has,
recorded as inventory entry `textarea-mono-font`. **Visual change to
review:** these panels now use the `ui` defaults for font size (13px →
14px) and dialog padding.

## Numbers
- Landed: 255 files, against 239 in the upstream range. The gap of 16 is
the lint fixes above plus `docs/fork/inventory.json`.
- Fork delta: 787 files.

## Verification
`verify.mjs` passed all 10 checks, including the full test step. The
unsupported-method derivation had nothing to add or drop.

## Feature classification

### Usable as-is
- Back/forward navigation with mod+[ and mod+] (pingdotgg#13212,
`AppSidebarLayout.tsx`, keybindings contract).
- Command palette sorts title matches by recent activity (pingdotgg#13219).
- The previous worktree branch shows on a second line in the branch
toolbar (pingdotgg#13314).
- A context-chip component, `ui` components owning their own variants,
composer chip rings no longer clip, a brain icon for the effort
dropdown, and accessible switch state (pingdotgg#13192–pingdotgg#13210, pingdotgg#13301, pingdotgg#13309,
pingdotgg#11580).
- CSV preview keeps a final quoted empty record (pingdotgg#11425).
- Mobile recovers from screen render errors (pingdotgg#13197); mobile version
bump.

### Unsupported in Moatless / needs implementation
- **Interactive 3D device workspace** (pingdotgg#12787,
`apps/web/src/components/device/**`). It sits behind the existing
`FEATURES.deviceHub` gate, and the `device.*` methods are still not
dispatched. It is covered by the existing device-hub gap.
- **Preview automation drives the visible browser for new agent
sessions** (pingdotgg#13064, `PreviewAutomationBroker.ts`,
`previewAutomation.ts`). Added to the existing preview-automation gap.
- **Mobile environment and provider update management** (pingdotgg#13302). It is
a paired-device surface, covered by the existing mobile gap.
- Desktop-only fixes (SnapShot Dock icon pingdotgg#13286, keyring test removal):
not applicable.

### Backend behavior to consider reproducing in Moatless
- **Don't replay stale agent alerts after a restart** (pingdotgg#13340,
`AgentAwarenessRelay.ts`). The relay publishes a completed or failed
thread only if its latest turn finished after the server started.
- **Normalise vendor-specific provider versions before the compatibility
check** (pingdotgg#13328, `providerCompatibility.ts`, `model-manifest.json`). It
strips Cursor's build hash and Antigravity's `agy_acp_server_` prefix,
and restores the ranges for every harness.

Both are recorded under "Runtime fixes upstream made to its own server"
in `docs/fork/gaps.md`. The tracker entry is in
`docs/fork/upstream-merge-log.md`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---
Moatless task:
https://moatless.soaplabstest.com/tasks/0735cf38-d4cd-497a-87e7-ed2bc5c58ba6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants