From 376a7c4b8442b4acb9dd49625e8b2bc2247b2516 Mon Sep 17 00:00:00 2001 From: key Date: Wed, 29 Jul 2026 02:23:06 +0800 Subject: [PATCH] docs: record Android 0.1.9 RC evidence --- CHANGELOG.md | 2 +- README.md | 2 +- docs/MOBILE_APP_DEVICE_ACCEPTANCE.md | 6 ++++++ docs/MOBILE_APP_PACKAGING.md | 6 +++--- .../帮道8月1日Android内测Go-No-Go-20260728.md | 14 +++++++------- ...Android安装包测试版任务计划-20260727.docx | Bin 60616 -> 61115 bytes ...1日Android安装包测试版任务计划-20260727.md | 10 ++++++---- 7 files changed, 24 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f2b3c6b..f1c37ae6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ## Unreleased -- **2026-07-28 至 2026-07-29,8 月 1 日 Android 受控内测候选包与法务链路,当前总体 No-Go**:补齐登录页协议默认不勾选与法务地址失败关闭、App-Plus 原生隐私配置生成/校验、APK 包名/版本/API/签名/哈希/包内资源一致性/敏感值门禁、DCloud 云证书自定义基座和独立测试包流程;《服务协议》《隐私政策》静态页已部署到 `/legal/`,发布前整站备份为 `/opt/wygj/backups/www-20260728224710`。客户端法务校验已移除 App-Plus 不保证支持的浏览器 `URL` 构造器,测试验证码也不再以源码常量进入安装包。当前独立 APK `com.yincheng.wygj 0.1.8 (108)` 的 `targetSdkVersion=35`,SHA-256 为 `E252140645F3AAD14B3594FD78E76BDF1A2122F7DC70EBD21CC5DF53223C7878`;新增 Android 原生网络安全配置并经 APK 反编译确认 `usesCleartextTraffic=false`、`networkSecurityConfig` 引用和系统证书信任配置均已进入安装包。本机 `Medium_Phone` Android 15/API 35 虚拟机已完成最新包干净安装和冷启动,真实显示原生隐私弹窗,四项敏感权限保持未授权且未见崩溃;`0.1.6` 已在 vivo V2443A(Android 15)完成覆盖安装和冷启动。代码候选提交 `ba68fc83` 已在干净工作区通过统一 RC 门禁,`releaseEligible=true`:移动端 193 项测试、类型检查、H5/App 构建、管理端构建、`ruoyi-aihr` 696 项全量测试、后端打包及 APK 强化门禁全部通过。只读生产预检确认根站、租户接口、移动首页和 64/64 schema 门禁通过,但生产后端模块与本地候选哈希仍不一致;用户隐私选择、权限反例、认证态核心业务和正式内容也未完成,故 Go/No-Go 为 **No-Go**。本次除法务静态页外未发布后端、H5 业务资源或数据库。 +- **2026-07-28 至 2026-07-29,8 月 1 日 Android 受控内测候选包与法务链路,当前总体 No-Go**:补齐登录页协议默认不勾选与法务地址失败关闭、App-Plus 原生隐私配置生成/校验、APK 包名/版本/API/签名/哈希/包内资源一致性/敏感值门禁、DCloud 云证书自定义基座和独立测试包流程;《服务协议》《隐私政策》静态页已部署到 `/legal/`,发布前整站备份为 `/opt/wygj/backups/www-20260728224710`。客户端法务校验已移除 App-Plus 不保证支持的浏览器 `URL` 构造器,测试验证码也不再以源码常量进入安装包;五个文件选择服务与九个消费页面进一步统一“用户取消/平台失败”分流,取消后不再残留上传或转写错误。当前独立 APK `com.yincheng.wygj 0.1.9 (109)` 的 `targetSdkVersion=35`,SHA-256 为 `0A968807E44F061C330C57E2C6D31A5F1F454177E0EAFBB80A76F5F06A311341`;Android 原生网络安全配置经 APK 反编译确认 `usesCleartextTraffic=false`、`networkSecurityConfig` 引用和系统证书信任配置均已进入安装包。本机 `Medium_Phone` Android 15/API 35 虚拟机已完成从 `0.1.8` 保留数据覆盖升级和冷启动,真实显示原生隐私弹窗,四项敏感权限保持未授权且未见 FATAL/ANR;`0.1.6` 已在 vivo V2443A(Android 15)完成覆盖安装和冷启动。代码候选提交 `cb928eda` 已在干净工作区通过统一 RC 门禁,`releaseEligible=true`:移动端 197 项测试、类型检查、H5/App 构建、管理端构建、`ruoyi-aihr` 698 项全量测试、后端打包及 APK 强化门禁全部通过;最小交付包 SHA-256 为 `A91C1F672C738C9950295F967833F9E0E7F782C176F679561AE63AD5A7C0C76A`,解压后 8 个载荷逐文件复验通过。只读生产预检确认根站、租户接口、移动首页和 64/64 schema 门禁通过,但生产后端模块、管理端和移动 H5 与本地候选仍不一致;用户隐私选择、权限反例、认证态核心业务和正式内容也未完成,故 Go/No-Go 为 **No-Go**。本次没有新增生产发布、服务重启、数据库或静态资源变更。 - **2026-07-26,阿里云百炼 ASR 生产热修复**:`POST /api/ai/asr` 新增 `dashscope/qianwen + qwen3-asr-flash` 的 `/compatible-mode/v1/chat/completions` + Base64 `input_audio` 分支,原 SiliconFlow `/audio/transcriptions` multipart 路径继续兼容,ASR 超时放宽至 30 秒。定向 Maven 测试 10 项通过;后端 JAR(SHA-256 `46c99cff75d21f8536a71c3c058b6437e99dbf9ff4bae3542b44471f3f34ad84`)已发布,生产 ASR 已切换至 `dashscope/qwen3-asr-flash`,旧 `siliconflow/TeleAI/TeleSpeechASR` 已停用。生产接口获得正确转写与受控 `ossId`,Android HBuilderX 标准基座“按住说话”请求成功,线上日志无 403/ASR 异常。回滚目录为 `/opt/wygj/backups/asr-hotfix-20260726210122`;本次未发布静态资源、未变更 schema,也不代表完整包一致性或原生 App 全项验收。 - **2026-07-26,移动端编译链升级与 uni-ui 解析修复,未发布**:本机 HBuilderX GUI 已升级为 `5.22.2026071707`,CLI 为 `5.22.2026072503-alpha`;`mobile-uni` 的 App、App-Plus、H5 与 Vite 编译包统一到对应的 `3.0.0-alpha-5020220260725001` 批次,消除 5.15/5.21 混用产生的两套 `uni-cli-shared` 状态隔离,使登录页 ``、`` 等组件重新由 `pages.json` easycom 规则正常解析。H5 与 App 均以 `Compiler version: 5.22(vue3)` 构建通过;浏览器和 vivo V2443A(Android 15)真机均确认手机号、验证码标签及输入框正常。HBuilder 5.22 标准基座 `versionName=15.22` 已自动更新并成功运行,测试手机号配合固定验证码登录成功,可进入员工首页并切换“问”页,未出现编译器/SDK 版本不匹配弹窗或组件解析告警。升级后仍须重建并安装 5.22 自定义运行基座完成原生权限全清单;`verify:app-release` 当前因缺少含正式法务 HTTPS 链接的 `androidPrivacy.json` 按预期阻断。本项未发布生产 H5,也未云打包 APK/IPA,手机上的 `com.yincheng.wygj` 正式包未被覆盖。 - **2026-07-26,全网 AI 本地库修复,未发布**:补齐 `reset-dev-db.sh` 遗漏的全网 AI 基表、数据库密钥和千问字段三项正式迁移,并增加迁移顺序及幂等回归,避免重置本地库后再次缺失 `aihr_web_search_provider`;当前本地库为 137 张表,管理端代理下的提供方列表接口验证通过。 diff --git a/README.md b/README.md index 1e48ed45..9a49fb19 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ - 品牌:管理端与员工端统一显示“帮道”,继续使用现有红色品牌图标。 - 基础链路:租户列表、验证码、`000000 / admin / admin123` 加密登录已验证。 - 管理端:除 AI 面试、训练、案例、SOP 和资料处理外,已包含大喇叭发布、单文件提炼与多岗位解读、五渠道直通反馈收件箱、内容/任务运营、问题榜运营、知识空间、全网 AI 配置和组织权限;员工个人训练、主管复盘、团队难题、成长证据与训练录音仅在认证 APP 按项目范围访问。 -- 用户侧:`mobile-uni/` 承载员工、候选人和主管三端;“问”已改为数字师傅 Agent,文字、ASR 转写和图片/视频统一先做意图规划,再按服务端权限调用知识、训练、待办、记忆、媒体或全网工具,寒暄和不完整表达不再机械落入 RAG。现有能力还包括手机号登录、30 分钟短期多轮、原文件/视频受控交付、大喇叭公司文件摘要/下载/多岗位解读/追问、五渠道直通反馈、“记一下”确认卡、三级字号、训练/题目反馈、问题榜与积分、岗位考试、案例、候选面试/资料、主管复盘/派发及学员模式。Agent 代码已随 2026-07-25 完整包部署;2026-07-29 当前候选包为 `0.1.8 (108)`,已通过 API 35、法务链接、包内资源一致性、敏感值、禁止明文 HTTP 和网络安全资源门禁,并在本机 Android 15/API 35 虚拟机完成干净安装和冷启动。代码候选提交 `8764031d` 的统一 RC 证据为 `releaseEligible=true`,`ruoyi-aihr` 698 项测试通过;5 个场景和 30 道政策题已整理为禁用/待审候选,但正式可发布内容仍为 0/0。最新包已真实显示原生隐私弹窗,四项敏感权限保持未授权且未见崩溃,`0.1.6` 已在 Android 15 真机完成覆盖安装。用户亲自执行的隐私选择、权限正反例、认证态核心业务全回归、生产依赖匹配和发布签认仍未完成,当前 Go/No-Go 仍为 No-Go。旧 `mobile/` 只用于历史回溯。 +- 用户侧:`mobile-uni/` 承载员工、候选人和主管三端;“问”已改为数字师傅 Agent,文字、ASR 转写和图片/视频统一先做意图规划,再按服务端权限调用知识、训练、待办、记忆、媒体或全网工具,寒暄和不完整表达不再机械落入 RAG。现有能力还包括手机号登录、30 分钟短期多轮、原文件/视频受控交付、大喇叭公司文件摘要/下载/多岗位解读/追问、五渠道直通反馈、“记一下”确认卡、三级字号、训练/题目反馈、问题榜与积分、岗位考试、案例、候选面试/资料、主管复盘/派发及学员模式。Agent 代码已随 2026-07-25 完整包部署;2026-07-29 当前候选包为 `0.1.9 (109)`,已通过 API 35、法务链接、包内资源一致性、敏感值、禁止明文 HTTP 和网络安全资源门禁,并在本机 Android 15/API 35 虚拟机从 `0.1.8` 覆盖升级、冷启动且保持四项敏感权限未授权。媒体选择取消不再被误报为上传/转写失败,移动端 197 项测试通过。代码候选提交 `cb928eda` 的统一 RC 证据为 `releaseEligible=true`,`ruoyi-aihr` 698 项测试通过;5 个场景和 30 道政策题已整理为禁用/待审候选,但正式可发布内容仍为 0/0。最新包已真实显示原生隐私弹窗且未见崩溃,`0.1.6` 已在 Android 15 真机完成覆盖安装。用户亲自执行的隐私选择、权限正反例、认证态核心业务全回归、生产依赖匹配和发布签认仍未完成,当前 Go/No-Go 仍为 No-Go。旧 `mobile/` 只用于历史回溯。 - 英雄路径:AI 面试(真模型出题/评分)、三角色对练(真 LLM 客户回复+评分,ASR/TTS 配置后支持语音)、案例沉淀(真实语音上传+ASR 转写+模型整理)均为真模型优先、未配置或失败回退本地兜底;生产短音频 ASR 当前为阿里云百炼 `qwen3-asr-flash`,SiliconFlow audio 接口保留兼容。SOP 知识库已接中文关键词 + MySQL Fulltext + Qdrant 混合召回 + rerank 重排,支持 txt/md/PDF/Word/Excel/PPT/图片/视频上传解析入库(图片走 vision OCR,视频走 ffmpeg 抽音轨转写+关键帧描述),资料处理中心支持 ZIP 异步展开后逐文件入队;模型配置页可查看向量库维度/点数并一键重建。 - 资料处理:已新增解析任务状态页,按 `aihr_knowledge_attach` 和 `aihr_knowledge_fragment` 展示等待解析、解析中、已完成、失败、片段数和向量化状态;任务列表按当前筛选结果前端分页(10/20/50 条,筛选或刷新回到第一页)。页面只保留“批量导入”,通过异步队列处理多文件或 ZIP,不提供浏览器目录选择和服务端目录导入入口。后端目录导入接口仅保留为运维/调试能力。 - 组织人员:`aihr_org_snapshot` 本地 reset 保留演示 seed;生产通过 `POST /api/aihr/org/sync` 同步外部组织。2026-07-25 记录的生产快照为 3417 人、2938 人在职且均有姓名、3392 个手机号映射、175 名在职主管和 20 名项目经理;姓名通过稳定 `employee_id` 定向补齐,未执行全量覆盖。当前上游 `employee_number` 与既有主体不一致且手机号大量脱敏,修复契约前禁止强制全量同步;人数属于时点事实,发布或验收前应重新查询。 diff --git a/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md b/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md index 3f68e08e..720dcde9 100644 --- a/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md +++ b/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md @@ -28,6 +28,10 @@ 同一 `0.1.8` APK 又在虚拟机完成保留数据的同版本覆盖安装。覆盖后冷启动 `3.092s`、标准 Launcher Intent 暖启动 `0.538s`、从系统桌面恢复热启动 `0.120s`;原生隐私弹窗和四项未授权状态始终保持,未发现 FATAL 或 ANR。该结果证明当前 APK 的安装升级、入口解析和首次弹窗前生命周期基线,不证明登录后前后台、弱网、录音或业务闭环。 +随后针对 Android 系统文件选择器“用户取消”被误判成上传或转写失败的问题,将五个文件选择服务统一为结构化取消信号,并在九个页面恢复空闲态、清理残留“转写中”提示;真实平台异常仍显示稳定中文错误。新增回归覆盖五个选择器的取消/失败分流以及九个消费页面,移动端测试增至 `197/197`,类型检查通过。自动化证明状态机已修复,但真实系统文件选择器的取消操作仍须人工点击确认。 + +当前候选包已升级为 `0.1.9 (109)`,大小 `33,921,936` 字节,SHA-256 为 `0A968807E44F061C330C57E2C6D31A5F1F454177E0EAFBB80A76F5F06A311341`。DCloud 云打包成功后,APK 元数据、测试签名、包内资源、法务链接、网络安全配置和敏感值门禁全部通过;同一虚拟机从 `0.1.8` 保留数据覆盖安装成功,Launcher 冷启动约 `4.260s`,显示最新原生隐私弹窗,四项敏感权限仍为 `granted=false`,未发现 FATAL 或 ANR。验收仍未代替用户点击拒绝或同意。 + ## 已完成的 Android 基座证据 - [x] 自定义基座包名、版本、API 35、单签名、v2 签名和 SHA-256 可重复校验。 @@ -39,6 +43,8 @@ - [x] `0.1.6 (106)` 当前候选包完成同签名覆盖安装、冷启动和启动权限复核,包内资源与当前 App-Plus 编译产物一致。 - [x] `0.1.8 (108)` 在本机 Android 15/API 35 虚拟机完成卸载重装和冷启动,最新包原生隐私弹窗真实显示,四项敏感权限保持未授权、网络安全配置已进入 APK 且未见崩溃。 - [x] `0.1.8 (108)` 在同一虚拟机完成保留数据覆盖安装、标准 Launcher 启动和首次隐私弹窗前的后台/前台恢复,未见 FATAL 或 ANR。 +- [x] `0.1.9 (109)` 从 `0.1.8` 保留数据覆盖安装并冷启动成功,最新原生隐私弹窗、未授权权限基线和无 FATAL/ANR 状态保持。 +- [x] 媒体选择取消/真实失败的状态机已由 197/197 个移动端测试覆盖;真实 Android 文件选择器取消仍列为下方人工门禁。 ## Android(最低 Android 10 + 一台当前主流机型) diff --git a/docs/MOBILE_APP_PACKAGING.md b/docs/MOBILE_APP_PACKAGING.md index 33b68940..34af702a 100644 --- a/docs/MOBILE_APP_PACKAGING.md +++ b/docs/MOBILE_APP_PACKAGING.md @@ -65,7 +65,7 @@ HBuilderX 5.22 当前实测中,自定义调试基座不支持安心打包, ```powershell & '.\mobile-uni\scripts\verify-android-apk.ps1' ` - -ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.8-dcloud-test.apk' ` + -ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.9-dcloud-test.apk' ` -BuildKind dcloud-test ``` @@ -75,13 +75,13 @@ APK 门禁还会比较包内与当前 `dist/build/app/app-service.js` 的 SHA-25 ```powershell .\scripts\prepare-aug1-rc.ps1 ` - -ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.8-dcloud-test.apk' ` + -ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.9-dcloud-test.apk' ` -BuildKind dcloud-test ``` 脚本会复跑移动端测试/类型检查/H5/App 构建、管理端构建、后端定向测试和打包,验证 APK 后在被 Git 忽略的 `output/aug1-rc/` 生成标准文件名、哈希及 JSON/Markdown 证据。它不执行生产同步、数据库迁移、服务重启或用户隐私选择。 -2026-07-28 最终自定义基座大小为 `21,158,193` 字节,SHA-256 为 `82D3352FF96A86F5DB4AC0C71DCB0ED6CEC98F2A785F6EAED2FE8D4FC0C5F704`。2026-07-29 当前独立内测候选包为 `bangdao-0.1.8-dcloud-test.apk`:包名 `com.yincheng.wygj`、版本 `0.1.8 (108)`、`targetSdkVersion=35`,大小 `33,921,705` 字节,SHA-256 为 `E252140645F3AAD14B3594FD78E76BDF1A2122F7DC70EBD21CC5DF53223C7878`,签名证书 SHA-256 为 `AB06ECC0DE544DE73C385F3F0690B22966EBC12887FB8BEE1830CDBEFDEBEF5D`。APK 反编译门禁已确认包内业务资源等于当前 App-Plus 编译产物,法务配置、敏感值扫描、`usesCleartextTraffic=false`、`networkSecurityConfig` 引用和系统证书信任配置均通过;本机 Android 15/API 35 虚拟机完成卸载重装、冷启动和权限基线复核,总启动耗时约 `2.9s`,四项敏感权限保持未授权且 crash 缓冲区为空。该包仍使用 DCloud 云端测试证书,只能作为 8 月 1 日受控内测包;企业正式 release 还必须使用签认后的企业证书摘要。 +2026-07-28 最终自定义基座大小为 `21,158,193` 字节,SHA-256 为 `82D3352FF96A86F5DB4AC0C71DCB0ED6CEC98F2A785F6EAED2FE8D4FC0C5F704`。2026-07-29 当前独立内测候选包为 `bangdao-0.1.9-dcloud-test.apk`:包名 `com.yincheng.wygj`、版本 `0.1.9 (109)`、`targetSdkVersion=35`,大小 `33,921,936` 字节,SHA-256 为 `0A968807E44F061C330C57E2C6D31A5F1F454177E0EAFBB80A76F5F06A311341`,签名证书 SHA-256 为 `AB06ECC0DE544DE73C385F3F0690B22966EBC12887FB8BEE1830CDBEFDEBEF5D`。APK 反编译门禁已确认包内业务资源等于当前 App-Plus 编译产物,法务配置、敏感值扫描、`usesCleartextTraffic=false`、`networkSecurityConfig` 引用和系统证书信任配置均通过;本机 Android 15/API 35 虚拟机已从 `0.1.8` 保留数据覆盖升级并在约 `4.260s` 内冷启动,原生隐私弹窗继续显示,四项敏感权限保持未授权且未见 FATAL/ANR。统一 RC 在干净提交 `cb928eda` 上复跑移动端 197/197、`ruoyi-aihr` 698/698 及全部构建/校验门禁,证据为 `output/aug1-rc/0.1.9-109-cb928eda-frozen/`。该包仍使用 DCloud 云端测试证书,只能作为 8 月 1 日受控内测包;企业正式 release 还必须使用签认后的企业证书摘要。 企业正式签名 APK 还必须用发布负责人保管的证书摘要执行 release 模式核验;该模式会额外拒绝 `debuggable=true`、明文 HTTP 和签名摘要不一致: diff --git a/docs/帮道8月1日Android内测Go-No-Go-20260728.md b/docs/帮道8月1日Android内测Go-No-Go-20260728.md index fd6d35c9..09b38b11 100644 --- a/docs/帮道8月1日Android内测Go-No-Go-20260728.md +++ b/docs/帮道8月1日Android内测Go-No-Go-20260728.md @@ -1,6 +1,6 @@ # 帮道 8 月 1 日 Android 内测 Go/No-Go -> 评估时间:2026-07-29 01:55(CST) +> 评估时间:2026-07-29 02:18(CST) > > 评估对象:2026-08-01 受控内部测试 APK,不代表正式发布、应用商店上架或阶段一严格试点验收。 > @@ -16,23 +16,23 @@ | 检查项 | 当前结果 | |---|---| -| 版本冻结 | 代码候选提交 `8764031d4acf2fbaa4870c76f520c1fffbae1ec4`,工作区干净,统一 RC 证据 `releaseEligible=true`;该冻结提交相对 `origin/main` 领先 4 个提交,尚未推送 | -| 移动端自动化 | 193 项单元测试通过;TypeScript 类型检查通过 | +| 版本冻结 | 代码候选提交 `cb928edafd637c3fd8a006621ef8606d455740ef`,工作区干净,统一 RC 证据 `releaseEligible=true`;该冻结提交相对 `origin/main` 领先 7 个提交,尚未推送 | +| 移动端自动化 | 197 项单元测试通过;TypeScript 类型检查通过;五个文件选择器和九个消费页面已覆盖用户取消/平台失败分流 | | 构建 | `mobile-uni` H5、App-Plus、管理端生产构建通过;后端 `ruoyi-admin.jar` 重建通过 | | P0 后端语义 | `AihrSopSeedServiceTest` 39 项、`AihrPracticeSeedServiceTest` 102 项通过;`ruoyi-aihr` 698 项全量测试通过,0 失败、0 错误 | | 内容候选门禁 | 已生成 5 个禁用场景候选和 30 道待审政策题,机器校验通过;正式可发布场景 `0`、正式有据标准答案 `0`,不得导入或启用 | | App 资源门禁 | 正式法务 URL、原生隐私配置、API 35、图标和启动图检查通过 | -| 独立 APK | `com.yincheng.wygj`,`0.1.8 (108)`,`targetSdkVersion=35`,v2 签名,明文 HTTP 关闭且网络安全资源已进入 APK;SHA-256 `E252140645F3AAD14B3594FD78E76BDF1A2122F7DC70EBD21CC5DF53223C7878` | +| 独立 APK | `com.yincheng.wygj`,`0.1.9 (109)`,`targetSdkVersion=35`,v2 签名,明文 HTTP 关闭且网络安全资源已进入 APK;SHA-256 `0A968807E44F061C330C57E2C6D31A5F1F454177E0EAFBB80A76F5F06A311341` | | APK 内容门禁 | 包内业务资源等于当前 App-Plus 编译产物;法务链接、手机号、固定测试验证码、私钥和常见令牌扫描通过 | | 真机安装启动 | vivo V2443A(Android 15)完成 `0.1.6` 覆盖安装和冷启动;相机、录音、媒体权限保持未授权,未见 `FATAL EXCEPTION` | -| 虚拟机安装与生命周期 | 本机 `Medium_Phone` Android 15/API 35 完成 `0.1.8` 卸载重装、同版本覆盖安装、冷启动、后台/前台恢复和标准 Launcher Intent 启动;覆盖安装后冷启动 `3.092s`,Launcher 暖启动 `0.538s`,后台恢复热启动 `0.120s`,原生隐私弹窗与四项未授权状态保持,未见 FATAL/ANR | +| 虚拟机安装与生命周期 | 本机 `Medium_Phone` Android 15/API 35 已完成 `0.1.8` 卸载重装、同版本覆盖及冷/暖/热启动,并从 `0.1.8` 保留数据升级到 `0.1.9`;新包冷启动 `4.260s`,原生隐私弹窗与四项未授权状态保持,未见 FATAL/ANR | | 首次隐私弹窗 | 最新包已在虚拟机干净启动显示原生弹窗;前一候选包的两个 HTTPS 链接已在 vivo 系统浏览器打开,仍需用户亲自执行拒绝/同意反例 | | 法务静态页 | `https://peilian.njzhmj.top/legal/terms.html` 与 `https://peilian.njzhmj.top/legal/privacy.html` 已部署并可访问;发布前站点备份为 `/opt/wygj/backups/www-20260728224710` | ## No-Go 阻断项 1. **生产依赖未形成同一版本。** 只读预检确认生产根站、租户接口、移动首页和 64/64 schema 门禁通过,但本地/生产 `ruoyi-aihr` 规范化哈希分别为 `c93460e80b9552233cf9e57e8522ae08b18799c58314dac3079c3cc651bb4097` / `15f5513ac731d06f1ccbc6e709024a1cc40ca1080d60e91ceb25436d58c585a6`;管理端和移动 H5 入口资源也均不匹配。不能把本地测试通过外推为生产 APK 调用链通过。此次仅上线法务静态页,未发布后端、H5 业务资源或数据库迁移。 -2. **原生人工反例未完成。** 覆盖安装和冷启动已通过;仍缺用户亲自执行的同意/拒绝、拒绝后退出、同意后登录、短信失败与重新登录、麦克风允许/拒绝、媒体取消、前后台切换和弱网验证。 +2. **原生人工反例未完成。** 覆盖升级和冷启动已通过,媒体取消状态机已自动化修复;仍缺用户亲自执行的同意/拒绝、拒绝后退出、同意后登录、短信失败与重新登录、麦克风允许/拒绝、真实系统选择器取消、登录后前后台切换和弱网验证。 3. **核心业务真机闭环未完成。** 仍缺认证账号下完整“查/练/问”、五个直通渠道、五个正式对练场景、ASR/TTS、附件上传下载和越权反例。 4. **内容与业务验收不足。** 当前仅收到 1/24 份生活顾问访谈。技术侧已把调研整理为 30 道政策题候选和 5 个场景候选,但全部保持待审/禁用,正式可发布场景和正式有据标准答案仍为 0/0;五渠道真实处理人也没有业务签认证据。 5. **发布与回滚未签认。** 本地已有 APK/后端最小版本矩阵、构建证据和回滚边界,但尚无负责人签字、完整预检通过和回滚演练记录。当前 APK 已关闭明文流量但仍使用 DCloud 测试证书,只能用于受控内测;企业签名和公司法务正式签认仍是正式发布门槛。 @@ -41,7 +41,7 @@ | 顺序 | 必须完成 | 验收证据 | |---|---|---| -| 已完成 | 确定 APK、后端、管理端/H5、数据库四个发布单元,提交并冻结 release commit | `8764031d`、`releaseEligible=true`、`output/aug1-rc/0.1.8-108-8764031d-frozen/`、四单元版本矩阵 | +| 已完成 | 确定 APK、后端、管理端/H5、数据库四个发布单元,提交并冻结 release commit | `cb928eda`、`releaseEligible=true`、`output/aug1-rc/0.1.9-109-cb928eda-frozen/`、`bangdao-aug1-0.1.9-109-cb928eda.zip`(SHA-256 `A91C1F672C738C9950295F967833F9E0E7F782C176F679561AE63AD5A7C0C76A`) | | 1 | 获得授权后只发布实际依赖的后端;管理端/H5 延期,schema 本批不变;随后重跑完整 `release-preflight` | 本地与生产 `ruoyi-aihr` 模块匹配,schema 继续通过 | | 2 | 用户在已连接 Android 手机上完成隐私选择和权限正反例 | 设备、包版本、步骤、结果;不记录手机号、验证码和个人内容 | | 3 | 用正式测试账号完成“查/练/问”、五直通渠道及附件/语音闭环 | 每条用例的时间、结果、失败截图或日志 | diff --git a/docs/帮道8月1日Android安装包测试版任务计划-20260727.docx b/docs/帮道8月1日Android安装包测试版任务计划-20260727.docx index 6a4d203205f71e0ed8db120570b747b65d522404..b3bafab4f494be09bbdd650dcb0e7401bc1a7b70 100644 GIT binary patch delta 23512 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 eqncWSJ*<$CXsV*3J>44NfY7`1r2Zda;ki2i delta 23089 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 TIYQCqIwa