edit | blame | history | raw

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[] 覆盖 assetIdsha256pathmimeTypebyteLengthrefssource.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-generationrole=generated;真实 AI/generated image smoke 留给 PM 视 m4c / provider 条件派发。
  • 更新 CODEGRAPH.mdINDEX.mdCHANGELOG.md02-P/qa/mindraw-mexp05-assetstore-authority-check.md02-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.rssrc-tauri/src/lib.rs 的 strict read、safe repair 和 rollback 边界。
  • 若 PM 需要真实 generated asset smoke,建议拆出最小 AssetStore fixture / App API 能力后让 m4c 只走 consumer guard,不 direct write .assets