Repository navigation
V12 Final Acceptance
Provenance — Migrated 2026-10-06 from
docs/validation/v12-final-acceptance.md@ zuohaisu/viva@871a00a · 迁移自主仓库该文件;正文相对链接已改为 Wiki 链接,原始状态/日期/作者行保留,原文以 Git 历史为准。
Status: 部分验收(方法 + 真实运行证据 + 故障场景),平台/模型负载项 pending · 2026-09-28 · Issue: #21
本文是 V12 的最终验收记录。所有数字来自真实运行(机器:Mac17,4 / Apple M5 / arm64 / 32 GB / macOS 25.5.0),原始 JSON 证据在 docs/validation/evidence/v12-final/。对照方法与首切片基线见 v12-baselines.md。
G1 时只有 CLI 切片;本轮验收覆盖 V07/V09/V10/V14 交付后的组合切片:
- 活跃 Viva 控制面:真实 Unix domain socket 通道、单活跃宿主、CLI 回调、派发/观察/停止。
- 真实 PTY 终端监督:每个派发一个真 PTY 进程组、优雅停止与升级杀灭、退出记录。
-
崩溃恢复对账:真实
kill -9宿主进程后的重启对账。 - 工作台组合事实:多项目/任务/worktree/终端的真实 git 与进程事实。
| 指标 | 预算上限 | 实测 | 证据 | 状态 |
|---|---|---|---|---|
| CLI 命令响应(doctor,7 次中位) | ≤ 1 s | 3.7 ms | launch.json | within |
| 单 host 进程峰值 RSS(CLI 切片) | ≤ 200 MB | ~4.2 MB | slice-cli.json | within |
| Viva 宿主常驻峰值 RSS(承载 16 终端时) | ≤ 150 MB(新预算,首测) | 8.7 MB | peak.json | within |
| 16 个被监督子进程的每进程峰值 RSS | — | ~1.2 MB/个(sleep 替身) | peak.json | 记录 |
| 控制面单次派发往返(16 次中位) | ≤ 500 ms(新预算,首测) | 30 ms | peak.json | within |
PTY 输入回程(11 字节真 pty + cat) |
≤ 100 ms | 80 µs | echo.json | within |
冷构建(cargo clean 后全 workspace) |
≤ 300 s | 15.0 s | build.json | within |
| 增量构建 | ≤ 30 s | 0.1 s | build.json | within |
- 一个隔离
VIVA_HOME,真实viva server宿主;1 成员 + 3 任务 + 3 live grant(真实迁移库种子)。 -
16 个真实被监督 PTY 进程经真实通道逐个派发(16 个不同 request key,全部
replayed: false),峰值采样观测到 16/16 存活子进程。 - 停止隔离:停止 2 个终端后 16→14 live,指定 survivor 仍然 live。
- 优雅停机:宿主退出码 0、socket 释放、机器上 0 个属于本次场景的残留进程。
诚实标注(写进记录本身):这 16 个是真实被监督进程、真实控制面资源行为,但 worker 是 sleep 替身,不是真实 agent CLI 的模型工作负载。记录 kind: simulated_agents,不得当作 16-Agent 产品峰值预算结论(见 §4 pending)。
全部由 cargo test --workspace(154 通过 / 0 失败)中的真实场景证明,关键项:
| 场景 | 证明 | 测试 |
|---|---|---|
| 强制退出(kill -9 宿主) | 重启对账记录 previous_host_crashed 与 execution_orphaned;孤儿执行如实标 stopped;不重跑、不杀孤儿进程、不误认 pid |
v07_server::crash_restart_reconciles… |
| 完成任务不重放 | 已完成任务再派发被拒("never executed again"),零新增执行 | 同上 |
| 停止/退出竞态与误杀 | 停一个终端不影响邻居;信号退出以 -1 如实入账且 Viva 主动停止记 stopped(不是 failed);stop 纪律(先 TERM 后 KILL、已 reap 不再发信号)由 V05 单元/集成覆盖 |
v07/v14/v05 |
| 授权撤回竞态 | revoke 后派发在生效时刻被拒,零执行创建 | v07_server::revoked_grant… |
| 重复启动/请求重放 | 第二宿主拒绝并指认活跃 pid;同 request key 重放不重复启动,且按 (task, member) 隔离——跨任务/跨成员同 key 响亮拒绝 | v07_server::second_host…, request_keys_never_replay… |
| 无活跃 Viva 宿主时 mutation | 明确拒绝,不起后台 daemon,不凭空造 socket | v07_server::mutation_without… |
| 优雅退出收尾 | owned 终端全部停止,退出 watcher 先 join(每条退出事实先落账)再写交接记录,下次启动无虚假 orphan 记录;socket 释放 | v07_server::graceful_shutdown…、graceful_shutdown_records_every_exit_before_the_handoff |
| 存储/迁移回滚 | 迁移失败无半状态、事务失败回滚、append-only 触发器 | V01 store 单元 |
排队/拒绝有解释:派发被拒时返回机器可读原因(授权拒绝带 DenialReason、完成任务带状态、无宿主带指引),不自动杀其他任务。测试见 §2.3。
- 零越权:撤权竞态拒绝(V07 测试);grant 范围在生效时刻复核且 grant 主体必须等于派发成员(v07_server::a_grant_never_serves_a_member_other_than_its_principal);控制通道经 peer-uid 校验 + 0700 目录双重门禁(v07_server::host_home_and_channel_are_private_and_authenticated);聊天无 grant 时扩展侧拒发派发并提议走授权(V09 TS 测试)。
- 零误杀:停止只发本终端进程组;崩溃对账明确"不 signal 孤儿";pid start marker 防 pid 复用误认(V05/V07)。
- 零归属丢失:终端 owner 类型化(member_execution 必带 execution id,DB CHECK 背书);派发留 launch spec + intent + 归属快照。
- 零重放:request key 幂等且按任务隔离(跨任务同 key 直接拒绝,v07_server::request_keys_never_replay_across_tasks);task handoff 与 conversation handoff 各自幂等(同一交接登记两次只有一行,conversations 单测)。
以下项未验收,不能由本轮任何模拟结果代替:
- 16 真实 Agent(模型 CLI)同负载峰值采样 — 需要 Pi/其他 CLI 安装与模型凭证;本轮 sleep 替身只证明控制面资源行为。
- Intel macOS 基线与运行验收 — 无 Intel 硬件。
- 真实 Pi 独立运行 vs Viva 承载同负载的增量对照 — 依赖真实 Pi 会话(凭证未配置)。
- V14 三真实任务端到端用户演示(含真实 Pi + 另一已安装 CLI) — V14 的组合行为已由真实 git/PTY/进程测试覆盖,但"真实 Pi + 另一 CLI"的人工并行开发演示待凭证与工具就绪后按 first-usable-version.md 执行。
- 共享桌面动作的串行验证(issue 要求)— 未执行。
- 控制通道健壮性由
channel_survives_delayed_and_pipelined_requests钉住:连接后延迟发送、同连接多帧、malformed 帧在线错误响应(不断连、不丢请求)。 - Rust CLI 层不做 native fork 前置校验:native-first 顺序由 Pi 扩展强制(feature-detect fork 入口,失败即拒);conversations 域只登记 harness 已确认的分叉。把顺序下沉为域强校验留作 V10 后续小票。
- peer-uid 拒绝路径(跨 uid 客户端被拒)在单 uid 机器上无法构造实测,机制为 OS 语义(getpeereid/SO_PEERCRED)+ 同 uid 路径已测;跨 uid 行为依赖上述系统调用语义。
cargo build --workspace
python tools/acceptance/sampler.py sample --binary ./target/debug/viva \
--home /tmp/viva-v12/home --window /tmp/viva-v12/window.lock --out record.json
python tools/acceptance/peak_workload.py --binary ./target/debug/viva \
--home /tmp/viva-peak --window /tmp/viva-window.lock --out peak.json
cargo test --workspace采样窗口 flock 独占;宿主/子树/整机分别采样;RSS 峰值由 OS 报告、从不跨进程相加。tests/acceptance/(11 项 pytest)对采样器与场景本身做回归保护。
Viva Wiki
Charter & Product
Core-Thesis Vision Customer-Zero User-Stories Product-Model Workflows First-Usable-Version Workbench-Navigation Phase-1-Scope
Architecture
Conceptual-Architecture Domain-Model Temporal-Model Resident-Container Transition-Record
Decisions
Decisions ADR-0001 · ADR-0002 · ADR-0003 · ADR-0004 · ADR-0005 · ADR-0006 ADR-0007 · ADR-0008 · ADR-0009 · ADR-0010 · ADR-0011 · ADR-0012 · ADR-0013
Development
Rust-Rollout-Plan G0-Interface-Contracts Terminal-PTY-Selection V15-Workbench-Deepening
Research
Research-Hermes Research-Hermes-Holographic-Memory Research-Agent-Memory-Architecture Research-Orca Research-Orca-Reuse-Audit Research-Herdr-Runtime-Parity Research-VS-Code-Workspace Research-Self-Model-Relationship
Validation
V12-G1-Baselines V12-Final-Acceptance V13-Python-Retirement F01-F04-Acceptance CLI-Update-Validation
Releases & History
Releases Goal-Drift-Log Technology-Selection-Archive Start-Prompt-Track
主仓库:zuohaisu/viva · 工作规则:AGENTS.md