验证与质量
三层次验证:Go 单测 → 真实冒烟(真实 PostgreSQL)→ 浏览器 E2E(Playwright)。冒烟脚本位于 action/temp/smoke_*.sh,E2E 位于 action/web/e2e/。
单测 285 个测试函数
Foundry 冒烟 23/23
Apollo 冒烟 26/26
Gotham 冒烟 44/44
E2E 5+5 PASS
单元测试覆盖
go test ./platform/... ./products/... 全绿(cached 结果),共 285 个测试函数、40 个测试文件,覆盖底座与四产品:
| 范围 | 覆盖包 |
|---|---|
| 平台底座 | audit / auth / connector(含 exec_write、sqlite_integration)/ crypto / llm / vector(milvus/turbovec/disk) |
| P1 AIP | nlq(意图/RAG/Text2SQL/执行/可视化) |
| P2 Foundry | ontology / semantic / metric / pipeline / lineage / writepath 六包(含毫秒级乐观锁 TestUpdatedAtMillisecondPrecision) |
| P3 Apollo | agent / hub(期望状态/漂移/bundle 验签) |
| P4 Gotham | graph / analysis / resolution / geo / timeline / pattern / reports / abac / eventbus / fusion / views |
真实冒烟结果(真实 PG chatbi_action_dev)
P1 AIP 全链路冒烟(smoke_aip)
登录 → 数据源 → 元数据 → NLQ 查询 → 图表 → 审计全链路通过。"查询订单总金额" 实测:intent=data_query(confidence 0.5)、SQL=SELECT SUM(sales_amount) AS total_sales FROM orders;、rows=[["6470.5"]]、chart_type=metric_card;审计 NLQ_QUERY SUCCESS。
P2 Foundry 冒烟 23/23 PASS(smoke_foundry.sh)
本体/版本/YAML/语义/指标/Action 幂等与乐观锁/管道/血缘/审计全链路:
- 版本状态机 draft→review→merge;YAML 导出导入;影响分析
- 语义查询 rows=5;semantic search 命中 order;指标查询 total_gmv=6470.5(与 AIP 口径一致)
- Action 执行 success rows_affected=1;幂等重放 replayed from_run=7;乐观锁冲突(并发修改 409)
- 管道 run success rows_in=5 rows_out=5;血缘 trace nodes=2 edges=1;审计 ACTION_EXECUTE 记录
P3 Apollo 冒烟 26/26 PASS(smoke_apollo.sh)
- 期望状态登记/激活、bundle 构建 + 验签 trusted(SM3/SM2 + signer 白名单)
- 渠道/策略、部署 DAG 推进、漂移检测与收敛
- Spoke Agent 上报:
agent report upsert spoke_agents status=online - 审计事件:
DEPLOYMENT_SYNC=4 DRIFT_DETECTED=4 DRIFT_RECONCILE=4
P4 Gotham 冒烟 44/44 PASS(smoke_gotham.sh)
图/分析/接入/解析/地图/时间轴/模式/报告/ABAC/联动全链路:
- 图节点/边 CRUD 幂等、expand/path/centrality/community 图算法
- ingestion 接入、resolution 实体解析(同身份证合并等)
- 地图 bbox/radius、时间轴 range/aggregate、模式规则命中告警
- 报告 HTML/PDF/docx 导出、ABAC 评估(deny 一票否决 + trace)
- 多视图联动:views sessions A(graph)=4 B(map)=5、filter 广播 target_count=1(region=北京 命中)
浏览器 E2E(Playwright)
| 产品 | Spec | 结果 | 覆盖 |
|---|---|---|---|
| P2 Foundry | foundry_e2e.spec.mjs | 5/5 PASS(msedge,10.5s) | 登录/本体创建/版本合入/YAML/Action |
| P3 Apollo | apollo_e2e.spec.mjs | 5/5 PASS | 登录+导航/部署总览(DAG)/部署与漂移/bundle 验签/Spoke Agent |
| P1 AIP | 前端骨架 + API 冒烟 | 通过 | Login/DataSources/ChatWindow 构建与 API 全链路 |
| P4 Gotham | 前端六页面 | 通过 | 图/地图(Leaflet)/时间轴/联动/报告/ABAC 页面 + 44 步 API 冒烟联调 |
E2E 运行:cd action/web && npx playwright test(msedge 通道);截图与日志在 action/web/e2e/。
已知限制与遗留项
| 项 | 状态 | 说明 / 规避 |
|---|---|---|
| Milvus 本机不可用 → disk | 设计内降级 | vector 三后端自动降级,本机无 Milvus 服务时落到磁盘向量引擎(日志告警,不影响跑通) |
| gopls stale 诊断 | IDE 已知 | 编辑器 gopls 偶发陈旧诊断,以 go build ./... / go test 为准 |
| CGO_ENABLED | 构建约束 | 跨平台/信创构建设 CGO_ENABLED=0(SQLite 走 glebarez 纯 Go 驱动;build_release.bat 内为 1 以支持本机 cgo 组件) |
| OOM -p=2 | 偶发 | 大数据量下偶发内存压力,可用 -p=2 控制 Go 测试/构建并行度规避 |
| 无外网环境 | 限制 | 涉及联网路径(Serper 搜索、LLM、embedding)以 mock 单测覆盖;真实联调需外网补充冒烟 |
| connector 高级类型 | 预留 | allow-list 默认仅放行 MYSQL/SQLSERVER/POSTGRESQL;SQLITE 需显式授权;MySQL/SQLServer 方言迁移为后续可选增强 |
| Gotham 未入网关 | 已知 | Web 网关(80)当前代理 AIP/Foundry/Apollo;Gotham 直连 18083 或 Vite 环境变量分流 |
| SQLite 降级断言 | 已知 | PG 不可用降级 SQLite 后,冒烟脚本的 psql 断言(RBAC/审计)不可用 |
开发记忆与经验沉淀
可复用问题与踩坑方案沉淀在 action/wiki/dev_memory/(中文,结论式),例如:
foundry_sqlite_optimistic_lock.md— demo SQLiteupdated_at秒级盲区 → 模板改毫秒精度 + 补单测。foundry_fe_be_parity.md— 前端与后端成对交付的教训(后端路由就绪即补前端页面)。- bat 脚本 GBK+CRLF、括号块内全角括号、taskkill WOW64 问题等(见各记忆文档)。