Skip to content

[P1][macOS][Privacy UX] permission preflight・revocation・import-only fallbackを実装する #124

Description

@tuzuminami

背景 / 現状

native recordingで必要となるmacOS capability/permissionは、初回prompt、拒否、System Settingsでの撤回、sleep/relaunch後まで一貫して説明・再評価されなければならない。現在はDiagnosticsの「取得しない」説明とrecording導線がある一方、TCC permission lifecycle、prompt前説明、deny/revoke時の安全なimport-first継続を一つのproduct contractとして所有していない。

目的

native recordingが必要とする最小権限を透明に扱い、拒否・撤回・未対応Macでもデータを失わず、CSV/JSON importだけで安全に業務分析を続けられるようにする。

対象

  • collector capability inventoryとrequired/optional permissionのallowlist
  • prompt前の日英説明(目的、取得data、取得しないdata、撤回方法、拒否時の代替)
  • launch、record開始、resume、System Settings復帰時のpermission preflight/recheck
  • missing/denied/revokedのstable error/recovery action、System Settings導線、import-only fallback
  • consent explanation、recording indicator、diagnostics、support bundleでの一貫した状態
  • packaged clean-Macでのdeny/revoke E2E

非対象

Claude Code実装契約

  1. native collectorが実際に使うOS APIからpermission inventoryを導出し、required/optional/no-permissionをcodeとdocsで同じallowlistにする。不要なTCC promptを将来のために予約しない。
  2. promptの前に、目的・収集する最小data・明示的に収集しないdata・拒否/撤回方法・import-only fallbackを日英で表示する。実際のrequired permissionと説明が違う場合はrecord開始をfail closedする。
  3. permission stateを起動、record開始、pause/resume、foreground復帰、agent reconnectで再評価する。denied/revoked/unknown時はnew collectionを開始/継続せず、既存dataを削除せず、#63のsafe recovery actionを返す。
  4. importはpermissionの有無に関わらず利用できる。recording unavailableを製品全体の利用不可と表示しない。
  5. #64のparticipant説明、#98の常時indicator/emergency pause、[P1][Operations UX] ワンクリックのprivacy-safe診断レポートと復旧導線を提供する #55/#94のdiagnostics/support bundleは同じcapability/statusを示す。status、path、token、event内容をlog/bundleへ保存しない。
  6. prohibited permission requestが0であることを自動検証し、実装差分でcapability/entitlement/Info.plistが増えたらreview/CIで検出する。

受け入れ条件

  • prompt前説明と実際に要求するpermissionが一致し、不要なScreen Recording/Microphone/Camera/Input Monitoring requestが0件。
  • permission不要のCSV/JSON import、analysis、safe exportは全permission stateで利用できる。
  • deny/revoke/unknown状態ではnew native collectionが0件で、indicator、diagnostics、participant explanation、recovery actionが一致する。
  • revoke後に既存eventを消さず、resume/record開始は安全に止まり、System Settingsまたはimport-onlyへの導線がkeyboard/VoiceOverで操作できる。
  • 日英、restart/sleep/relaunch、agent crash/permission changeで状態が古くならない。
  • clean packaged Macのpermission-denied/revoked E2Eが通る。

検証

capability matrix、TCC deny/revoke simulation、restart/sleep/agent reconnect、PII sentinel scan、locale/accessibility、entitlement/Info.plist diff、packaged E2E。

依存関係

#63#64#78#85#98#114。project/consent scopeは #40/#93 に従う。

PR運用

1 Issue = 1 branch / PR。permission inventory、実要求、fallback、テストMac/OS、残余riskをPR本文とparticipant-facing docsに記載する。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:macosmacOS packaging, signing, and lifecyclearea:privacyPrivacy, consent, retention, and data minimizationarea:uxNon-engineer user experiencepriority:P1Required for v1.0 qualityrelease:v1.0Targeted for OpsMineFlow v1.0.0

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions