# 验证

## 本地检查

```bash
npm run check
npm test
git diff --check
npm pack --dry-run
```

npm test 先构建测试导入 dist 和安装 CLI 的 lib，再串行执行 Node 测试。测试使用真实本地文件、进程、计算与 Pi 1.4.0 SDK。Pi 开发依赖与相关传递组件统一锁定 1.4.0；宿主提供的包声明为 optional peer，不增加运行时副本。发布包包含 bin/lib，扩展仍由 Pi 加载 src，dist 不进入发布包。

| 范围 | 检查内容 |
| --- | --- |
| 领域与基础模块 | 工具契约、状态转换、版本兼容、原子保存和非法路径 |
| tests/installation/ | 真实子进程、Pi 原生配置、来源与资源过滤保留、过期计划、CLI 打包入口、无模型认证时的初始化分发与拦截 |
| tests/smoke/ | 实际 tarball 加载、资料准备、独立 Python setup 脚本 |
| tests/e2e/ | Pi SDK/RPC 命令与工具、确认、持久化、重启和 Bash 环境继承 |
| 专家协作 | 真实 tmux/Pi 进程、无任务待命、原 inbox、消息顺序、分支归属、通知领取和异常退出 |
| 历史查询 | 真实 SDK 保存的问答、补充输入、工具过滤、分支隔离、四叉分组、原文与摘要搜索、正文分页、重载复用、空会话不误报、旧目录复制、跨目录读取、缺失原文时保留存档、旧路径清理、按会话 ID 重新关联与工具契约 |
| 原生会话存储 | 真实 CLI 的默认 cwd 目录、settings/环境变量优先级、tmux 旧环境覆盖、空待命恢复、进入已停止会话不入队或重放旧任务、绝对路径绑定、身份检查、固定叶节点只读报告与旧布局保留 |
| 团队协作 | 轮流顺序、并行上限与轮间汇合、暂停/领取、原文分页、并发保存、mixed 隐私边界与未知结果 |
| 团队宿主接入 | Pi 1.4.0 的用户/custom 消息 before_agent_start、turn_end、原生 context 去重、子 reload 不重跑、窄通信工具与实例关闭 |

冒烟与 E2E 可分别运行 npm run test:smoke 和 npm run test:e2e。驱动直接提交工具输入，不生成模型响应。打包冒烟复用本地已安装依赖。

团队服务测试使用实际文件和结构化历史执行记录，不生成模型响应。Markdown 上下文与报告检查原文保真、嵌套代码围栏、渲染长度、续读位置、来源关联与分支去重；工具继续校验原有结构化 schema，不对提示词全文做快照断言。进程验收使用隔离的 Pi 认证目录与 tmux 服务，验证待命和无认证失败路径，不调用真实模型；这不等于完整多模型协作已通过验收。

0.2.0 的会话存储测试不调用模型。真实 CLI 观察扩展只记录会话身份、路径和原生模型状态；历史输入通过实际 SDK 保存。测试覆盖引用 I/O 失败阻断输入，以及缺失、空白、无效、错误身份/cwd 和非普通文件在 generation/入队变更前拒绝恢复。无认证环境只能验证不以初始模型选项覆盖原生恢复；保存模型的认证恢复成功仍需获准环境验收。

新增输入与通知检查使用真实本地附件和 Pi SDK：验证多附件来源、图片内容与原生截断续读，报告不可读时 status 仍可查询，工具拒绝缺项及跨 action 字段，以及故障通知进入模型上下文并遵循中断。通知回归使用真实控制锁与时间，检查暂停持续受阻后的延迟通知、去重和锁释放后的恢复；损坏的团队记录用于检查已通知的读取错误升级为需重载故障时再次通知，以及修复存储后仍须原生 reload 才恢复团队工具。这些检查不验证通知文案、真实模型的工具选择或提示优化效果。

Node 测试不下载第三方 Python 依赖；原生库集成验证见 [Python 说明](../python/README.md)。

## 安装器验收（2026-11-03）

本次实现完成以下验证。安装验收使用临时工作区与独立的用户目录、npm cache/prefix，不使用个人凭据或模型请求：

- Linux、Node 24.15.0、npm 11.19.1、Pi SDK 1.4.0：`npm ci --ignore-scripts`、`npm run check`、`npm test` 全部通过，99 项测试无跳过；`npm pack --dry-run` 通过。
- macOS、Node 24.22.2、npm 11.19.1：17 项安装测试通过；实际 tarball 的全局安装与 npm exec 均可执行 `pbot --version`，两种安装都未下载 Pi SDK。现有 Pi 1.5.0 managed launcher 与实际安装根目录的识别通过。
- Linux 真实终端：从无 Pi 的独立 prefix 安装 Pi 1.5.0，再通过 Pi 安装 registry 的 pbot 0.2.3；重复运行、原生项目信任确认和不启动 Pi 的选择均成功。另将临时 Pi 安装为 1.4.0，确认 setup 通过原生 `pi update` 升级至 1.5.0。工作区仅有 `npm:personal-bot@latest` 声明，未选插件未安装，未直接创建 AGENTS.md。
- 全局 npm 资源过滤的真实终端验收：工作区声明继承 `extensions: []` 和 `skills: []`，全局配置原文未变化，未启用被禁用的资源。
- 本次打包的 pbot 与 Pi 1.5.0 SDK 完成 `/pbot init` 分发，创建资料且不调用模型；没有 pbot 时，保护扩展拦截未分发输入。共享 Python 环境使用真实的不可用临时目录，验证失败提示和资料初始化的独立性，不作为 Python 依赖安装成功的证据。
- 系统 Python 缺少 ensurepip 时，真实 CLI 在安装软件前退出。正向终端验收使用已存在的 Python 3.13.13，没有更改系统 Python。服务器原有 npm 12.0.2 的 `npm ci` 未接受仓库 shrinkwrap，本次仓库回归使用临时安装的 npm 11.19.1，未更换服务器 npm。

仍需验收 Homebrew/各 Linux 包管理器的提权与 tmux 实际安装、macOS 完整安装交互、Pi TUI 登录及模型选择、配套插件的外部服务与模型调用。同一工作区不应并发运行多个安装器；各原生包管理器不提供跨组件事务。全局 Git/本地来源与工作区 npm 来源发生身份冲突时，安装器保留现状并要求先用 Pi 原生配置调整加载范围，不自动移除全局来源。

## 已批准的真实模型冒烟（0.1.3）

2026-10-28 在 Linux、Node.js 24.15.0、tmux 3.3a、Pi 1.1.0 下验收当时的 0.1.3 源码。0.2.0 改用原生会话位置及开发依赖升级至 Pi 1.4.0 后均未追加真实模型冒烟，以下结果不作为新布局或新宿主版本的模型验收。主会话与两个独立子进程均使用 openai-codex/gpt-6-astra、low 思考级别；复用同一对成员，roundRobin 和 parallel 各运行一轮。这是同型号多 agent 验收，不是异构模型组合验收。

| 项目 | 实测结果 |
| --- | --- |
| 无任务 start | 两个成员进入 idle，没有模型响应或初始请求 |
| 普通 post | 不唤醒主模型 |
| roundRobin | 32.8 秒完成两个请求；B 在 A 结束后启动，逐字引用 A 的公开 JSON，核验 17+25=42；B 的原生 custom context 保存了 A 的原文 |
| parallel | 23.9 秒完成两个请求；两周期重叠约 21.8 秒，双方的最终答复均逐字引用了对方的 post |
| 自动公开 | 四份公共最终答复与对应原生固定叶节点报告完全相同 |
| 主通知 | 主模型没有在成员工作期间运行；每批结束后自动恢复一次工作周期，只调用 status/read，没有个人完成通知重复投递 |
| 关闭与退出 | close 保留两个 idle 成员；主会话退出后无存活子进程，独立 tmux 服务已清理，临时认证已删除 |

无扩展错误，未修改运行代码。原生记录共计 18 条模型响应（含工具调用响应），usage 合计 input=30272、cacheRead=52608、output=1075。Pi 目录价估算约 0.4091 美元，不代表 OAuth 订阅的实际账单。

证据保存在临时目录 `/tmp/pbot-live-smoke-icSpOD/`：`result.json` 是结果与用量摘要，`run.log` 是阶段日志，`config/pbot/teams/` 与 `config/pbot/subagents/` 保存团队记录和原生会话。临时目录可能被系统清理，本节保留验收摘要；认证文件不保留在证据中或仓库内。

本轮只发送人工生成的通信数据，不加载 MCP，不向模型开放文件或 Shell 工具，不使用交易凭据。为避免改动共享 Python 环境，用隔离的占位路径使准备步骤报告未就绪；Python 不是本轮验收对象。工具选择和临时目录不构成宿主沙箱。

## 剩余外部验收

以下行为仍需获准环境验收，不能从上述单轮冒烟或本地测试推导：

| 范围 | 验收重点 |
| --- | --- |
| 历史摘要 | 真实模型的摘要质量、递归汇总后按大意回溯、取消与恢复的实际模型请求、长会话扫描性能及人工浏览 |
| 真实模型与专家 | 0.2.0 原生会话存储下的委派交付与认证模型恢复、运行中 steer/follow-up、独立复核、通知推进和实际用量 |
| 真实模型团队 | 异构模型组合、三人及多轮讨论、并行轮间互相引用、自动重试/恢复、人工 mixed 输入、团队/私人工作切换、长时间运行及实际账单 |
| Task Conductor | 实际多节点产物、至少两轮周期任务、Pi 关闭或重载后的查询与防重复提交 |
| CLI/MCP | 认证、发现、重连、动态工具、取消与业务结果 |
| TUI/RPC | 人工 attach、焦点、批准、查看器、长时间运行和会话导航 |
| npm 分发 | 包含安装器的新版本 OIDC 发布、公开 registry 的 npx 入口与用户环境反馈 |
| 平台与存储 | macOS 整体验收、断电持久性与文件系统差异 |

研究与资料方法使用真实任务资料验收，重点检查来源追溯、口径一致、缺失数据处理、历史前提复核、产物引用和结项依据。知识沉淀需检查是否提炼方法与口径，以及后续任务能否据此重新取数。探索任务应区分实验失败与假设被否定。

记录验收环境、实际结果、证据位置与剩余缺口。连接可用、资源可见或格式正确只证明相应技术环节，不代表模型完成了业务任务。
