# `03.sdk_and_coreapp` 第 5 次验收评审记录 > 评审编号:05 > 评审日期:2026-08-06 > 评审对象:[03.sdk_and_coreapp.md](03.sdk_and_coreapp.md) > 架构基线:[APP架构设计.md](../../APP架构设计.md) > 参考评审:[04.acceptance_review.md](04.acceptance_review.md) > 评审方式:独立子 agent 只读验收 + 主 agent 逐项复核;检查当前代码、Manifest、SDK 契约、自动化测试、构建和文档证据。 > 总体结论:本轮发现的 P3 契约/证据问题均已逐项修复并分别提交;当前没有遗留 P0~P3 问题。 ## 问题清单(Outline) > **状态标记:** 🔴 未解决,必须处理;🟡 已提出修复方向,尚未实现;✅ 已解决;⚪ 可延期但必须保留记录。 > P0~P3 必须在当前迭代处理;P4~P5 可以延期,但必须保留问题、延期原因和重新评估条件。 | 状态 | 优先级 | 编号 | 问题 | 当前结论 / 证据 | |---|---:|---|---|---| | ✅ | P3 | A12 | Registry 安装输入仍接受旧的 `core` / `extension` kind 别名,和冻结的 `system \| bundled` 契约不一致 | `CoreAppRecordInput` 已收紧为 `system \| bundled`;旧测试 fixture 已迁移;提交 `44b6a83`。 | | ✅ | P3 | A13 | 主迭代文档中的测试数量过期 | 主文档已更新为当前 `30 个测试文件、137 个测试`;提交 `94817f7` 后随新增回归测试再次更新,提交 `ca9e8b9`。 | | ✅ | P3 | A14 | Manifest Tool 的多项权限原先只保留第一项,可能造成后续权限漏检 | `requires_permissions[]` 已完整保存并逐项校验;Manifest/Registry 也拒绝未声明或重复权限;新增回归测试;提交 `e91d07b`。 | | ✅ | P3 | A15 | 当前冻结约束未硬性保证只有 Interact 能使用 `kind = system` | Registry 现在拒绝除 `chat`(Interact 兼容 scope)之外的 system MiniApp,并有回归测试;提交 `fec04a9`。 | ## 1. 本轮基础门禁 当前执行结果: ```text npm test -- --run 30 个测试文件、137 个测试通过 npm run build 通过 git diff --check 通过 git status 工作树干净 ``` 本轮独立子 agent 的只读审计确认: - Interact 仍使用 `sdk.runtime.*` 与 `sdk.ui.*` 两层适配,没有第二套 Transport、Store、Tool 或 Capability 协议; - Task Dashboard 和 Whiteboard 仍是 `kind = bundled`,运行于 `sandbox="allow-scripts"` 的 opaque iframe; - MiniApp 只能通过 Runtime Bridge 请求 Inbox、Tool、Lifecycle、Surface 和 Capability; - `workspace()`、`openExtensionApp()`、`ExtensionRuntimeSDK` 等旧旁路没有恢复; - A1~A11 的已修复约束没有发现回退。 ## 2. P3 修复说明 ### A12:冻结 kind 词汇 主文档规定 `MiniAppManifest.kind` 只有 `system | bundled`。本轮发现 Runtime 的注册输入仍允许旧的 `core | extension`,虽然最终会转换,仍会让调用方继续依赖已废弃词汇。 现在 `CoreAppRecordInput` 只接受 `system | bundled`,Registry 不再负责旧名称转换;受影响的测试 fixture 已全部迁移为 `bundled`。这样 Manifest、Registry、Inventory 和 Tool Router 使用同一套名称。 ### A13:更新验收证据 新增回归测试后,测试总数已经变化。本轮把主迭代文档中的旧统计更新为当前实际值 `30/137`,避免完成定义引用过期数字。 ### A14:完整检查 Tool 权限 一个 Tool 可能声明多个权限。Runtime 现在保留完整的 `requires_permissions[]`,注册时要求这些权限都在 Manifest 的 `permissions` 中且没有重复,路由时逐项确认 App 当前确实拥有每一项;缺任何一项都不会把调用交给 MiniApp。 ### A15:限制 system MiniApp 范围 本迭代只有 Interact 是系统级 MiniApp,当前兼容 scope 是 `chat`。Registry 在安装边界拒绝其他 scope 的 `kind = system`,并通过回归测试固定这一不变量。Task Dashboard 和 Whiteboard 仍只能作为受限 `bundled` MiniApp。 ## 3. 浏览器证据说明 本轮独立 agent 检查时,当前环境没有正在监听的 Web Host/AppServer 进程,因此没有把本轮称为“重新触发的真实 浏览器闭环”。Task Dashboard / Whiteboard 的真实 Bridge 闭环证据沿用上一轮共享会话记录: ```text tools.list → tools.reportProgress → surface.patch(Task Dashboard 适用) → tools.complete → IM 收到 completed 结果 ``` 上一轮还验证了 iframe 的 `sandbox="allow-scripts"`、opaque origin、CSP、`event.source + instance_id` 校验, 以及错误 source/instance 伪造消息不会改变 Runtime 状态。本轮新增修改没有触及这条浏览器路径;代码门禁和回归 测试均通过。若下一轮需要重新取得独立浏览器证据,应先启动 Web Host 和 AppServer,再按相同路径复验。 ## 4. 结论 ```text P0:无 P1:无 P2:无 P3:A12、A13、A14、A15 均已解决 P4~P5:无新增遗留 ``` 本轮没有需要留到下一迭代的 P0~P3 问题。主迭代文档仍可保持“已完成”状态;后续若增加新的 system MiniApp, 必须先重新评审并修改本迭代冻结的唯一 system 约束,而不能绕过 Registry 安装边界。