From 9f5ea6eb4ac3187ede5efefa4cf51e37e189415b Mon Sep 17 00:00:00 2001 From: kyugao Date: Thu, 6 Aug 2026 01:38:22 +0800 Subject: [PATCH] docs(iteration): record fifth sdk acceptance --- .../03.sdk_and_coreapp/05.acceptance_review.md | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 迭代/03.sdk_and_coreapp/05.acceptance_review.md diff --git a/迭代/03.sdk_and_coreapp/05.acceptance_review.md b/迭代/03.sdk_and_coreapp/05.acceptance_review.md new file mode 100644 index 0000000..4efa2a9 --- /dev/null +++ b/迭代/03.sdk_and_coreapp/05.acceptance_review.md @@ -0,0 +1,94 @@ +# `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 安装边界。