# M4C-GH-02 人工 GUI 闭环 ## 用户目标 由固定 QA 准备 A/B QA-only 画布,Owner 只负责在 WebView 手工输入并保存不同 marker;QA 完成 preview refresh、A/B 内容隔离、provenance 和现场清理,给出正式终态。 ## 已完成事项 - Project A / B 均通过 GH-02 候选真实 `openPackage` API 打开。 - Owner 分别保存 `M4C-GH02-A-260713` 与 `M4C-GH02-B-260713`。 - App 真实 `previewSnapshot` 对 A/B 均返回 `READY`,full-canvas PNG 与 Owner 截图一致。 - A-only/B-only marker 隔离、不同 path/document ID/hash 与无 stale service 串线均 PASS。 - App 正常退出,进程为 0,runtime capability 已清理。 - 正式 QA 报告/JSON 与统一台账更新为 PASS。 ## 关键决策 marker 是自由手绘 strokes,不能用 literal string grep 判断内容;采用 Owner 保存截图 + App 生成 full-canvas preview PNG 的双重视觉复核,并辅以 path、document ID、source-content SHA 和 preview SHA 证明项目隔离。 ## 核心事实 / 变更快照 - 任务终态:`PM_NOTIFY_READY QA-M4C-GH-02-OWNER-GUI-ASSIST RESULT=PASS`。 - A:`mdoc_18c1bc161e6522d0_17b85`;preview SHA `9846fd40ba735139c43b21d2f5061ac4d01b0989abb4c31bcd6f7bd69910d59e`;source SHA `8e975f7a2f194d050befc4cefb807e64184ac38f194bc6dfdb0f79824bac1971`。 - B:`mdoc_18c1bc161f0c7e90_17b85`;preview SHA `fe754fe7a5b9387c772a89f53ce7f9361ca3356ade3259cd5a9c8bcc616f9495`;source SHA `500222a6605c37b2e8775d34a2592f5030fccd6d3eba5402f0b0056b94b093af`。 - 变更前:正式 public candidate QA 为 PARTIAL,缺 save-refresh 与 marker isolation。 - 变更后:正式 public candidate QA 为 PASS;仍不代表 PMO release GO 或 GitHub publication。 - 证据:`02-P/M4C-GitHubOpenSource/qa/qa-m4c-gh-02-public-candidate-evidence-20260712/owner-gui-assist-20260713/`。 ## 文件变更 更新正式 QA 报告/JSON、`02-P/plan-progress.markdown`、`02-P/PMO_INBOX.md`;新增 QA 证据和本会话记录。未改源码、candidate、App、DMG 或 GitHub。 ## 可复用命令 / Runbook 用途:对既有 QA-only Project A/B 调用真实 App preview,并确认现场恢复。前置条件是 Mindraw `1.2.4 / Build202607071930` 已启动且 capability healthy。 ```bash LIB='/Users/ar/Projects/Mindraw/P2.mindrawforcodex/03-O/C2.builds/M4C-GitHubOpenSource/mindraw4agent-0.1.3-public-source-candidate-GH20260712135055-M4C-GH-02/source/plugins/mindraw/lib/project-canvas.mjs' node --input-type=module -e 'const {inspectProjectCanvas}=await import(process.argv[1]); console.log(JSON.stringify(await inspectProjectCanvas({projectRoot:process.argv[2],createNew:false}),null,2))' "$LIB" '/private/tmp/qa-m4c-gh-02-real-app-20260713/project-a' node --input-type=module -e 'const {inspectProjectCanvas}=await import(process.argv[1]); console.log(JSON.stringify(await inspectProjectCanvas({projectRoot:process.argv[2],createNew:false}),null,2))' "$LIB" '/private/tmp/qa-m4c-gh-02-real-app-20260713/project-b' ``` 验证:两份 JSON 的 `status` 均为 `READY`,且 path/document ID/preview SHA/source-content SHA 分别独立。清理:正常退出 Mindraw,然后确认 App 进程为 0、`~/Library/Application Support/com.mindraw.desktop/runtime/write-api.json` 不存在。 搜索关键词:`QA-M4C-GH-02-OWNER-GUI-ASSIST`、`previewSnapshot`、`M4C-GH02-A-260713`、`M4C-GH02-B-260713`。 ## 未决问题与后续建议 QA 无未决缺口。下一步由 PMO 消费 PASS 并执行 `PM-M4C-GH-GATE`;不得把 QA PASS 直接等同于 release GO。