2026-06-28 MEXP05 资产权威化
用户目标
- 以
Coder@mindraw-recovery 身份领取统一台账中的 MD-MEXP05-01。
- 完成
M-体验05:.assets 权威化体验 Alpha 的 Mindraw Phase 4 .mindraw/.assets 权威化体验 Alpha 垂直切片。
- 不领取
M4C-*、PM-*、H*,不做 H8 / formal release、打包、版本递增、真实 AI provider、Finder PDF 拖拽或 m4c direct write .assets。
已完成事项
- 新增
src-tauri/src/asset_store.rs,实现第一批 AssetStore Alpha dual 模式。
.mindraw 创建 / 保存路径会从 referenced inline image files.dataURL 计算 SHA-256,写入 .assets/objects/sha256/...,并更新 manifest.assetStore / manifest.assets[]。
manifest.assets[] 覆盖 assetId、sha256、path、mimeType、byteLength、refs、source.kind,并固定 source.privacy="no-original-path"。
- 保留 inline
files.dataURL,导出 .excalidraw / Obsidian .excalidraw.md 仍自包含,不输出 .assets 包内路径或本机路径。
- 新增
inspect_mindraw_asset_store / repair_mindraw_asset_store,覆盖 missing blob、hash mismatch、illegal path、inline missing;safe repair 只做 missing blob from inline 与 inline hydrate from verified blob。
- 删除图片后不自动清理 orphan blob,manifest record 保留但清空失效 refs,保存重开不失败。
- 拒绝 symlinked
.assets root / blob path,写入 blob 前逐级校验目录,避免跟随 symlink 写到包外目录。
- 模拟生成资产路径通过文件 metadata
customData.mindraw.assetSource.kind="ai-generation" 登记 source.kind=ai-generation 与 role=generated;真实 AI/generated image smoke 留给 PM 视 m4c / provider 条件派发。
- 更新
CODEGRAPH.md、INDEX.md、CHANGELOG.md、02-P/qa/mindraw-mexp05-assetstore-authority-check.md、02-P/plan-progress.markdown。
关键决策
- 第一批固定
assetStore.authority="dual"、inlineCache="required",不实现 optional / omitted inline cache。
- dual package 打开时对 missing blob、hash mismatch、illegal path、inline missing fail-closed;legacy inline package 保持兼容 warning。
- hash mismatch 和 illegal path 不静默选择、不覆盖、不修复;冲突场景留给显式 review / PM Gate。
- 不开放任意 JSON patch,不允许外部工具直接写
.assets。
MD-MEXP05-01 结论为 PASS_FOR_PM_MEXP05_GATE_REVIEW,不等于 PM-MEXP05-GATE GO。
文件变更
src-tauri/src/asset_store.rs
src-tauri/src/lib.rs
CODEGRAPH.md
INDEX.md
CHANGELOG.md
02-P/qa/mindraw-mexp05-assetstore-authority-check.md
02-P/plan-progress.markdown
验证结果
cargo test --manifest-path src-tauri/Cargo.toml mexp05:8 tests PASS。
cargo test --manifest-path src-tauri/Cargo.toml mindraw_package_tests:37 tests PASS。
cargo test --manifest-path src-tauri/Cargo.toml:58 tests PASS。
cargo check --manifest-path src-tauri/Cargo.toml:PASS。
npm run test:run -- src/lib/imageImportPersistence.test.ts src/lib/imageImport.test.ts src/lib/obsidianExcalidraw.test.ts src/store/useStore.test.ts src/lib/mindrawAppWriteApi.smoke.test.ts:5 files / 64 tests PASS。
npm run test:run -- src:29 files / 222 tests PASS。
npm run build:PASS,仅有既有字体运行时解析提示、dialog import 提示和大 chunk 提示。
git diff --check:PASS。
- 限定隐私 / path 泄漏扫描:无命中。
cargo fmt --manifest-path src-tauri/Cargo.toml -- --check 未执行成功:本机 stable-aarch64-apple-darwin toolchain 缺 cargo-fmt / rustfmt。
未决问题
- 真实 AI Frame UI 当前仍是文本 Alpha;真实 generated asset consumption smoke 需要 PM 在 Mindraw API / fixture / provider 条件明确后再派 m4c 复跑。
- AssetStore API 尚未暴露到 H5 live transport;m4c
M4C-H7-01 当前为 PREPARED_WAITING_FOR_MINDRAW。
- PM 仍需执行
PM-MEXP05-GATE,基于 Mindraw QA / review 与 m4c H7 guard 判定是否交用户亲测。
后续建议
- PM Gate 前重点复审
src-tauri/src/asset_store.rs 与 src-tauri/src/lib.rs 的 strict read、safe repair 和 rollback 边界。
- 若 PM 需要真实 generated asset smoke,建议拆出最小 AssetStore fixture / App API 能力后让 m4c 只走 consumer guard,不 direct write
.assets。