edit | blame | history | raw

2026-06-28 MEXP05 补修

用户目标

以 Mindraw coder 身份只领取 MD-MEXP05-02,修复 PM-MEXP05-GATE 独立 review 的两个 No-Go 阻断项:AssetStore temp symlink escape,以及 save / repair 后续 scene 或 manifest 写失败后残留本轮新增 blob。

已完成事项

  • 读取并遵守项目入口规则、统一台账、CODEGRAPH.md、MEXP05 QA 文档和相关全局研发 / QA / 会话记忆规则。
  • 修复 src-tauri/src/asset_store.rssrc-tauri/src/lib.rs 的原子 temp 写入,改为 OpenOptions::create_new(true),预置 temp symlink / 旧 temp 文件 fail-closed。
  • AssetStore save / repair 写入时记录本轮新建 blob;后续 drawing.excalidrawmanifest.json 写失败时只删除这些本轮新增 blob,不删除既有资产,不自动清理 orphan。
  • 新增 3 个 MEXP05 回归测试:
  • mexp05_preexisting_asset_temp_symlink_does_not_write_outside
  • mexp05_save_manifest_failure_removes_only_new_blob
  • mexp05_repair_scene_failure_removes_new_blob_and_preserves_package
  • 更新 02-P/qa/mindraw-mexp05-assetstore-authority-check.md02-P/plan-progress.markdownCODEGRAPH.mdCHANGELOG.md

关键决策

  • 不改 inlineCache=required,不做 AssetStore API transport,不做 m4c 真实 smoke,不打包、不递增版本、不进入 H8 / formal release。
  • INDEX.md 本轮不新增入口;QA 文档已说明无需更新理由。工作区中 INDEX.md 仍有接手前并行修改,未回滚。
  • 本轮 coder 结论只回到 PM-MEXP05-GATE 复跑 independent review / Gate,不标 PM Gate GO。

验证结果

  • cargo test --manifest-path src-tauri/Cargo.toml mexp05:11 PASS。
  • cargo test --manifest-path src-tauri/Cargo.toml mindraw_package_tests:40 PASS。
  • cargo test --manifest-path src-tauri/Cargo.toml:61 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 build:PASS,仅既有字体解析、dialog 动静态导入和 chunk size warning。
  • git diff --check:PASS。
  • 限定 src-tauri/src/asset_store.rs 与 MEXP05 QA 的隐私 / path 泄漏扫描:无命中。

未决问题

  • 仍需 PM-MEXP05-GATE 复跑 independent review / Gate。
  • 未做 m4c 真实 generated asset smoke;如 PM 认为需要,应另拆任务。
  • 未做 H8 / formal release、打包、版本递增或发布冻结。