# 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.md`、`CODEGRAPH.md`、`CHANGELOG.md` 和 `02-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 通过。