THAMO 阶段2交付报告
日期:2026-11-02。范围:原生四入口、OTP账户、分范围云端选择、真实状态及浏览器移除。状态:本地 lab APK 已构建、安装并通过下述模拟器验收;阶段3–6及公网THAMO尚未交付。
可体验交付
• 模拟器:独立 thamo-stage2 / emulator-5582,Android15/API35;已保留合成已登录账户,首页10分。
• APK:.stage2/private/artifacts/THAMO-0.7.0-stage2-lab.apk(不进Git)。包名 com.thamo.protect.lab,版本0.7.0 / 7,min29 / target36,Android Debug签名。
• APK SHA-256:53b66a439515147c0544e3817ead624446ccc24306a8e2cb674bb590dddea655。从设备导出已安装base.apk与本地产物摘要一致。
• 真实后台:http://127.0.0.1:18874/admin;本机凭据仍在`.stage1/private/admin-access.json`,不在APK或Git。
• 这是明确的本地lab包,通过 adb -s emulator-5582 reverse tcp:18874 tcp:18874 使用开发服务。不是可脱离本机运行的HTTPS正式手机版本;原AGLO公网不变。
已实现
1. 移除浏览器源模块、Gradle依赖、浏览器组件与URL接管;旧源码可从Git历史回退,COPYING归档到docs/legal。短信里点HTTP/S链接仅把所点URL预填到检查页,确认打开时使用外部浏览器。
2. 原生THAMO橙红/墨蓝Logo与保护、短信、电话、我的四入口。保留Fossify短信功能。电话、应用扫描和新自动短信检测/同步明确待接入,不请求空壳角色、不伪造扫描。
3. 手机号校验、随机OTP、错误提示、重发倒计时、换号、登录、Keystore会话恢复、续期、退出与注销入口。注册不依赖短信角色。实验短信由本地服务生成随机码,经模拟器真实SMS接收再输入,未发商业短信。
4. 一次云端数据类别说明及SMS/AppList/通话三个独立选择;服务端保存同意版本。先读取服务器已有设置,未变更项目不重复写revision。系统角色与云端选择分开;当前页面只保存选择,不采集上传三类记录。
5. 所有取消项先本地停用并标待撤销,失败可重试;捕获会话及本地epoch,旧响应不能覆盖新账号或新的撤销。退出只有服务端成功才显示完成;Activity页面/生命周期隔离过时回调。
6. 首页上报实际短信角色/权限,其余未接入readiness为false。仅在线current显示确认分数;断网显示上次确认,退出0分。后台同一设备实际10分、0批次、三类0记录。
实际验收与证据
| 范围 | 结果 | 证据 |
|---|---|---|
| 完整APK构建 | 成功;保留工具链警告,非零警告构建 | evidence/stage-2/android-build.log |
| APK身份/权限/签名 | 无浏览组件、HTTP VIEW、QAP、通话记录权限/默认电话组件;lab仅loopback HTTP | apk-identity.json、apk-manifest.xml及apk-*.txt |
| 安装一致性 | 设备导出APK摘要与候选一致 | installed-proof.json |
| 手机主要旅程 | 16项断言通过:四入口、两次拒绝/续接、手机号、错误随机码、正确码、真实云选择、重复保存、10分、冷启、续期、退出、再登录、单范围撤销 | emulator-uat.json / emulator-uat.log |
| 补充模拟器 | 断网/恢复、Bangla、1.5/2倍字体、实际SMS角色授予、原生收件箱、角色撤销引导通过 | extra-uat.json / extra-uat.log、相关截图 |
| 客户端隔离逻辑 | 13项通过;真实Kotlin客户端配主机Context/Session/JSON/transport替身 | client-tests.log;tools/test_thamo_client.py |
| 短信运输适配 | 14项通过;默认旧品牌保持兼容,THAMO品牌显式配置 | provider-tests.log |
| 独立后台只读核对 | 同一合成账户/设备,短信关闭、AppList开启、通话未开启;无任何三类数据上传,确认10分 | backend-account-proof.json、stage2-admin-device.png |
客户端主机测试不是Android Keystore或网络证明;冷启/实际网络由模拟器旅程另证。OTP过期、重发限流的服务端逻辑沿用阶段1测试;本轮UI验证错误码和实际两次短信登录,没有声称在手机上等待自然过期五分钟或测真实运营商送达。截图不留验证码明文,收件箱包含测试OTP,因此仅内存验收、不保存其截图。
UAT期间修正了测试脚本对adb排序参数与系统授权按钮大小写的处理;模拟器设为验收期间保持唤醒。首次构建离线缓存缺依赖,复用任务专用官方Maven缓存通道;Gradle文件监听出现源码改动后误判up-to-date,最终使用--no-watch-fs强制重读,重新编译后安装并校验摘要。没有修改全局Gradle/Codex配置或其他AVD数据。
构建与复验
先设置JDK21的JAVA_HOME和本机ANDROID_HOME,执行tools/build_thamo_lab.sh。已具备完整依赖缓存时可加--offline;本机专用依赖适配可通过GRADLE_INIT_SCRIPT显式传入,路径只存私有环境,不是正常构建必需的公网依赖服务。
模拟器启动命令和既有官方镜像摘要见emulator-environment.json。安装后执行adb reverse,再运行.venv/bin/python tools/thamo_stage2_uat.py及tools/thamo_stage2_extra_uat.py。首个脚本预期从未登录、未持有SMS角色开始;重跑前通过UI退出、撤销实验角色并核合成设置,不清业务库。手机号仅用本地允许的合成号,受正常重发/小时上限约束,不为了重跑放松限制。
未完成及下一阶段
未调用真实Gemini、未启用举报分析worker、未做新三类自动采集/同步、未接默认电话或App扫描;没有商业SMS、真实SIM/MMS/双卡/实体手机或Play结果。本APK约88MB,为未优化lab调试包,不作低存储正式包达标依据;正式签名、压缩优化和手机HTTPS分发在后续阶段。
阶段3将连接真实默认短信检测、Gemini、增量云同步、截图举报与自动分析worker,按同一条系统短信→App风险→后台记录闭环验证。当前阶段2的角色/收件箱检查不替代阶段3的完整短信收发/MMS回归。