docs(iteration): record fifth sdk acceptance
This commit is contained in:
@@ -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 安装边界。
|
||||
Reference in New Issue
Block a user