# 2026-07-07 MEXP15 QA-EDC-04 执行记录 ## 用户目标 PMO 恢复派工 `QA-EDC-04`,要求 QA 基于 `MD-EDC-02` 已产出的 `1.2.4 / Build202607071930` signed / notarized / stapled DMG,按已准备的验证矩阵执行普通用户路径验证,写入 QA validation report,回写统一台账,并回报 PMO。 边界:不改源码、构建脚本、候选包或发布材料;不记录 notary profile、Apple ID、password、API key、私钥、`.p12` 或 Keychain secret;如没有 fresh machine / clean macOS user,不得把本机普通 smoke 冒充跨机器验证。 ## 已完成事项 - 读取并遵守 `AGENTS.md`、`INDEX.md`、`02-P/plan-progress.markdown` 的 `P-20260707-signed-notarized-dmg`、`QA-EDC-04` 验证矩阵、`MD-EDC-02` 自查 Markdown / JSON、Review Request `crg-583d507f679`。 - 复核 `crg-583d507f679=PASS_SOURCE_DIFF_ONLY` 的边界:只覆盖 source diff,不覆盖 artifact、QA、PMO Gate、用户验收或正式发布。 - 对当前可安全执行的 artifact 层验证完成 QA 复核:DMG / manifest SHA、`hdiutil verify`、`xcrun stapler validate`、DMG `spctl`、source tag、manifest metadata、DMG read-only mount、mounted App metadata、mounted App `codesign` 和 App `spctl` 均通过。 - 未执行 copy to `/Applications`、首次 GUI 启动、`.mindraw` / `mindraw://` system handler、Codex sidebar、Edit / double-click、保存刷新、重启、rollback / uninstall;原因是当前机器不是 fresh / clean 环境,且 `/Applications/Mindraw.app` 已存在 `1.2.3 / Build202607042351`。 - 写入 QA 报告和机器可读摘要: - `/Users/ar/Projects/Mindraw/02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.md` - `/Users/ar/Projects/Mindraw/02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.json` - 回写 `/Users/ar/Projects/Mindraw/02-P/plan-progress.markdown` 的 MEXP15 状态、任务卡、证据入口和 Progress Log。 - 更新 `/Users/ar/Projects/Mindraw/INDEX.md`,新增 QA-EDC-04 report / JSON 入口。 ## 关键决策 - QA 结论为 `PARTIAL QA-EDC-04 WAITING_FOR_FRESH_MACHINE_OR_USER_OPERATION`。 - artifact 层可判定为 PASS,但普通用户完整路径不得判定 PASS。 - 当前主力机已有 Mindraw 安装,不执行会覆盖或删除 `/Applications/Mindraw.app` 的验证动作。 ## 核心事实 / 变更快照 - 变更对象:MEXP15 `QA-EDC-04` 状态与证据链。 - 事实来源: - `02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.md` - `02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.json` - `02-P/plan-progress.markdown` - 变更前:`QA-EDC-04` 计划已准备,等待 `MD-EDC-02` artifact 后执行;台账状态为 `Active / MD-EDC-02 artifact ready / pending QA-EDC-04 and PM-EDC-REGATE-04`。 - 变更后:`QA-EDC-04` 当前可安全验证范围已执行,台账状态改为 `Active / QA-EDC-04 partial artifact validation pass / waiting fresh machine or user operation / pending PM-EDC-REGATE-04`。 - 候选基线:`1.2.4 / Build202607071930`,DMG SHA256 `5a053f02910463507879b42bb63445810eae3bfb2a9730c65f753e32e5d74df3`,manifest SHA256 `1c9af6795bb239f3d92d84bd864e7df524845683219de37d6c021f8cdeb20931`,source commit / tag 均指向 `583d507f679866f670b4fec82f1e631d4a9dbf54` / `v1.2.4-build20260707.1930-mexp15-signed-notarized`。 - 范围边界:`crg-583d507f679` 是 source-diff-only PASS;本 QA partial 不代表 PMO Gate、用户验收或正式发布。 - 验证证据:JSON parse 通过;报告和台账中记录的 terminal signal 为 `PARTIAL QA-EDC-04 WAITING_FOR_FRESH_MACHINE_OR_USER_OPERATION`。 ## 文件变更 - 新增:`02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.md` - 新增:`02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.json` - 修改:`02-P/plan-progress.markdown` - 修改:`INDEX.md` - 新增:`.codex-sessionhistory/2026-07-07-MEXP15QA执行.md` - 修改:`.codex-sessionhistory/COMMANDS.md` ## 可复用命令 / Runbook 用途:复跑 MEXP15 signed / notarized DMG artifact 层 QA 验证。该 Runbook 不覆盖 fresh machine GUI、Codex sidebar 或 rollback;这些仍需要 prepared environment 和截图。 前置条件: - DMG 和 manifest 路径存在。 - 不在主力环境上覆盖 `/Applications/Mindraw.app`。 - 不输出或记录 notary profile、Apple ID、password、API key、私钥、`.p12` 或 Keychain secret。 ```bash DMG="/private/tmp/mindraw-md-edc-02-signed-notarized-20260707/03-O/C2.builds/releases/Build202607071930/Mindraw_1.2.4_aarch64-Build202607071930.dmg" MANIFEST="/private/tmp/mindraw-md-edc-02-signed-notarized-20260707/03-O/C2.builds/releases/Build202607071930/release-manifest.json" WT="/private/tmp/mindraw-md-edc-02-signed-notarized-20260707" sw_vers uname -m whoami shasum -a 256 "$DMG" "$MANIFEST" hdiutil verify "$DMG" xcrun stapler validate "$DMG" spctl --assess --type open --context context:primary-signature --verbose=4 "$DMG" git -C "$WT" rev-parse HEAD git -C "$WT" rev-parse v1.2.4-build20260707.1930-mexp15-signed-notarized^{} git -C "$WT" status --short --branch ``` 只读挂载和 App metadata / 签名检查: ```bash set -euo pipefail DMG="/private/tmp/mindraw-md-edc-02-signed-notarized-20260707/03-O/C2.builds/releases/Build202607071930/Mindraw_1.2.4_aarch64-Build202607071930.dmg" MOUNT="$(mktemp -d /tmp/mindraw-qa-edc-04-mount.XXXXXX)" cleanup() { hdiutil detach "$MOUNT" >/dev/null 2>&1 || true rmdir "$MOUNT" >/dev/null 2>&1 || true } trap cleanup EXIT hdiutil attach -nobrowse -readonly -mountpoint "$MOUNT" "$DMG" ls -la "$MOUNT" APP="$MOUNT/Mindraw.app" test -d "$APP" test -L "$MOUNT/Applications" -o -d "$MOUNT/Applications" INFO="$APP/Contents/Info.plist" /usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$INFO" /usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$INFO" /usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' "$INFO" /usr/libexec/PlistBuddy -c 'Print :CFBundleURLTypes' "$INFO" /usr/libexec/PlistBuddy -c 'Print :CFBundleDocumentTypes' "$INFO" codesign --verify --deep --strict --verbose=4 "$APP" spctl --assess --type execute --verbose=4 "$APP" ``` 主力机安全检查: ```bash if [ -d /Applications/Mindraw.app ]; then /usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' /Applications/Mindraw.app/Contents/Info.plist /usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' /Applications/Mindraw.app/Contents/Info.plist /usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' /Applications/Mindraw.app/Contents/Info.plist else echo 'NO_INSTALLED_MINDRAW_APP' fi ``` 验证步骤: - SHA 输出必须匹配 `5a053f02910463507879b42bb63445810eae3bfb2a9730c65f753e32e5d74df3` 和 `1c9af6795bb239f3d92d84bd864e7df524845683219de37d6c021f8cdeb20931`。 - `stapler` 必须显示 validate action worked。 - DMG 和 mounted App 的 `spctl` 必须 accepted,source 为 `Notarized Developer ID`。 - mounted App metadata 必须是 bundle id `com.mindraw.desktop`、version `1.2.4`、build `Build202607071930`,并包含 `mindraw` URL scheme 和 `.mindraw` package document type。 清理 / 恢复: - 只读挂载脚本通过 `trap cleanup EXIT` 自动 detach。 - 如手动挂载未清理,执行 `hdiutil detach `。 搜索关键词:`QA-EDC-04`、`Build202607071930`、`WAITING_FOR_FRESH_MACHINE_OR_USER_OPERATION`、`stapler validate`、`spctl accepted`、`5a053f02910463507879b42bb63445810eae3bfb2a9730c65f753e32e5d74df3`。 ## 未决问题 - 仍需 fresh machine、clean macOS user 或 prepared rollback environment 执行普通用户安装、首次启动、`.mindraw` / `mindraw://` system handler、Codex sidebar、Edit / double-click、保存刷新、重启、rollback / uninstall。 - 仍需 PMO 判断是否基于当前 partial artifact PASS 进入受限 `PM-EDC-REGATE-04`,或继续派 QA 等待 Owner / fresh machine 补充证据。 ## 后续建议 - PMO / Owner 提供 fresh machine 或 clean macOS user 后,续派 QA 复用本报告中的 Owner evidence list 补 GUI / sidebar / rollback 证据。 - 若只能由用户手动执行,应要求回传命令输出和截图,尤其是 first launch、Codex sidebar READY / fail-closed、save refresh before/after 和 rollback metadata。