# 2026-06-26 MDH102 只读 API ## 用户目标 从 `02-P/plan-progress.markdown` 的 `P-20260626-m4c-handshake-coordination` 领取 Mindraw 侧 `MD-H1-02`,完成只读 App state / live frame context API 垂直切片;只包括 state/context 读取、DTO、`workingRevision`、source Frame extractor、read-only facade 和单元 / smoke 证据;不做 lease、写入、mutation 或保存。 ## 已完成事项 - 新增 `src/lib/mindrawAppReadApi.ts`: - `mindrawGetCapabilities()` - `mindrawGetOpenDocumentState()` - `mindrawGetLiveFrameContext()` - `sha256:` workingRevision - source Frame context extractor - read-only 错误码 - 新增 `src/lib/mindrawAppReadApi.test.ts`,覆盖 8 个用例。 - 新增 QA 证据:`02-P/qa/mindraw-phase38-readonly-api-check.md`。 - 余力准备 `MD-H1-03` 说明和测试清单:`02-P/功能任务/document-lease-manager-implementation-notes.md`。 - 更新 `CODEGRAPH.md`、`INDEX.md` 和 `02-P/plan-progress.markdown`。 ## 关键决策 - 本轮只做前端 read-only facade,不实现 loopback JSON-RPC transport / capability file。 - active dirty document 的 `workingRevision` 使用 live editor snapshot。 - dirty tab 的真实 `diskRevision` 暂不跟踪,返回 `null` 并带 `DISK_REVISION_UNAVAILABLE_FOR_DIRTY_TAB` warning。 - facade 不调用 Tauri `invoke`,不触发保存、写入、lease 或 mutation。 ## 验证结果 - `npm run test:run -- src/lib/mindrawAppReadApi.test.ts`:1 个测试文件,8 个用例通过。 - `npm run test:run -- src/lib/mindrawAppReadApi.test.ts src/store/useStore.test.ts src/lib/excalidrawFile.test.ts`:3 个测试文件,47 个用例通过。 - `npm run build`:通过;仅有既有 Vite warning。 - `git diff --check -- ...`:无输出。 ## 文件变更 - `src/lib/mindrawAppReadApi.ts` - `src/lib/mindrawAppReadApi.test.ts` - `02-P/qa/mindraw-phase38-readonly-api-check.md` - `02-P/功能任务/document-lease-manager-implementation-notes.md` - `02-P/plan-progress.markdown` - `CODEGRAPH.md` - `INDEX.md` ## 剩余风险 - 还没有进程外可调用 transport / capability file。 - 多窗口、进程外 discovery、真实 m4c 调用尚未验证。 - 非 active tab 当前使用 store content,而不是 active editor snapshot。 - lease / mutation / 保存链路未实现。 ## 下一步归属 - `MD-H1-03` 是否派发由 PM 决定。 - m4c 继续保持 dry-run-only adapter。 - `PM-H5-GATE` 仍等待 lease / mutation 和联合 smoke 入口条件。