Files
app/迭代/03.sdk_and_coreapp/05.acceptance_review.md
T

5.1 KiB
Raw Blame History

03.sdk_and_coreapp 第 5 次验收评审记录

评审编号:05
评审日期:2026-08-06
评审对象:03.sdk_and_coreapp.md
架构基线:APP架构设计.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 现在拒绝除 chatInteract 兼容 scope)之外的 system MiniApp,并有回归测试;提交 fec04a9

1. 本轮基础门禁

当前执行结果:

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 闭环证据沿用上一轮共享会话记录:

tools.list
→ tools.reportProgress
→ surface.patchTask Dashboard 适用)
→ tools.complete
→ IM 收到 completed 结果

上一轮还验证了 iframe 的 sandbox="allow-scripts"、opaque origin、CSP、event.source + instance_id 校验, 以及错误 source/instance 伪造消息不会改变 Runtime 状态。本轮新增修改没有触及这条浏览器路径;代码门禁和回归 测试均通过。若下一轮需要重新取得独立浏览器证据,应先启动 Web Host 和 AppServer,再按相同路径复验。

4. 结论

P0:无
P1:无
P2:无
P3A12、A13、A14、A15 均已解决
P4P5:无新增遗留

本轮没有需要留到下一迭代的 P0~P3 问题。主迭代文档仍可保持“已完成”状态;后续若增加新的 system MiniApp, 必须先重新评审并修改本迭代冻结的唯一 system 约束,而不能绕过 Registry 安装边界。