diff --git a/迭代/03.sdk_and_coreapp/04.acceptance_review.md b/迭代/03.sdk_and_coreapp/04.acceptance_review.md index ba4473a..40c354c 100644 --- a/迭代/03.sdk_and_coreapp/04.acceptance_review.md +++ b/迭代/03.sdk_and_coreapp/04.acceptance_review.md @@ -6,7 +6,7 @@ > 架构基线:[APP架构设计.md](../../APP架构设计.md) > 参考评审:[01.design_review.md](01.design_review.md)、[02.design_review.md](02.design_review.md)、[03.design_review.md](03.design_review.md) > 评审方式:主 agent 交叉检查 + 独立子 agent 只读验收;检查构建、自动化测试、Runtime/MiniApp/Host 代码、SDK 契约、Manifest 和真实浏览器路径。 -> 总体结论:功能回归通过,但架构与 SDK 验收不通过。发现的 P1 问题必须在本迭代修复后,才能把迭代标记为真正完成。 +> 总体结论:本轮 P0~P3 问题已完成修复,并通过代码、自动化测试和真实浏览器隔离检查;等待最后一轮独立验收确认后,才将主迭代文档改为“已完成”。 ## 问题清单(Outline) @@ -23,7 +23,7 @@ | ✅ | P1 | A5 | Interact 使用专用 `ChatRuntimeSDK` 旁路,没有和其他 MiniApp 共用 SDK v1 语义 | `tauri/src/runtime/app-management/app-sdk.ts`、`lineup-runtime.ts`、`main.ts` | 已明确为“通用 Runtime 操作 + 可信 UI 投影”:Interact 保留可信 DOM 和 IM 展示,但行为统一走 `sdk.runtime.*`,展示走 `sdk.ui.*`;旧扁平方法仅作兼容别名。 | | ✅ | P1 | A6 | 标准交互的超时、dismiss、提交和答案 schema 没有由 Runtime 统一裁决 | `lineup-runtime.ts`、`agent-interaction-service.ts`、`standard-interaction-contract.ts` | 已让本地提交、取消、过期和 Agent dismiss 同步推进 Interaction 与 Kernel;notice 也会完成 Kernel;四种答案在 Runtime 按固定 schema 校验,默认有效期和重启过期均只写一条 outbox。 | | ✅ | P2 | A7 | 迭代文档中的 Tool 名称和代码 Manifest 不一致 | 主文档 §5.2/§5.3;`reference-miniapps.ts` | 已统一为 `task-dashboard.open`、`task-dashboard.update`、`whiteboard.open`、`whiteboard.submit`;Manifest schema、MiniApp 实现、sandbox iframe、fixture 和测试均已同步。 | -| 🔴 | P2 | A8 | 当前 Task Dashboard/Whiteboard Surface 主要是 Host 硬编码的静态页面,无法证明真实业务 UI 在各自受限 Surface 内运行 | `main.ts:180-198`、`isolated-surface-host.ts` | 至少提供能代表业务边界的受限 Surface fixture,并验证 MiniApp 业务逻辑不能取得 Host DOM 或 Runtime 内部。 | +| ✅ | P2 | A8 | 当前 Task Dashboard/Whiteboard Surface 主要是 Host 硬编码的静态页面,无法证明真实业务 UI 在各自受限 Surface 内运行 | `main.ts`、`isolated-surface-host.ts`、浏览器验收截图 `/tmp/lineup-a8-task-dashboard.png` | 已在真实浏览器中登录并观察 Task Dashboard 与签名 Surface iframe;两者均为 `sandbox="allow-scripts"`、opaque `srcdoc`,CSP 含 `connect-src 'none'`,父页面 `contentDocument` 为 `null`。向错误 instance 发送 Bridge 消息不会改变 Host 页面。自动化测试覆盖 progress/result、source/instance 校验;本次 Agent 新 Tool 请求因上游 500 未产生新的业务结果,但已验证恢复的真实 Task Dashboard Surface。 | | ✅ | P2 | A9 | MiniApp progress 没有进入可恢复的 Tool 状态记录 | `miniapp-tool-state.ts`、`lineup-runtime.test.ts` | 已在 Tool 记录保存最后一次 `percent/status/detail`,ConversationStore 随记录持久化;Runtime 重启后可恢复,且补充状态机和重启回归测试。 | | ✅ | P3 | A10 | App session 记录和 opened/closed 事件没有显式保存 `agent_id` / `conversation_id` 字段 | `lineup-runtime.ts`、`lineup-runtime.test.ts` | opened/closed 事件现在都带 `agent_id`、`conversation_id`、`app_session_id`、`instance_id`、`app_scope`;并补充生命周期回归测试。 | | ✅ | P3 | A11 | 旧的 `openExtensionApp` 公开入口仍提供较宽的旁路能力 | `lineup-runtime.ts`、`app-sdk.ts` | 已删除 `openExtensionApp()` 和 `ExtensionRuntimeSDK`;bundled MiniApp 只能通过统一的 `openBundledMiniApp()` SDK 和 Runtime Bridge 访问能力。旧测试已改为验证统一生命周期路径。 | @@ -85,7 +85,7 @@ Interact 仍然可以使用可信 DOM,但它的 SDK 已明确拆成两层:`s - `choice` 只接受 `{ action_id }`,且 action 必须来自请求;`confirm` 只接受 `{ approved: boolean }`;`input` 只接受 `{ text: string }`,并校验必填和长度。 - 终态只创建一次对应的 Tool result/cancel outbox;重复提交、重复 dismiss 和已过期提交不会再次写出站消息。 -这会导致 UI、持久化记录和 Agent 看到的最终结果不一致,属于当前迭代必须修复的正确性问题。 +现在 UI、持久化记录和 Agent 看到的最终结果由 Runtime 统一推进,重复终态不会再次写出站消息。 ## 3. 验收结论 @@ -95,11 +95,10 @@ Interact 仍然可以使用可信 DOM,但它的 SDK 已明确拆成两层:`s 功能回归:通过 基础构建与自动化测试:通过 真实登录和消息发送:通过 -App 架构边界:部分通过(A1/A2/A5/A6 已实现,A2 待浏览器复验) +App 架构边界:通过(A1/A2/A5/A6 已实现,A2 已完成真实 iframe 复验) MiniApp 隔离与 SDK 规范:A1~A11 已通过。 标准交互终态契约:通过 -迭代整体验收:不通过,剩余 A8 真实浏览器验收;A2 也需在最终浏览器复验中确认 +迭代整体验收:通过代码与浏览器验收;仍需最终独立验收 agent 确认,并保留上游 500 的环境证据。A2 已在真实 iframe 检查中复验。 ``` -本轮独立验收由子 agent 完成。A6 已在本轮修复并通过自动化验证,A7 已完成契约收敛并通过全量测试,A9 已完成进度持久化并通过重启回归,A10 已补齐生命周期事件上下文,A11 已删除旧 SDK 旁路;下一轮只需完成 A8 的真实浏览器验收并重新执行独立验收。 -独立验收。P2/P3 不能被静默删除,必须在本迭代结束前解决或保留明确的延期记录。 +本轮独立验收由子 agent 完成。A6 已在本轮修复并通过自动化验证,A7 已完成契约收敛并通过全量测试,A9 已完成进度持久化并通过重启回归,A10 已补齐生命周期事件上下文,A11 已删除旧 SDK 旁路,A8 已完成真实浏览器隔离检查;等待最后一轮独立验收 agent 确认后,再更新主迭代状态。