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、用户验收或正式发布。hdiutil verify、xcrun stapler validate、DMG spctl、source tag、manifest metadata、DMG read-only mount、mounted App metadata、mounted App codesign 和 App spctl 均通过。/Applications、首次 GUI 启动、.mindraw / mindraw:// system handler、Codex sidebar、Edit / double-click、保存刷新、重启、rollback / uninstall;原因是当前机器不是 fresh / clean 环境,且 /Applications/Mindraw.app 已存在 1.2.3 / Build202607042351。/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 入口。PARTIAL QA-EDC-04 WAITING_FOR_FRESH_MACHINE_OR_USER_OPERATION。/Applications/Mindraw.app 的验证动作。QA-EDC-04 状态与证据链。02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.md02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.json02-P/plan-progress.markdownQA-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、用户验收或正式发布。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.md02-P/MEXP15-SignedNotarizedDMG/qa/qa-edc-04-signed-notarized-dmg-validation-report-20260707.json02-P/plan-progress.markdownINDEX.md.codex-sessionhistory/2026-07-07-MEXP15QA执行.md.codex-sessionhistory/COMMANDS.md用途:复跑 MEXP15 signed / notarized DMG artifact 层 QA 验证。该 Runbook 不覆盖 fresh machine GUI、Codex sidebar 或 rollback;这些仍需要 prepared environment 和截图。
前置条件:
/Applications/Mindraw.app。.p12 或 Keychain secret。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 / 签名检查:
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"
主力机安全检查:
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
验证步骤:
5a053f02910463507879b42bb63445810eae3bfb2a9730c65f753e32e5d74df3 和 1c9af6795bb239f3d92d84bd864e7df524845683219de37d6c021f8cdeb20931。stapler 必须显示 validate action worked。spctl 必须 accepted,source 为 Notarized Developer ID。com.mindraw.desktop、version 1.2.4、build Build202607071930,并包含 mindraw URL scheme 和 .mindraw package document type。清理 / 恢复:
trap cleanup EXIT 自动 detach。hdiutil detach <mountpoint>。搜索关键词:QA-EDC-04、Build202607071930、WAITING_FOR_FRESH_MACHINE_OR_USER_OPERATION、stapler validate、spctl accepted、5a053f02910463507879b42bb63445810eae3bfb2a9730c65f753e32e5d74df3。
.mindraw / mindraw:// system handler、Codex sidebar、Edit / double-click、保存刷新、重启、rollback / uninstall。PM-EDC-REGATE-04,或继续派 QA 等待 Owner / fresh machine 补充证据。