Skip to content

feat(wizard): pre-emptive macOS App-Data prompt forewarning in connect step (Spec 078 US4)#910

Merged
Dumbris merged 2 commits into
mainfrom
feat/078-connect-trust-tcc-copy
Jul 24, 2026
Merged

feat(wizard): pre-emptive macOS App-Data prompt forewarning in connect step (Spec 078 US4)#910
Dumbris merged 2 commits into
mainfrom
feat/078-connect-trust-tcc-copy

Conversation

@Dumbris

@Dumbris Dumbris commented Jul 24, 2026

Copy link
Copy Markdown
Member

Closes the last open task on the P0 connect-trust epic (roadmap: connect-trust-tcc-copy). Implements Spec 078 US4 / FR-011.

What

The per-client preview read behind Review & connect is the first access that can fire the macOS App-Data privacy prompt — and an unexplained “mcpproxy” wants to access data from other apps dialog is itself a reason to abandon the step (Spec 078). The wizard's ClientRow now shows a plain-language forewarning before that action can fire:

macOS may ask for permission when you review or connect — the “mcpproxy” wants to access data from other apps prompt refers to this config file. Choose Allow so mcpproxy can read and update it.

Design

  • Keyed off config_path (~/Library/Application Support/…), not OS sniffing: the prompt fires on the daemon's machine for exactly the protected-app-data set (Claude Desktop, VS Code), and those paths only occur on darwin — no new API call, inherently macOS-only, scoped to precisely the clients the spec's acceptance scenario 2 describes.
  • Shown only where Connect is actually offered (supported, exists-or-bridge, not connected) and dropped once a preview is open — at that point the protected read already succeeded.
  • Spec 075 post-denial remediation surface untouched (acceptance scenario 3).

Verification

  • 5 new unit tests: frontend/tests/unit/onboarding-wizard-tcc-note.spec.ts (watched failing first); full frontend suite 302/302, vue-tsc clean.
  • Live Playwright sweep against a fresh build + real client registry: specs/078-connect-trust-preview/verification/tcc-note-report.html (committed) — VS Code (protected, unconnected) carries the note; connected and dot-directory clients never do.

…t step (Spec 078 US4 / FR-011)

The per-client preview read behind 'Review & connect' is the first access
that can fire the macOS privacy prompt, and only for configs under another
app's protected data (~/Library/Application Support/…). ClientRow now
shows a plain-language note — naming the 'access data from other apps'
prompt and telling the user to choose Allow — exactly where the action is
offered, before it can fire. Keyed off config_path, so it is inherently
macOS-only and scoped to affected clients; dropped once a preview is open
(the read already succeeded) and for connected rows. Spec 075 post-denial
remediation is untouched.

Verification: 5 unit tests + live Playwright sweep report in
specs/078-connect-trust-preview/verification/tcc-note-report.html
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 24, 2026

Copy link
Copy Markdown

Deploying mcpproxy-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: 8b0b0b4
Status: ✅  Deploy successful!
Preview URL: https://2773f6c0.mcpproxy-docs.pages.dev
Branch Preview URL: https://feat-078-connect-trust-tcc-c.mcpproxy-docs.pages.dev

View logs

@github-actions

github-actions Bot commented Jul 24, 2026

Copy link
Copy Markdown

📦 Build Artifacts

Workflow Run: View Run
Branch: feat/078-connect-trust-tcc-copy

Available Artifacts

  • archive-darwin-amd64 (28 MB)
  • archive-darwin-arm64 (25 MB)
  • archive-linux-amd64 (16 MB)
  • archive-linux-arm64 (15 MB)
  • archive-windows-amd64 (28 MB)
  • archive-windows-arm64 (25 MB)
  • frontend-dist-pr (0 MB)
  • installer-dmg-darwin-amd64 (22 MB)
  • installer-dmg-darwin-arm64 (20 MB)

How to Download

Option 1: GitHub Web UI (easiest)

  1. Go to the workflow run page linked above
  2. Scroll to the bottom "Artifacts" section
  3. Click on the artifact you want to download

Option 2: GitHub CLI

gh run download 30102681284 --repo smart-mcp-proxy/mcpproxy-go

Note: Artifacts expire in 14 days.

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@Dumbris
Dumbris merged commit b9618fb into main Jul 24, 2026
38 checks passed
@Dumbris
Dumbris deleted the feat/078-connect-trust-tcc-copy branch July 24, 2026 15:09
Dumbris added a commit that referenced this pull request Jul 25, 2026
…sion (Spec 079 US3) (#911)

* feat(updatecheck): daily check cap + failure backoff + CI nudge suppression (Spec 079 US3)

FR-018: DefaultCheckInterval 4h -> 24h (at most a daily check against the
rate-limited GitHub API); consecutive failures back the periodic loop off
exponentially (2x/4x/8x the interval, capped). CheckNow (user refresh via
/api/v1/info?refresh=true) bypasses the window — explicit intent.

FR-019: CI=true/1 (same convention as the telemetry env-filter) marks the
process non-interactive: the 'Update available' announcement drops to
Debug (no per-run CI log nag) and every VersionInfo carries an additive
nudges_suppressed field (FR-021-safe) that the Web UI banner honors while
status/doctor/info keep reporting the facts.

* docs+oas: update_check cadence/backoff/CI-quiet (Spec 079 US3)

* chore(roadmap): connect-trust done (#910); upgrade-nudge-quiet in_review (#911)

* fix(updatecheck): propagate nudge suppression to tray + sidebar; gen-guard backoff; soften refresh-failure toast (Codex round 1)

- nudges_suppressed added to the generate-types template (contracts.ts is
  generated; the hand-edit would have been wiped and TestContractsInSync
  would fail) and regenerated.
- Go tray decodes nudges_suppressed and hides the menu nudge / demotes
  the log when set; Web UI sidebar 'update' badge honors the shared
  updateNudgesSuppressed store computed (FR-019 covers every nudge
  surface, not just the banner).
- Backoff mutations are generation-guarded and SetConfig clears the
  window on an effective change, so a pre-change failure cannot swallow
  the prompt re-enable/channel-switch check (new test).
- Manual-refresh check failure toast demoted from error to info with
  non-alarming copy (FR-020).

* fix(test): pin CI='' in announce-dedupe test so FR-019 suppression doesn't fire in CI

TestChecker_UpdateAvailableLoggedOncePerVersion asserts the interactive
Info-level 'Update available' announcement — under the CI runner's own
CI=true the new nudge suppression demoted that log to debug and the test
failed in every CI job while passing locally. Verified with CI=true go
test ./internal/... locally (clean sweep).
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.

2 participants