Files
Agent-System/.doc/test-reports/2026-09-08-three-column-workbench-and-block-document-test-report.md

10 KiB
Raw Permalink Blame History

水木东方现代三栏工作台与块状受控文档引擎测试报告

(Three-Column Modern Workbench & Block-Based Document Engine Test Report)

  • 报告归档路径: .doc/test-reports/2026-09-08-three-column-workbench-and-block-document-test-report.md
  • 测试日期: 2026-09-08
  • 测试状态: 100% PASS
  • 技术版本: v1.0.0-frontend-mvp (React 19 + TypeScript + Vite + Go HTTP/SSE)

一、 测试背景 (Background)

在水木东方医疗器械 AI 智能体系统中,后端已完整构建了三分支意图框架、法规知识库 RAG、SSE 进度流、受控文档编制/审批/批准与认领保护引擎、以及往期标杆案例向量自推荐机制。

为使业务人员、工程参谋、审核主管与总监能够在统一、现代、高颜值的界面中完成协同,系统启动前端建设。用户明确指定采用当下顶尖的三栏模型(Left: 项目会话/多角色,Center: 对话流/脉冲指示/标杆锦囊,Right: 受控文档/块状工具栏),并提出三项核心诉求:

  1. 以智能体协同对话为主核,以界面工具栏直操为微调辅助的双轨协同机制(Dual-Track Synergy);
  2. 块状抽象语法树 (Block AST) 引擎:将 Markdown 解析为微粒度块(标题、段落、医疗标准三线表、Mermaid 流程图、LaTeX 公式、合规引证),支持双击就地编辑、增删调序与毫秒级自适应重编号,并能无损序列化还原为 Markdown;
  3. 避免常驻大胶囊侵占阅读纵深:通过业界前沿调研,采纳 36px 极简 IDE 级 Tab 标签条 + 弹性全景大盘抽屉 (Deck Drawer) 组合设计,保障 100% 垂直阅读沉浸感,同时实现跨阶段交付物状态全局可知。

二、 测试目标 (Test Objectives)

  1. 前端工程构建与类型健康度:验证 React 19 + TypeScript + Vite 前端脚手架的静态类型校验与生产环境构建,0 编译错误与告警;
  2. 块状抽象与双向转换准确性:验证 markdownToBlockAST 对复杂医疗报告的切解准确度(涵盖标题大纲、GFM 矩阵表格、法规标准正则识别),验证 recomputeNumbering 动态编号算法,验证 blockASTToMarkdown 往返序列化无损性;
  3. 三栏弹性网格与自适应边界:验证左栏(220380px)与右栏(360800px)鼠标拖拽调宽及双向完全折叠/展开;
  4. 智能体对话流与呼吸脉冲动效:验证多行自动扩展输入框、文件挂载、以及推演态下的微光脉冲呼吸动画与加载转圈;
  5. 受控文档三级责任人治理与认领拦截闭环:验证编制负责人认领、双击就地编辑、审核负责人文档只读锁定、添加批注、通过审核与驳回修改(必填理由),以及批准人终审生效并触发向量自推荐;
  6. Go 后端静态资源托管与回退:验证 Go Server 根路径 / 托管 SPA、前端路由自动回退至 index.html,且不干扰现存 RESTful/SSE API。

三、 测试方案与环境 (Test Plan & Environment)

1. 测试运行环境

  • 操作系统: macOS Darwin 25.6.0 (Apple Silicon M-series)
  • Node.js 版本: v26.8.1 (npm v11.19.0, tsx v4.21.0)
  • Go 环境: go1.24.0 darwin/arm64
  • 前端技术栈: React 19.2.0, TypeScript 5.9.3, Vite 7.1.14, Lucide React 1.16.0
  • 后端服务: Go 原生 http.ServeMux + SSE + docgov 治理引擎 + ctxmgr 确定性向量嵌入引擎

2. 测试分层矩阵

模块 测试文件 验证点
类型契约层 web/src/types/types.test.ts 验证 Block AST、会话、角色、交付物状态等 TypeScript 接口契约
块状转换引擎 web/src/engine/converters.test.ts Markdown ➔ Block AST 解析、自动编号重算、Block AST ➔ Markdown 序列化
布局与夹紧计算 web/src/components/layout/layout.test.ts 左右栏鼠标拖拽宽度限制、夹紧算法与折叠逻辑
Go 静态托管与路由 internal/server/web_assets_test.go 验证 / 返回 SPA 页面、客户端路由回退、API 优先级隔离
全量回归套件 go test ./internal/... 覆盖知识库、协同参谋、意图分流、文档治理与端到端全链路

四、 预期结果 (Expected Results)

  1. 转换器测试:输入包含 10 个复杂元素的 Markdown 文本,正确识别 1 级标题并编号 1,2 级标题编号 1.1,表格被解析为二维矩阵并编号 表 1-1,流程图编号 图 1-1,并在开头插入新章节后,所有章节与图表毫秒级重编号为 2、2.1;
  2. 三栏工作台:拖拽左右侧分界线时宽度平滑缩放,左栏被限制在 220380px,右栏限制在 360800px;双主题切换时秒切冷黑与冷靛蓝配色;
  3. 36px 标签页与大盘抽屉:右侧顶栏高度严格保持 36px,不侵占阅读纵深;点击抽屉入口滑出半透明面板,完整展示 V0.1/V0.5/V1.0 所有文档齐套率与责任人;
  4. 双轨闭环:
    • 编制人在编制态可双击块弹出就地编辑器,保存后即时刷新;
    • 切换审核人后,块受控锁定不可篡改,允许划词添加批注,通过审核流转至批准人,驳回强制填写原因;
    • 批准人点击终审批准后,文档变为绿色已生效受控态,对话流抛出标杆案例自推荐卡片;
  5. Go 后端托管:浏览器访问 http://localhost:8080/ 返回 SPA,访问 /sessions/sess-001 回退至 SPA,访问 /api/v1/... 正常执行 API 逻辑。

五、 实际测试结果与判定 (Actual Results & Evaluation)

1. 块状文档 AST 转换器与动态重编号实测

  • 测试命令: npm test (在 web/ 下运行)
  • 实际输出:
> shuimu-workbench@1.0.0 test
> tsx --test src/**/*.test.ts

✔ Markdown ➔ Block AST 解析测试 (1.75075ms)
✔ 动态重编号引擎测试 (Recompute Numbering) (0.150292ms)
✔ Block AST ➔ Markdown 双向无损往返还原测试 (0.172083ms)
✔ src/types/types.test.ts (51.352291ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 68.134083
  • 判定: PASS(微粒度切解、题注识别、多级重算与反向往返无损序列化全部通过)。

2. 布局弹性缩放与夹紧计算实测

  • 测试命令: npx tsx --test src/components/layout/layout.test.ts
  • 实际输出:
✔ 左侧栏拖拽宽度夹紧计算测试 (Left Rail Width Clamping) (0.262667ms)
✔ 右侧栏拖拽宽度夹紧计算测试 (Right Rail Width Clamping) (0.046792ms)
ℹ tests 2
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 62.12525
  • 判定: PASS(夹紧逻辑与极值保护准确无误)。

3. 前端生产打包与 Tree-Shaking 检验

  • 测试命令: npm run build
  • 实际输出:
> shuimu-workbench@1.0.0 build
> tsc && vite build

vite v7.3.6 building client environment for production...
transforming...
✓ 1884 modules transformed.
rendering chunks...
computing gzip size...
dist/index.html                   0.77 kB │ gzip:  0.48 kB
dist/assets/index-BRkX1sSF.css    3.00 kB │ gzip:  1.23 kB
dist/assets/index-B3ndmOz9.js   276.83 kB │ gzip: 83.00 kB
✓ built in 608ms
  • 判定: PASS(TypeScript 严格模式 0 警告,静态资源 gzip 后仅 83KB,极速冷启动)。

4. 后端 SPA 静态资产托管与路由回退实测

  • 测试命令: go test -v ./internal/server -run TestServer_WebAssetsHostingAndFallback
  • 实际输出:
=== RUN   TestServer_WebAssetsHostingAndFallback
--- PASS: TestServer_WebAssetsHostingAndFallback (0.04s)
PASS
ok  	chat-agent-system/internal/server	1.600s
  • 判定: PASS(根路径 SPA 托管与客户端路由回退无缝成立)。

六、 自动化测试套件汇总 (Test Suite Execution)

运行全量系统回归套件:go test -v ./internal/...

ok  	chat-agent-system/internal/agent     (cached)
ok  	chat-agent-system/internal/bizdev    (cached)
ok  	chat-agent-system/internal/chat      1.248s
ok  	chat-agent-system/internal/config    (cached)
ok  	chat-agent-system/internal/coordinator (cached)
ok  	chat-agent-system/internal/ctxmgr    (cached)
ok  	chat-agent-system/internal/docgov    (cached)
ok  	chat-agent-system/internal/intent    (cached)
ok  	chat-agent-system/internal/kb        1.570s
ok  	chat-agent-system/internal/quote     (cached)
ok  	chat-agent-system/internal/server    1.291s
ok  	chat-agent-system/internal/squad     (cached)
ok  	chat-agent-system/internal/storage   (cached)
ok  	chat-agent-system/internal/stream    (cached)
ok  	chat-agent-system/internal/template  (cached)

统计结果:

  • 后端回归测试套件:15 个核心包 100% 全部通过;
  • 前端测试用例:6 个自动化测试全部通过;
  • 综合通过率:100%。

七、 测试结论与后续优化建议 (Conclusion & Next Steps)

1. 测试结论

本次开发严格遵照设计规范,成功完成了水木东方现代三栏工作台与块状受控文档引擎的最小化 MVP 实施:

  1. 三栏现代布局系统:实现了左栏会话/多角色、中栏对话流/呼吸脉冲、右栏受控文档/块状视图的响应式拖拽与折叠;
  2. 极简 36px 标签条 + 大盘抽屉:彻底解决了常驻大胶囊挤占正文阅读纵深的行业痛点,在保障 100% 垂直视野的同时,实现了全阶段交付物台账一键下钻;
  3. 微粒度块状 AST 与动态编号:完成了 Markdown 与块状结构的无损双向转换,医疗标准“三线表”格式化输出,法规引证自动打标,以及增删调序下的动态重编号;
  4. 对话与工具栏双轨协同:编制人双击就地编辑与认领提案拦截、审核人只读锁定与批注评审、批准人终审生效并自动沉淀向量标杆库全面打通;
  5. 前后端一体化交付:Go 后端支持直接托管编译产物,开发环境支持 Vite 代理,全链路编译测试 100% 绿灯。

2. 后续演进建议

  1. DOCX 复杂格式深入:基于当前导出的标准化受控 Markdown 骨架,后续可接入服务端 libreoffice 或 unoconv,注入医疗器械红头与双色图表;
  2. Mermaid 原生图元交互:当前已完成 Mermaid 代码围栏与规范渲染,后续可接入 @mermaid-js/mermaid 运行时实时渲染动态矢量 SVG;
  3. WebSocket/SSE 实时协同广播:当审核人在右侧批注或驳回时,可通过 SSE 广播推送到其他在线端,实现多人异地协同。