edit | blame | history | raw

Mindraw QA — CGEvent 拖放复验

用户目标

对唯一候选 Build202608140433 使用 /tmp 一次性 Swift/CGEvent 或 System Events 完成系统级 Finder→挂载候选画布图片拖放,只以 scene/files/assets/privacy/跨进程重开判定;不安装软件、不改权限、不触碰 /Applications 用户 App。

已完成事项

  • 候选 DMG SHA 精确匹配 c97fd004a81a090e541dfa46afd6b8dbf6dc17090d57960b461cb67161068f0c,只读挂载并按绝对路径绑定候选进程。
  • 一次性 Swift 工具确认 AX、CGEvent listen/post 权限均可用,向 .cghidEventTap 注入 mouseDown、36 段 dragged、mouseUp。
  • AX 定位 Finder 源中心 {1125.5,172} 与候选 AXWebArea {520,102,1200×788},执行原生跨 App 拖放。
  • 发现另一个 Finder 窗口抢占 drop target;QA fixture 暂移到用户目录,按 SHA 校验后原样恢复 QA_ROOT,并确认意外路径无残留。
  • 停止继续注入,候选退出、mount 卸载;确认没有 Mindraw 进程且 DMG SHA 不变。

关键决策

系统原生输入权限与事件注入已证明,但 pasteboard/drop 到达候选未证明。拖后 scene/files/assets 均为零不能推导产品失败,privacy 与跨进程重开也未到达,因此终态为 PARTIAL_AUTOMATION_LIMIT

核心事实 / 变更快照

  • 变更对象:QA-OPS-MD-127-TAG-FIX-REBUILD-04-NATIVE-CGEVENT-DROP Gate 状态。
  • 事实来源:派工、QA 报告/JSON、evidence 和锁定 DMG SHA。
  • 候选:Build202608140433;SHA c97fd004a81a090e541dfa46afd6b8dbf6dc17090d57960b461cb67161068f0c
  • 拖前:0 elements / 0 images / 0 files / 0 assets。
  • 拖后:0 elements / 0 images / 0 files / 0 assets;候选交付未证明。
  • fixture:SHA 28b7b35921b1f971d2360934925d9f0a8c883ecd4d9ab36a7fddea482d27d162;已恢复 /tmp/mindraw-qa-ops-md-127-native-drop-20260814-001/fixtures/native-drop-source.png;用户目录残留不存在。
  • 边界:未启动 /Applications/Mindraw.app,未安装软件或更改权限;发生一次已披露、已恢复的 QA fixture 用户目录误落点。
  • 终态:PM_NOTIFY_READY QA-OPS-MD-127-TAG-FIX-REBUILD-04-NATIVE-CGEVENT-DROP RESULT=PARTIAL_AUTOMATION_LIMIT
  • 验证证据:/Users/ar/Projects/Mindraw/02-P/M4C-GitHubOpenSource/qa/qa-ops-md-127-tag-fix-rebuild-04-native-cgevent-drop-evidence-20260814/

文件变更

  • QA Markdown/JSON 报告、33 项 evidence。
  • plan-progress.markdownPMO_INBOX.mdpmo-active-assignments.json 终态。
  • 集中教训记录、索引与本会话存档。

未决问题与后续建议

需在干净 macOS 用户/干净 Finder session,或人工明确隔离其他 Finder 窗口后重跑。只有 drop 确实进入候选,并形成 image/files/manifest/blob 增量、通过隐私检查且跨进程重开持久化,才能 PASS。

可复用命令 / Runbook

用途:复核 CGEvent 原生拖放的输入权限、fixture 身份、候选绑定和清理状态。

前置条件:正式 App 与旧 QA runtime 已退出;使用独立 QA_ROOT;候选路径和 SHA 已锁定;先清空或人工隔离 Finder 窗口。

QA_ROOT=/tmp/mindraw-qa-ops-md-127-native-drop-20260814-001
DMG=/Users/ar/Projects/Mindraw-worktrees/md-1.2.7-obsidian-scene-compat/03-O/C2.builds/releases/Build202608140433/Mindraw_1.2.7_aarch64-Build202608140433.dmg
shasum -a 256 "$DMG"
shasum -a 256 "$QA_ROOT/fixtures/native-drop-source.png"
ps -axo pid=,comm=,args= | awk '$2 ~ /mindraw$/ || $2 ~ /Mindraw$/ {print}'

验证步骤:Swift 输出必须同时为 AXIsProcessTrusted=trueCGPreflightListenEventAccess=trueCGPreflightPostEventAccess=true;拖放后必须先定位 fixture 实际路径,再检查 drawing/manifest/.assets。

清理 / 恢复:停止挂载候选 PID,hdiutil detach "$QA_ROOT/mount";校验 fixture 回到 QA_ROOT、意外用户路径不存在、DMG SHA 不变、无 Mindraw 进程。

搜索关键词:CGEvent Finder droptopmost ownerPARTIAL_AUTOMATION_LIMITBuild202608140433