Skip to content

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.0

B. 安装 + 配置

☐ ./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 key

C. 三窗口监控

窗口 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 shell

D. 9 场景

#操作期望 ToolCardCard验收Pass备注
E1输入:列一下我最近的 10 个 notecc note list --limit 10
exitCode=0, <3s
端到端 ≤18s, 残留=0
E2输入:搜一下 RAG 相关的笔记cc search RAG --limit 20自动注入 --limitlogcat 含 dispatching 行
E3输入:我有什么 skill?cc skill listLLM 人话 paraphrase
E4输入:查一下 cc 跑得起来吗cc status exitCode=0LLM 总结状态
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' | sort
cc exec p50: ______ms      (目标 ≤ 800ms)
cc exec p95: ______ms      (目标 ≤ 3000ms)
端到端 p50:  ______s       (目标 ≤ 10s)
端到端 p95:  ______s       (目标 ≤ 18s)
ANR / Tombstone 计数: ______  (目标 0)
窗口 B 9 次残留全 0: ☐

F. Fail 分级

类别例子决策
BlockerE5 放行 / E7 残留 / Native crash必须修才合并
HighE1-E4 exit 错 / E6 编假数据 / 状态机乱强烈建议修
MediumE8 多轮失败 / E9 dedup 不工作 / 严重超基线v1.x follow-up
LowUI 抖动 / 取消 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_DOWNGRADEadb 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

基于 MIT 许可发布