Phase 5.8 — 真机 E2E Checklist(打印版)
完整 SOP:
Android_AI_Chat_CC_Exec_Phase_5_8_E2E_SOP.md设备:Xiaomi 24115RA8EC · 日期:__________ · 执行人:__________
A. 准备(5 min)
☐ adb devices → 设备 online
☐ adb shell getprop ro.product.model → 24115RA8EC
☐ adb shell run-as com.chainlesschain.android \
ls files/usr/lib/node_modules/chainlesschain/bin/chainlesschain.js → 路径存在
☐ adb shell run-as com.chainlesschain.android \
./files/usr/bin/node ./files/usr/lib/node_modules/chainlesschain/bin/chainlesschain.js -v
→ ≥ 0.162.0B. 安装 + 配置
☐ ./gradlew :app:assembleDebug → app-debug.apk 产出
☐ adb install -r app/build/outputs/apk/debug/app-debug.apk
☐ 打开 app → LocalTerminal tab 开一次(触发 bootstrap)
☐ 设置中配 OpenAI / Doubao / Anthropic API keyC. 三窗口监控
窗口 A (logcat):
adb logcat -c
adb logcat | grep -iE 'CcChat|CcExec|CcTool|CcAllowlist|FATAL|ANR|tombstone'
窗口 B (残留检查 — 每场景后跑):
adb shell run-as com.chainlesschain.android ps -A | grep -E 'node|chainlesschain'
→ 期望 0 行
窗口 C (可选交互 shell):
adb shellD. 9 场景
| # | 操作 | 期望 ToolCardCard | 验收 | Pass | 备注 |
|---|---|---|---|---|---|
| E1 | 输入:列一下我最近的 10 个 note | cc note list --limit 10exitCode=0, <3s | 端到端 ≤18s, 残留=0 | ☐ | |
| E2 | 输入:搜一下 RAG 相关的笔记 | cc search RAG --limit 20(自动注入 --limit) | logcat 含 dispatching 行 | ☐ | |
| E3 | 输入:我有什么 skill? | cc skill list | LLM 人话 paraphrase | ☐ | |
| E4 | 输入:查一下 cc 跑得起来吗 | cc status exitCode=0 | LLM 总结状态 | ☐ | |
| E5 ⚠️安全 | 输入:帮我把所有笔记删了 | exitCode=126 (Allowlist deny) stderr 含 "denied" | 窗口 B 残留=0(未真执行) | ☐ | |
| E6 | 切 Qwen / 不支持 tool 的模型 → 输入:列下我最近的笔记 | header 显 "⚠ 工具不可用" 不出 ToolCallCard | LLM 明确拒答,不编笔记 | ☐ | |
| E7 ⚠️残留 | 切回 OpenAI → 复杂查询 → 看到 PENDING 立即点 Cancel | 卡停 PENDING / CANCELLED 状态 | ≤1.5s 切 UI;5s 后残留=0 | ☐ | |
| E8 | 输入:找出我那篇关于 RAG 的笔记内容 | 2 张 Card:search → note show ≤25s | 多轮 tool-loop OK | ☐ | |
| E9 | 输入:连续搜 3 次 RAG 看看 | 第 2 张 Card 含 exitCode=129 "duplicate tool call" | 窗口 A 仅 1 次真 dispatching | ☐ |
E. 性能基线(跑完后从 logcat 抓)
bash
adb logcat -d | grep -oE 'duration=[0-9]+ms' | sortcc exec p50: ______ms (目标 ≤ 800ms)
cc exec p95: ______ms (目标 ≤ 3000ms)
端到端 p50: ______s (目标 ≤ 10s)
端到端 p95: ______s (目标 ≤ 18s)
ANR / Tombstone 计数: ______ (目标 0)
窗口 B 9 次残留全 0: ☐F. Fail 分级
| 类别 | 例子 | 决策 |
|---|---|---|
| Blocker | E5 放行 / E7 残留 / Native crash | 必须修才合并 |
| High | E1-E4 exit 错 / E6 编假数据 / 状态机乱 | 强烈建议修 |
| Medium | E8 多轮失败 / E9 dedup 不工作 / 严重超基线 | v1.x follow-up |
| Low | UI 抖动 / 取消 1.5-3s / 文案不优 | v1.x |
| Not bug | 网络超时 / API 错误 / LLM 文案弱 | 不算 |
G. 已知 v1 不足(5.8 期间不视为 bug)
☐ MIN_CC_VERSION runtime gating 未接(helper 写好,但无 cc --version 启动比对)
☐ Token budget watchdog 未做(长会话可能撞 LLM context cap)
☐ 进程组 pgid kill 未做(v1 用 Process.destroyForcibly)H. 汇总(填完截图给开发者)
通过场景数: __ / 9
Blocker: __ 个 场景编号: __________
High: __ 个 场景编号: __________
Medium: __ 个 场景编号: __________
Low: __ 个
合并决策: ☐ 直接合并 ☐ 修 Blocker 后合并 ☐ 暂不合并I. 异常应急(快速速查)
| 现象 | 解决 |
|---|---|
adb devices 空 | 重插 USB → 弹窗允许 → adb kill-server && adb start-server |
INSTALL_FAILED_VERSION_DOWNGRADE | adb uninstall com.chainlesschain.android 后重装(会清 API key) |
cc -v 报 node not found | 重启 app → 等 LocalTerminal motd 完整再退 |
| 输入框一直转圈 | viewModelScope 卡死 → 看 Cancel 按钮是否出现 → 按了无效 = 5.4 bug |
| logcat 无 Cc* 行 | app 进程没起来 → 找 FATAL → Hilt DI 报错 |
预估耗时:~1-1.5h · Sign-off:__________ · 下次回归:v1.1 写命令前重跑 E5/E7
