edit | blame | history | raw

2026-06-30 MEXP08B 写回

用户目标

coder2@mindraw 身份领取并完成 MD-MEXP08B-01:让 Mindraw 侧支持外部模型 image result package 通过 App API / controlled mutation 写回 source Frame 右侧 result Frame,并进入 Mindraw-controlled .assets 链路。

已完成事项

  • 扩展 createAiResultFrame mutation,新增可选 imageResult.kind="external-image-result"
  • imageResult 校验 base64 image dataURL、mime、尺寸、byteLength / sha256、raw bytes 上限和本机路径泄漏。
  • 成功写回时创建右侧 result Frame、image element 和 referenced files[fileId]
  • file metadata 标记 source.kind="ai-generation"privacy="no-original-path",保存仍走 saveTab() / save_mindraw_package,由既有 AssetStore dual 路径登记 .assets
  • App API capability 增加非破坏性 createAiResultFrameImageResult="write"
  • Transport request body 上限从 1 MiB 提升到 8 MiB,覆盖已验收 PNG base64 JSON-RPC 请求体。
  • 新增 QA 证据 02-P/qa/mindraw-mexp08b-external-image-writeback-check.md / .json
  • 同步 INDEX.mdCODEGRAPH.mdCHANGELOG.md02-P/plan-progress.markdown

关键决策

  • 不新增任意 JSON patch 或直接 .assets API;继续复用既有 read / lease / controlled commit / save path。
  • m4c 最小 contract 是既有 mindraw.app.commit_write_result,mutation kind 仍为 createAiResultFrame,新增 imageResult 字段。
  • m4c 不需要 .assets 路径,只提交 sanitized image bytes package;Mindraw 是唯一权威资产写入者。

验证

  • npm run test:run -- src/lib/mindrawAppWriteMutation.test.ts src/lib/mindrawAppWriteApi.smoke.test.ts src/lib/mindrawAppApiTransport.test.ts src/lib/mindrawAppReadApi.test.ts:PASS,4 files / 34 tests。
  • cargo test --manifest-path src-tauri/Cargo.toml app_api_transport:PASS,5 tests。
  • cargo test --manifest-path src-tauri/Cargo.toml mexp05_save_preserves_simulated_generated_asset_source_kind:PASS。
  • cargo check --manifest-path src-tauri/Cargo.toml:PASS。
  • npm run doctor:mindraw:test:PASS,15 tests。
  • npm run build:PASS,仅既有 Vite warning。
  • 已验收 MEXP08A PNG:854506 bytes;JSON-RPC body 约 1139615 bytes,小于 8 MiB transport 上限。

未决问题

  • 需要 PM 通知 m4c 基于新 capability 复跑 M4C-MEXP08B-01 runner / writeback。
  • PM-MEXP08B-GATE 仍由 PM 收敛;coder2 不直接宣布端到端 Gate 通过。