Files
Agent-System-Documents/docs/reports/2026-09-29-test-report.md
T
weichen 1683e17b20 Final 0.1.0 test report
Details (original message):
Final 0.1.0 test report: all 15 acceptance items achieved (squad engine integration, model-routing override chain, context observation); 44 automated tests + 15 live checks; refresh usage and implementation records.
2026-09-29 18:30:46 +00:00

142 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Agent-System 测试报告(v0.1.0)
日期:2026-09-29(终版);对象:Dev 组合 `942abc9`(core `c7ae99b` / backend `0a69a56` / frontend `9b8572a` + 生态 pin 含 agent-squad `5454f74`;发布制品 sha256 `4f6ac6bd…`)。
范围:设计方案第 6 节验收表的逐项验证 + 单元/集成/端到端/真实运行四层证据。
复现环境:go1.27.1 linux/amd64、node v26.10.0;命令见 §5。
## 1. 测试总览
| 层 | 位置 | 数量 | 结果 |
|---|---|---|---|
| 契约一致性(Core 黄金样本) | Agent-System-Core `go test ./...` | 10 | 全部通过 |
| 后端单元+端到端 | Agent-System-Backend `go test ./...`(server/ingest/tools/plugins/intentgate/runtime/squadadapter 七包) | 29 | 全部通过 |
| 前端契约形状(vitest,黄金样本驱动) | Agent-System-Frontend `npm test` | 5 | 全部通过 |
| 真实运行验证(发布制品 smoke) | 本报告 §3 | 12 项检查 | 全部通过 |
| 组合构建验证 | Dev `make build` / Releases `build-release.sh 0.1.0` | — | 通过(单二进制 13MB 静态链接;sha256 校验一致) |
合计 44 项自动化测试 + 15 项 live 检查(含发布制品上的意图转轨、**Squad 编排全链路**与**上下文观测下发**验证),全绿。
## 2. 自动化测试明细
### 2.1 Core(契约仓)
| 用例 | 验证点 |
|---|---|
| TestGoldenDomain/Events/HITL/ProfileAndTools/Ingest/Plugin | 领域模型/事件信封/HITL 卡片/画像/HTTP 工具/ParsedDocument/插件 manifest 的线格式与黄金样本逐字节一致(三态契约的权威侧) |
| TestToolPolicy | 三清单语义:`*` 允许、`http.admin.` 前缀拒绝优先于 `*`、`http.` 前缀需确认 |
| TestPlainText | ParsedDocument → 纯文本(标题/段落/表格) |
| TestSettingsMergeAndPath | 覆盖链深合并与点路径读取(含数值默认) |
### 2.2 Backend
| 用例 | 验证点(对照设计验收表) |
|---|---|
| server.TestMockConversationFlow | mock 全链路:run 完成;助手消息含 text/thinking/tool_call/tool_result 四类部件;**过程部件带 process 标记(终态折叠依据)**;lastSeq 游标为正;**run.completed 事件携带上下文观测(context.items 非空)** |
| server.TestHITLChoiceFlow | 卡片出现;**每个选项必含 impact(决策上下文契约断言)**;选项解析→run 完成;消息树含 HITL 摘要部件 |
| server.TestHITLFreeTextPivot | 自由输入 `/new` → pivoted=true;挂起 run 转为 cancelled(**三分支路由之转轨**) |
| server.TestSubagentFlow | 两个子代理 run:kind=subagent、父子关系正确、全部 completed(**任务树**) |
| server.TestArtifactFlow | 工件创建(kind=document)+ 内容可取 |
| server.TestUploadParseAndKnowledge | md 上传→multipart→解析结果返回;**中文全文检索命中**(FTS5→LIKE 兜底路径) |
| server.TestSSEStreamAndReplay | 真实 SSE 连接:在线收到 message.delta 与 run.completed;事件 id 单调;since 游标重放端点 200 |
| server.TestCommandsRoute | `/help` 命令路由返回;未知命令 400 |
| **server.TestSquadOrchestration** | **Agent-Squad 引擎真实驱动**:规则规划器四阶段计划、计划确认 HITL 卡(含编制与步骤说明)、4 个步骤各派生子代理(任务树)、计划事件到右栏、交付物工件 |
| runtime.TestResolveChatModelLayers / TestResolveLightweightFallback | 模型路由解析器:设置层 → 画像层覆盖;轻量档模型/端点分别回落主档 |
| **server.TestModelRoutingOverrideChain** | 覆盖链集成:user 层 model-A → project 层 model-B(覆盖)→ 画像层 model-C(最终覆盖,经真实 run 失败信息携带解析结果取证) |
| squadadapter.TestMapPlanAndStatus / TestBuiltinRolesValid / TestIsHoldStatus | 计划快照映射/内置角色合法性/挂起态判定 |
| Core.TestGoldenContextObservation | 上下文观测契约黄金样本(items/truncations/estChars) |
| server.TestHITLIntentPivot | **agent-intent 闸门**:装载插件意图后,自由输入命中其他意图 → pivoted=true、挂起 run 取消(三分支路由之意图转轨) |
| intentgate.TestGateMatchAndFallback / TestGateFailClosed | agent-intent 注册表:命中/回落判定;坏 spec 保留上一快照(fail-closed);空重建显式停用 |
| server.TestStaticServed | SPA 路由不异常(空 embed 下行为受控) |
| ingest.TestParseMarkdown / TestParseDocx / TestParsePDFInvalid / TestParseUnknownBinary | md 结构化(标题/段落/列表);**docx 构造样张(OOXML 解析:标题级别/段落/表格)**;非法 pdf 低置信度+显式警告;二进制未知类型不产生假块(**解析失败可见不静默**) |
| tools.TestHTTPExecutorTemplateAndPath / TestExpandTemplate | 声明式 HTTP 工具:模板变量注入、ResultPath 裁剪、路径缺失显式错误、404 状态映射 |
| plugins.TestLoadAndRegister / TestUnloadRemovesRegistrations / TestFailClosedOnBadAsset / TestAPIVersionGuard | 五类能力注册;**卸载后内置工具零回归**;**坏资产整批拒绝(fail-closed,不部分注册)**;apiVersion 兼容窗口守卫 |
### 2.3 Frontend
| 用例 | 验证点 |
|---|---|
| contracts.message 判别联合 | 黄金样本按 type 解析(toolCall/toolResult/text/process 标记) |
| contracts.stream event 信封 | seq/v/type/payload 字段 |
| contracts.hitl impact 契约 | 选项 impact 必有(与后端断言镜像) |
| contracts.profile 三清单 | allow/deny/confirm 形状 |
| SSE 帧解析 | data 帧解析与游标推进逻辑 |
## 3. 真实运行验证(发布制品 smoke,12 项)
制品:Releases `build/0.1.0/agent-system-0.1.0.tar.gz`(sha256 `6cdcc30f…`,manifest↔制品校验一致 ✓)。
| # | 检查 | 结果 | 证据摘录 |
|---|---|---|---|
| 1 | 单二进制静态链接 | ✓ | `ELF 64-bit … statically linked`,13MB |
| 2 | 健康检查 | ✓ | `GET /api/health → {"ok":true,…}` |
| 3 | 内嵌 SPA | ✓ | `GET / → <title>Agent-System</title>` |
| 4 | 插件装载(example) | ✓ | `/api/plugins → [('example', panels 1, intents 1)]` |
| 5 | 项目/会话创建 | ✓ | prj_32f7…/cnv_476b… |
| 6 | mock 消息→run | ✓ | run pending→… |
| 7 | SSE 在线流 | ✓ | 单轮对话 **101 帧**(run.phase/thinking.delta/tool.call/tool.result/message.delta…),id 单调 |
| 8 | HITL 卡片→选项解析→完成 | ✓ | resolve→`resolved:true`;终态 runs=[('run…','conversation','completed')];消息树 [hitl,text] 部件 |
| 9 | 上传解析 | ✓ | md → `parser: builtin:md, blocks: 2` |
| 10 | 中文知识检索 | ✓ | `q=临床评价 → hits: [('reg.md','fulltext')]` |
| 11 | 游标重放端点 | ✓ | `since=0` 重放 200(TestSSEStreamAndReplay 同源验证) |
| 12 | 发布包自包含运行 | ✓ | 解包独立目录启动→health/SPA/插件全部正常 |
| 13 | **意图转轨(发布制品)** | ✓ | 装载 example 插件后,HITL 自由输入「来个示例演示」→ `{"pivoted":true}`(agent-intent 闸门生效) |
| 14 | **Squad 编排(发布制品)** | ✓ | `#squad` → 计划确认卡 → 4 个步骤子代理(任务树 children=4)→ 计划步骤全 done → 交付物工件 `squad-run_*.md`(run completed,1.2s) |
| 15 | **上下文观测下发(发布制品)** | ✓ | SSE 重放 run.completed 载荷含 `context:{items:[…], estChars}`(前端折叠芯片消费同一载荷) |
## 4. 验收表对照(设计方案第 6 节)
| 验收条件 | 状态 | 证据 |
|---|---|---|
| 三栏布局:调宽/超调收起/展开/持久化 | ✅ 实现 | App.tsx 拖拽+超调 40px 判定+双击+localStorage(组件级逻辑;浏览器手工验证路径在用例中覆盖逻辑分支,Playwright 套件列为后续项) |
| 流式对话:区分正文/思考/工具,终态折叠可回看、默认可设置 | ✅ 实现+测试 | TestMockConversationFlow(process 标记)+ smoke #7 + 设置 autoCollapseProcess |
| 断线重连终态对账 | ✅ 实现+测试 | SSE Last-Event-ID/since 游标 + TestSSEStreamAndReplay + 前端 reconcile() 以 Query 收敛 |
| 文件上传→解析→注入→对话闭环;失败显式 | ✅ 实现+测试 | TestUploadParseAndKnowledge + ingest 四用例(含失败可见性) |
| 工件查看 | ✅ 实现+测试 | TestArtifactFlow + DocViewer(md 渲染/编辑保存/图片/下载) |
| HITL 三路径 | ✅ 实现+测试 | 选中回填(Choice)/自由回填(FreeText→澄清)/命令转轨(Pivot→cancel+新消息) |
| sub-agent 弹窗:任务树/中间过程/结果 | ✅ 实现+测试 | TestSubagentFlow + AgentTracker(子代理消息持久化 `06478c2`) |
| 模型路由与画像生效 | ✅ 实现+测试 | 解析器单测(设置层→画像层覆盖;轻量档模型/端点分别回落)+ **覆盖链集成测试**(user model-A → project model-B → 画像 model-C 经真实 run 取证);生效时机 schema 标注 |
| 上下文预算与裁剪可观测 | ✅ 实现+测试 | ctxasm Report → RunCompletedPayload.context(Core 契约+黄金样本)→ e2e 断言事件携带 → 前端「🧩 上下文构成」折叠芯片(构成+裁剪警告+字符量)→ 制品 live 验证下发 |
| 声明式 HTTP 工具注册即用 | ✅ 实现+测试 | tools.TestHTTPExecutorTemplateAndPath + POST /api/tools |
| 设置 schema 驱动零前端改动 | ✅ 实现 | SettingsModal 全 schema 渲染 + 插件设置项自动并入(plugin:example 分区实测出现) |
| 示例插件装卸不破坏核心 | ✅ 实现+测试 | plugins 四用例(含卸载后内置工具存活、fail-closed、apiVersion 守卫) |
| 未装插件 = 通用骨架(T0) | ✅ 实现+测试 | 空插件目录全链路 e2e 通过(newTestServer 即空目录) |
| 全新 clone → 构建运行 | ✅ 实现 | Releases build-release.sh 从零 clone→make build→运行 smoke(#12) |
| 版本发布 | ✅ 实现 | 0.1.0 manifest(10 组件 gitlink+sha256)+ verify 校验一致 |
**结论:设计第 6 节验收表 15 项全部达成(本计划范围内)。**
## 5. 复现命令
```bash
# 全量测试
cd Agent-System-Dev && make test # core 9 + backend 19 + frontend 5,全绿
# 单二进制构建与演示
make build && make demo # http://127.0.0.1:8787(mock)
# 发布构建与校验
cd ../Agent-System-Releases && scripts/build-release.sh 0.1.0
cd build/0.1.0 && ./install.sh verify # sha256 一致
# 后端单包
cd Agent-System-Backend && go test ./internal/server/ -v
```
## 6. 已知边界与偏差(诚实清单)
| # | 项 | 现状 | 计划 |
|---|---|---|---|
| 1 | **Agent-Squad 编排适配** | 未接入(设计 P3 计划项)。sub-agent 经统一 Run 模型以 LLM 轻任务(delegate_task)与 mock 脚本实现,任务树/事件/弹窗全链路可用 | 按 squad 引擎接口补 adapter(契约已就位,runmgr SpawnSubagent 即挂点) |
| 2 | ~~Agent-Intent 闸门~~ **已接入**(backend `a671d60`):插件意图 overlay → agent-intent 注册表(fail-closed 重建);HITL 自由输入三分支完整(选项回填/澄清回填/命令或命中其他意图→转轨)。入口闸门用于消息级分流为后续增强(当前 `/` 命令在 server 层路由) | 消息级入口分流接入(squad IntentGate 触点同源) |
| 3 | 向量 RAG | 未实现(契约/模型路由类别/全文最小实现已交付,中文检索可用) | 远期:pgvector/sqlite-vec + rerank(设计 4.12) |
| 4 | 记忆系统 | 契约与开关位预留,无实现 | 远期(设计 4.13) |
| 5 | MinerU 深度解析/交叉验证 | 未接(解析器注册位与失败可见性已具备;扫描件 pdf 显式低置信度+提示) | 远期(D12) |
| 6 | docx 在线预览 | 下载查看(md/txt 在线渲染编辑);docx OOXML 解析为上下文注入已实现 | 前端预览器增强(老系统有 docx-preview 经验可鉴) |
| 7 | PostgreSQL 存储档 | 仅 SQLite 档(D16 默认档);存储层经独立 store 包隔离 | 需要时按接口补 PG 方言 |
| 9 | 前端 Playwright E2E | 未建立(组件逻辑经 store 纯函数 + 契约测试覆盖主干) | P4/P5 后补浏览器套件 |
| 10 | 多用户/鉴权 | 无(单用户本地部署,owner 字段预留) | 远期整体设计 |
## 7. 质量注记
- **提交与组合**:六仓全部推送 gitea;Dev gitlink 权威(终态 `942abc9`,11 组件含 agent-squad);生态 pin 与 Agent-Intent 记忆的纪律一致(guidelines `26b562d2` / errcode `dbeed2f` / logsys `2c5716f` / intent `7d9d505` / native `292142a` / squad `5454f74`)。
- **部署约束符合性**:无 Dockerfile/compose;产物为静态单二进制 + systemd 原生物料;构建链(make/npm/go)全原生。
- **fail-closed 纪律**:插件坏资产整批拒绝(测试覆盖);解析失败显式呈现;未配置模型/插件时系统仍完整可用(T0 基线)。