---
name: mock
description: >-
  按功能编排 VLink 入口级 mock 集成测试,覆盖普通 doctest 难以触及的
  全部 CLI 命令、Proxy、Viewer/Player/Analyzer、WebViz 及 bag 数据集
  场景。用户要求"跑 mock"、"补测试死角"、"测试所有命令行"、"用 bag
  数据集测试 viewer/webviz/proxy"或做发布前入口冒烟测试时使用。
---

# 入口级 Mock 集成测试

本 skill 验证真实可执行入口及其协作链,不替代 `/test`、`/asan` 或
`/bench`。按用户指定模块执行;未指定时先根据当前 diff 选择受影响模块,
不得默认把所有 GUI、网络和长时任务一次性全跑。

## 1. 功能路由

只读取并执行本次需要的分册:

| 模块 | 分册 | 主要目标 |
| ---- | ---- | -------- |
| CLI | [CLI.md](references/CLI.md) | 10 个 `cli/*` 工具及全部子命令 |
| Proxy | [PROXY.md](references/PROXY.md) | `vlink-proxy`、发现、转发与进程生命周期 |
| Viewer | [VIEWER.md](references/VIEWER.md) | `vlink-viewer`、`vlink-player`、`vlink-analyzer` |
| WebViz | [WEBVIZ.md](references/WEBVIZ.md) | Foxglove、Rerun、bag2mcap、bag2rrd |
| Bag 数据集 | [BAG-DATASETS.md](references/BAG-DATASETS.md) | 数据集选择、只读保护、正常/异常场景 |
| 本地构建 | [BUILD.md](references/BUILD.md) | 物理核心探测、并行上限与构建命令 |

## 2. 执行流程

1. 先读仓库根 `AGENTS.md`、`.agents/REPO-REFERENCE.md`,再读上表中选中的
   分册及其指向的 `doc/` 小节。
2. 明确模块、平台、构建目录、二进制目录、bag 数据集和允许的外部依赖。
   用户未提供数据集时只执行不依赖数据集的场景,并把其余项标为未覆盖。
3. 需要构建时只能使用仓库根 `build-ai/skill_mock_<function_name>`,例如
   `build-ai/skill_mock_cli`、`build-ai/skill_mock_proxy`、
   `build-ai/skill_mock_viewer` 或 `build-ai/skill_mock_webviz`;固定
   `ENABLE_CXX_STD_20=OFF`,只开启目标模块
   并构建所需 target。构建前必须读取并执行
   [BUILD.md](references/BUILD.md)。执行 Python、CMake、测试或辅助脚本前设置
   `PYTHONPYCACHEPREFIX={project}/build-ai/skill_mock_<function_name>/__pycache__`。
   编译前按平台取得真实物理核心数,显式使用
   `max(真实物理核心数 - 1, 1)` 个并行 job;探测失败时固定单核。禁止
   逻辑 CPU 计数、裸 `--parallel`/`-j`、固定高并行度或同时启动多个
   本地构建,也不得复用、删除或重置维护者、IDE、CI 的构建目录。
4. 为本次运行创建独立临时目录。输入数据集始终只读;`clone`、`fix`、
   `reindex`、`tag`、录制和导出等写操作只针对临时副本或临时输出。
5. 先做参数解析和预期失败,再做单进程入口,最后做需要多个进程、GUI、
   端口或数据回放的场景。每个后台进程都要记录 PID、日志和就绪证据,
   结束时先正常终止,只清理本次创建的资源。
6. 失败后保留首个有效错误、命令、退出码、日志和产物;不得靠重试、
   放宽退出码、扩大排除项或更换数据集把失败改写为通过。

显式调用本 skill 授权选定模块的本地配置、构建、参数解析、预期失败、
单进程只读运行和临时文件写入。实时回放、联网、GUI、长驻进程与可变
数据场景必须在用户明确选中对应功能后执行;不授权上传、发布、修改原始
数据集、绑定公网地址、安装系统依赖或终止非本次启动的进程。

## 3. 结果报告

按功能模块分别列出:

- 平台、构建目录、target、二进制版本和数据集标识;
- 场景总数及通过/失败/未覆盖数;
- 每个场景的入口、关键参数、期望与实际退出码、关键输出或产物;
- GUI/网络/外部服务/缺失 schema 导致的未覆盖项;
- 首个失败的复现命令、日志路径和输入数据集副本路径。

只有实际运行并核对结果的场景才可写"通过";仅 `--help` 成功不能代表
对应业务子命令或 GUI 数据路径已覆盖。
