25 · 外部用户测试协议
目标:在发布前验证两类用户能独立完成核心路径。 当前状态:未执行(需要真实用户)。本文是招募、脚本与记录模板。
25.1 两组用户
| 组 | 人数 | 背景 | 任务 |
|---|---|---|---|
| A · 教材读者 | 5 | 了解 λ/图重写基础即可 | 完成 Netbook 第 1 章 + Sandbox 任务 |
| B · 开发者 | 3 | Rust/后端/Agent 框架经验 | 跑通 flow + cell cluster + failover |
不招募:项目贡献者、看过设计文档的人(避免偏差)。
25.2 A 组协议(30–40 分钟)
- 打开 Netbook(本地
pnpm dev或静态包)。 - 不读源码,只读页面,完成第 1 章。
- 在 Sandbox 构造一个 γ-γ 活跃对,点击单步,解释发生了什么。
- 完成一个内置任务(至少 1 个),使用 undo/redo 与 permalink。
- 打开
/trace,说出 trace 与网步骤的对应关系。
记录:
- 完成时间、卡住的位置(章节/术语/交互);
- 是否理解“端口/线/活跃对/规则”;
- 是否能用一句话解释“为什么结果与归约顺序无关”;
- 浏览器/设备/控制台错误。
成功标准:
- ≥4/5 在 40 分钟内完成第 1 章与 1 个任务;
- ≥4/5 能正确解释活跃对;
- 0 个阻塞性 console error。
25.3 B 组协议(45–60 分钟)
环境:macOS/Linux,Rust stable,Node 20+,pnpm。
git clone https://github.com/lulgabc/InteractiveNet
cd InteractiveNet
cargo test --workspace
cd apps/netbook && pnpm install && pnpm build
任务:
ain demo,解释输出中的 steps/normal_form/hash。ain check examples/research.flow,故意改错一行,读出诊断。ain flow run examples/research.flow --save-trace /tmp/t.json,再flow replay。- 启动 3 个
ain cell serve,跑cluster demo。 - 用
--kill-after 30 --kill n1跑cluster llm100,观察 failover 与 state hash。 - 用
--run-id+--effect-ledger重跑,确认 effect 不重复调用(scripts/effect-ledger-demo.sh)。 - 用
scripts/tls-demo.sh跑 mTLS,确认明文失败。
记录:
- 从 clone 到第一条成功命令的时间;
- 失败的步骤与完整错误;
- 文档中缺失的前置条件;
- 对“Ainet 与 LangGraph/Temporal 差异”的一句话理解;
- 是否愿意继续使用/贡献。
成功标准:
- ≥2/3 在 60 分钟内跑通 1–5;
- ≥2/3 能解释 cell ownership 与 failover;
- 0 个 P0 文档错误(命令不可执行/路径错误)。
25.4 自动化预检
在招募前先跑:
./scripts/quickstart-check.sh
它覆盖 demo、check、flow run/replay、3 节点 cluster、100 LLM cells + kill、effect ledger、mTLS。若失败,先修再招人。
25.5 反馈模板
GitHub Issue(label user-test):
### 组别
A / B
### 环境
OS/架构、Rust/Node/pnpm 版本、commit/tag
### 完成情况
- [ ] 任务 1
- [ ] 任务 2
...
### 卡点
步骤、期望、实际、完整错误输出
### 理解题
用自己的话回答(不要查文档)
### 建议
最小可改进点
25.6 结果记录
| 日期 | 用户 | 组 | 完成 | 卡点 | Issue |
|---|---|---|---|---|---|
| — | — | — | — | — | — |
测试结束后把阻塞问题分为:
- P0:命令不可执行、数据错误、崩溃;
- P1:术语误导、关键步骤缺失;
- P2:体验/排版。
P0 必须在 v0.1.x 修复;P1 进入 docs/07-roadmap.md。