Skip to content

Commit 973da35

Browse files
committed
docs(35): capture phase context
1 parent d24f53b commit 973da35

1 file changed

Lines changed: 133 additions & 0 deletions

File tree

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# Phase 35: E2E 稳定化 + 性能验收 - Context
2+
3+
**Gathered:** 2026-04-22
4+
**Status:** Ready for planning
5+
6+
<domain>
7+
## Phase Boundary
8+
9+
在真实环境跑通 v3.0 全栈并锁定性能基线。本阶段是验收 phase,不新增功能代码,只交付基准测试、UAT 验证、CI gate、运维手册和验收清单。所有功能代码应已在前序 Phase 29-34 完成。
10+
11+
验收范围覆盖:
12+
- BASE-01(元数据响应 1.5× 基线)
13+
- BASE-02(首连 ≤ 8s)
14+
- BASE-03(弱网容忍)
15+
- BASE-04(镜像体积 ≤ 700MB — 二次回归)
16+
- 30 条 functional REQ 逐项验证
17+
- 5 章运维手册更新
18+
19+
</domain>
20+
21+
<decisions>
22+
## Implementation Decisions
23+
24+
### 性能基准测试方法
25+
26+
- **10k 文件树**:使用 synthetic 脚本生成(`scripts/gen-bench-tree.sh`),保证可重复性。文件结构模拟 mono-repo:80% 小文件(< 4KB 源码)、15% 中等文件(< 1MB 配置/文档)、5% 大文件(< 10MB 二进制),总大小控制在 ~200MB。
27+
- **对比基线包含 3 档**
28+
1. 本地文件系统(宿主机 ext4 或 APFS)——绝对基线
29+
2. mergerfs full 模式(Mutagen + sshfs + mergerfs 三层全开)
30+
3. sshfs-only 降级模式(验证降级后的性能下限)
31+
- **统计方式**:每种配置 warm-up 1 次 + 测量 10 次,取 P50 和 P99。报告输出 JSON + 人类可读表格。
32+
- **CI 自动化**:在 `.github/workflows/ci.yml` 新增 `perf-benchmark` job,跑 ubuntu-latest 上的 synthetic 基准。macOS APFS 真机基准不在 CI 中跑,作为本地/真机验收项。
33+
- **基准命令**`rg .`(全量文本搜索)和 `ls -R /workspace`(元数据遍历),两者分别对应 CPU 密集和 metadata 密集场景。
34+
35+
### 弱网 UAT 执行方式
36+
37+
- **拔网手段**:脚本化 `tc qdisc add dev <iface> root netem loss 100%`(精确可控),恢复时 `tc qdisc del`。备选 `iptables -I OUTPUT -d <host_ip> -j DROP`
38+
- **判定标准(量化)**
39+
- **10s 拔网**:cloud-claude 进程不退出;tmux 内 claude 进程 `ps` 仍在;本地 input_buffer 键入内容不丢
40+
- **30s 拔网**:同上 + 恢复网络后 60s 内自动重连成功;`tmux capture-pane` 与拔网前 buffer 一致
41+
- **2min 拔网**:cloud-claude 最终进入"重连失败提示"状态(REQ-F3-C);tmux 内进程仍存活;恢复网络后手动按 Enter 可重新连接
42+
- **"无感知"量化指标**
43+
- 进程存活:`docker exec <ctr> pgrep -f claude` 在拔网全程返回 0
44+
- Buffer 完整性:拔网前 `tmux capture-pane` 与恢复后对比,字符级一致
45+
- 输入回放:本地脚本向 stdin 注入固定字符串,重连后远端 `cat` 输出与注入一致
46+
- **执行方式**:脚本驱动(`scripts/uat-network-resilience.sh`),关键场景(30s/2min)需人工在报告中签字确认观察结果。
47+
48+
### 真机环境矩阵
49+
50+
- **macOS APFS**:使用开发者本地 M 系列 Mac 执行。GitHub Actions macos runner 为虚拟化环境,FUSE 性能数据不具参考性,故不作为 CI 基准平台。
51+
- 必测场景:case-insensitive 双向同步(创建 `Foo.txt` + `foo.txt` 冲突文件,断言 Mutagen `--mode=two-way-resolved` 无数据丢失)
52+
- **Ubuntu 25.04**:CI 中使用 `ubuntu-latest`(目前 24.04)跑 AppArmor 模拟检测 + docker 三路 FUSE 挂载验证。若需严格 25.04 内核行为验证,在真机或云主机上补跑。
53+
- 必测场景:AppArmor `local override` 部署后 `verify-fuse-compat.sh` 全通过;sshfs + mutagen-agent + mergerfs 三路并发 mountpoint 全部就绪
54+
- **自动化程度**:脚本化 80% + 人工签字 20%。脚本自动生成测试报告(JSON + markdown),人工在关键场景(APFS 冲突、2min 拔网、AppArmor 真机)报告中确认并签字。
55+
56+
### 运维手册与验收清单形式
57+
58+
- **手册位置**`docs/runbooks/` 目录新增 5 章,与已有 `v3-claude-state-volumes.md` 保持一致风格。文件名前缀 `v3-`
59+
- `v3-upgrade-guide.md` — 升级指南
60+
- `v3-apparmor-deployment.md` — AppArmor override 部署
61+
- `v3-doctor-troubleshoot.md` — doctor 排障手册
62+
- `v3-persistent-volume-lifecycle.md` — 持久卷生命周期与 GC(与已有 `v3-claude-state-volumes.md` 整合,不重复)
63+
- `v3-error-code-index.md` — 错误码索引
64+
- **验收清单**`scripts/v3-acceptance-checklist.sh` — 可执行 bash 脚本,遍历 30 条 REQ + 4 条 BASE,每项输出 `[PASS]/[FAIL]/[SKIP]` + 证据路径。脚本末尾生成 markdown 报告 `v3-acceptance-report.md`
65+
- **签字流程**
66+
1. 脚本在目标环境执行生成报告
67+
2. 报告附于 Phase 35 PR 中
68+
3. PR 合并视为"签字通过"
69+
4. 真机环境需在报告中显式标注机器信息(OS 版本、硬件型号、执行时间)
70+
- **版本标记**:手册头部标注 `适用版本: v3.0.x`,验收报告文件名含日期戳(`v3-acceptance-report-20260422.md`)。
71+
72+
### Claude's Discretion
73+
74+
- 10k 文件 synthetic 生成的具体目录深度和文件分布比例
75+
- 性能基准报告的精确输出格式(JSON schema 细节)
76+
- 弱网 UAT 脚本中 `tc` vs `iptables` 的最终选型(优先 `tc`,如环境不支持回退 `iptables`
77+
- 验收清单脚本中 SKIP 项的判定逻辑(环境不具备时优雅跳过)
78+
- 运维手册的章节内具体排版和示例命令格式
79+
80+
</decisions>
81+
82+
<specifics>
83+
## Specific Ideas
84+
85+
- 性能基准应输出类似 `go test -bench` 风格的表格,方便与后续版本对比回归
86+
- 弱网 UAT 的 2min 场景脚本应在拔网后每 10s 打印一次状态,方便观察退避序列
87+
- 验收清单参考 Phase 34 的 `ci-doctor-grep.sh` 风格——断言明确、失败时输出具体行内容
88+
- 运维手册每章必须包含"快速诊断命令"小节(3-5 条最常用的 copy-paste 命令)
89+
90+
</specifics>
91+
92+
<code_context>
93+
## Existing Code Insights
94+
95+
### Reusable Assets
96+
97+
- `scripts/ci-doctor-grep.sh`:Phase 34 的 doctor M14 验证脚本,可作为验收清单脚本的模板(JSON/文本双模式检查、错误码格式断言)
98+
- `scripts/verify-fuse-compat.sh`:FUSE 兼容性验证脚本,Phase 35 可复用阶段 1-4 的逻辑作为基准测试前置检查
99+
- `scripts/verify-managed-image.sh`:镜像验证脚本,BASE-04 CI gate 可直接复用
100+
- `internal/cloudclaude/errcodes/`:错误码注册表,验收清单可遍历断言所有错误码均有中文 message + next_action
101+
- `internal/cloudclaude/doctor/`:5 维度检查框架,运维手册 `v3-doctor-troubleshoot.md` 可直接引用其检查逻辑
102+
- `test/bootstrap/e2e_bootstrap_ssh.sh`:e2e 测试脚本模板(PASS/FAIL 计数、断言模式)
103+
104+
### Established Patterns
105+
106+
- 验证脚本统一风格:`pass()`/`fail()`/`warn()`/`info()` 函数 + 汇总计数 + 退出码 0/1 区分
107+
- CI 工作流在 `.github/workflows/ci.yml`,新增 job 遵循现有 `go-test` / `web-build` 的矩阵结构
108+
- 运维手册在 `docs/runbooks/` 目录,markdown 格式,头部标注适用版本和关联 REQ-ID
109+
- 错误码格式 `<DOMAIN>_<KIND>_<NUM>`,验收时需断言无重复、每条有中文 message + next_action
110+
111+
### Integration Points
112+
113+
- CI gate:`.github/workflows/ci.yml` 新增 `perf-benchmark` job 和 `image-size-regression` job
114+
- 基准脚本:输出到 `.planning/phases/35-e2e/benchmarks/` 目录,供后续版本对比
115+
- 验收报告:脚本生成后提交到版本控制,作为 v3.0 发布附件
116+
- 运维手册:与现有 `docs/zh/guide/` 用户文档互补,不重复架构说明,聚焦排障和运维操作
117+
118+
</code_context>
119+
120+
<deferred>
121+
## Deferred Ideas
122+
123+
- 持续性能监控(perf regression dashboard)—— v3.1+ 可考虑,不在本验收 phase 内
124+
- 自动化真机农场(multi-OS CI runner)—— 资源投入较大,v3.1 评估
125+
- 性能基准的历史趋势图(自动生成折线图对比各版本)—— 需要额外基础设施,v3.1 评估
126+
- 弱网 UAT 的 packet-level 抓包分析 —— 如验收发现问题时可深入,非本 phase 交付物
127+
128+
</deferred>
129+
130+
---
131+
132+
*Phase: 35-e2e*
133+
*Context gathered: 2026-04-22*

0 commit comments

Comments
 (0)