From 04b35c055f370e369f85558807b554197cf3b223 Mon Sep 17 00:00:00 2001 From: key Date: Wed, 29 Jul 2026 02:53:10 +0800 Subject: [PATCH] docs: refresh Android 0.1.10 release evidence --- CHANGELOG.md | 2 +- README.md | 2 +- docs/MOBILE_APP_DEVICE_ACCEPTANCE.md | 8 ++++---- docs/MOBILE_APP_PACKAGING.md | 6 +++--- .../帮道8月1日Android内测Go-No-Go-20260728.md | 10 +++++----- ...Android安装包测试版任务计划-20260727.docx | Bin 61115 -> 61160 bytes ...1日Android安装包测试版任务计划-20260727.md | 10 +++++----- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1c37ae6..6e90f338 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.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-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.10 (110)` 的 `targetSdkVersion=35`,SHA-256 为 `20CB16B4E9D024DBF5EEEF577BFBA3B4DF5E5E78B597BABB99CB7450C7AE5034`;Android 原生网络安全配置经 APK 反编译确认 `usesCleartextTraffic=false`、`networkSecurityConfig` 引用和系统证书信任配置均已进入安装包。本机 `Medium_Phone` Android 15/API 35 虚拟机已完成从 `0.1.9` 保留数据覆盖升级和冷启动,真实显示原生隐私弹窗,四项敏感权限保持未授权且未见 FATAL/ANR;`0.1.6` 已在 vivo V2443A(Android 15)完成覆盖安装和冷启动。代码候选提交 `dc20b920` 已在干净工作区通过统一 RC 门禁,`releaseEligible=true`:移动端 198 项测试、类型检查、H5/App 构建、管理端构建、`ruoyi-aihr` 698 项全量测试、后端打包及 APK 强化门禁全部通过;最小交付包 SHA-256 为 `4BAA79B2CA2C4D486B6194288D90022D5F994A4D8C8E05D7C2DDD87F9BF5B3B7`,解压后 9 个文件、其中 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 9a49fb19..5b078b08 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.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/` 只用于历史回溯。 +- 用户侧:`mobile-uni/` 承载员工、候选人和主管三端;“问”已改为数字师傅 Agent,文字、ASR 转写和图片/视频统一先做意图规划,再按服务端权限调用知识、训练、待办、记忆、媒体或全网工具,寒暄和不完整表达不再机械落入 RAG。现有能力还包括手机号登录、30 分钟短期多轮、原文件/视频受控交付、大喇叭公司文件摘要/下载/多岗位解读/追问、五渠道直通反馈、“记一下”确认卡、三级字号、训练/题目反馈、问题榜与积分、岗位考试、案例、候选面试/资料、主管复盘/派发及学员模式。Agent 代码已随 2026-07-25 完整包部署;2026-07-29 当前候选包为 `0.1.10 (110)`,已通过 API 35、法务链接、包内资源一致性、敏感值、禁止明文 HTTP 和网络安全资源门禁,并在本机 Android 15/API 35 虚拟机从 `0.1.9` 覆盖升级、冷启动且保持四项敏感权限未授权。媒体选择取消不再被误报为上传/转写失败;直通车首次弱网加载失败后可原位重试,失败时清空旧通道并禁止提交;移动端 198 项测试通过。代码候选提交 `dc20b920` 的统一 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 720dcde9..2c16b18c 100644 --- a/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md +++ b/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md @@ -28,9 +28,9 @@ 同一 `0.1.8` APK 又在虚拟机完成保留数据的同版本覆盖安装。覆盖后冷启动 `3.092s`、标准 Launcher Intent 暖启动 `0.538s`、从系统桌面恢复热启动 `0.120s`;原生隐私弹窗和四项未授权状态始终保持,未发现 FATAL 或 ANR。该结果证明当前 APK 的安装升级、入口解析和首次弹窗前生命周期基线,不证明登录后前后台、弱网、录音或业务闭环。 -随后针对 Android 系统文件选择器“用户取消”被误判成上传或转写失败的问题,将五个文件选择服务统一为结构化取消信号,并在九个页面恢复空闲态、清理残留“转写中”提示;真实平台异常仍显示稳定中文错误。新增回归覆盖五个选择器的取消/失败分流以及九个消费页面,移动端测试增至 `197/197`,类型检查通过。自动化证明状态机已修复,但真实系统文件选择器的取消操作仍须人工点击确认。 +随后针对 Android 系统文件选择器“用户取消”被误判成上传或转写失败的问题,将五个文件选择服务统一为结构化取消信号,并在九个页面恢复空闲态、清理残留“转写中”提示;真实平台异常仍显示稳定中文错误。新增回归覆盖五个选择器的取消/失败分流以及九个消费页面。直通车页同时补齐首次弱网导致五个直达对象加载失败后的原位重试,失败时清空旧通道并禁止提交,恢复后自动选择有效通道;再增加 package、lockfile 与 manifest 版本一致性门禁。移动端测试增至 `198/198`,类型检查通过。自动化证明状态机已修复,但真实系统文件选择器取消与断网恢复仍须人工点击确认。 -当前候选包已升级为 `0.1.9 (109)`,大小 `33,921,936` 字节,SHA-256 为 `0A968807E44F061C330C57E2C6D31A5F1F454177E0EAFBB80A76F5F06A311341`。DCloud 云打包成功后,APK 元数据、测试签名、包内资源、法务链接、网络安全配置和敏感值门禁全部通过;同一虚拟机从 `0.1.8` 保留数据覆盖安装成功,Launcher 冷启动约 `4.260s`,显示最新原生隐私弹窗,四项敏感权限仍为 `granted=false`,未发现 FATAL 或 ANR。验收仍未代替用户点击拒绝或同意。 +当前候选包已升级为 `0.1.10 (110)`,大小 `33,922,134` 字节,SHA-256 为 `20CB16B4E9D024DBF5EEEF577BFBA3B4DF5E5E78B597BABB99CB7450C7AE5034`。DCloud 云打包成功后,APK 元数据、测试签名、包内资源、法务链接、网络安全配置和敏感值门禁全部通过;同一虚拟机从 `0.1.9` 保留数据覆盖安装成功,Launcher 冷启动约 `1.271s`,显示最新原生隐私弹窗,四项敏感权限仍为 `granted=false`,未发现 FATAL 或 ANR。验收仍未代替用户点击拒绝或同意。 ## 已完成的 Android 基座证据 @@ -43,8 +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 文件选择器取消仍列为下方人工门禁。 +- [x] `0.1.10 (110)` 从 `0.1.9` 保留数据覆盖安装并冷启动成功,最新原生隐私弹窗、未授权权限基线和无 FATAL/ANR 状态保持。 +- [x] 媒体选择取消/真实失败与直通车首次弱网恢复状态机已由 198/198 个移动端测试覆盖;真实 Android 文件选择器取消与断网恢复仍列为下方人工门禁。 ## Android(最低 Android 10 + 一台当前主流机型) diff --git a/docs/MOBILE_APP_PACKAGING.md b/docs/MOBILE_APP_PACKAGING.md index 34af702a..70faf176 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.9-dcloud-test.apk' ` + -ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.10-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.9-dcloud-test.apk' ` + -ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.10-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.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 还必须使用签认后的企业证书摘要。 +2026-07-28 最终自定义基座大小为 `21,158,193` 字节,SHA-256 为 `82D3352FF96A86F5DB4AC0C71DCB0ED6CEC98F2A785F6EAED2FE8D4FC0C5F704`。2026-07-29 当前独立内测候选包为 `bangdao-0.1.10-dcloud-test.apk`:包名 `com.yincheng.wygj`、版本 `0.1.10 (110)`、`targetSdkVersion=35`,大小 `33,922,134` 字节,SHA-256 为 `20CB16B4E9D024DBF5EEEF577BFBA3B4DF5E5E78B597BABB99CB7450C7AE5034`,签名证书 SHA-256 为 `AB06ECC0DE544DE73C385F3F0690B22966EBC12887FB8BEE1830CDBEFDEBEF5D`。APK 反编译门禁已确认包内业务资源等于当前 App-Plus 编译产物,法务配置、敏感值扫描、`usesCleartextTraffic=false`、`networkSecurityConfig` 引用和系统证书信任配置均通过;本机 Android 15/API 35 虚拟机已从 `0.1.9` 保留数据覆盖升级并在约 `1.271s` 内冷启动,原生隐私弹窗继续显示,四项敏感权限保持未授权且未见 FATAL/ANR。统一 RC 在干净提交 `dc20b920` 上复跑移动端 198/198、`ruoyi-aihr` 698/698 及全部构建/校验门禁,证据为 `output/aug1-rc/0.1.10-110-dc20b920-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 09b38b11..67bcda55 100644 --- a/docs/帮道8月1日Android内测Go-No-Go-20260728.md +++ b/docs/帮道8月1日Android内测Go-No-Go-20260728.md @@ -16,16 +16,16 @@ | 检查项 | 当前结果 | |---|---| -| 版本冻结 | 代码候选提交 `cb928edafd637c3fd8a006621ef8606d455740ef`,工作区干净,统一 RC 证据 `releaseEligible=true`;该冻结提交相对 `origin/main` 领先 7 个提交,尚未推送 | -| 移动端自动化 | 197 项单元测试通过;TypeScript 类型检查通过;五个文件选择器和九个消费页面已覆盖用户取消/平台失败分流 | +| 版本冻结 | 代码候选提交 `dc20b92061f10a356ed73eb105ef7b00c8b8a617`,工作区干净,统一 RC 证据 `releaseEligible=true`;该冻结提交相对 `origin/main` 领先 9 个提交,尚未推送 | +| 移动端自动化 | 198 项单元测试通过;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.9 (109)`,`targetSdkVersion=35`,v2 签名,明文 HTTP 关闭且网络安全资源已进入 APK;SHA-256 `0A968807E44F061C330C57E2C6D31A5F1F454177E0EAFBB80A76F5F06A311341` | +| 独立 APK | `com.yincheng.wygj`,`0.1.10 (110)`,`targetSdkVersion=35`,v2 签名,明文 HTTP 关闭且网络安全资源已进入 APK;SHA-256 `20CB16B4E9D024DBF5EEEF577BFBA3B4DF5E5E78B597BABB99CB7450C7AE5034` | | APK 内容门禁 | 包内业务资源等于当前 App-Plus 编译产物;法务链接、手机号、固定测试验证码、私钥和常见令牌扫描通过 | | 真机安装启动 | vivo V2443A(Android 15)完成 `0.1.6` 覆盖安装和冷启动;相机、录音、媒体权限保持未授权,未见 `FATAL EXCEPTION` | -| 虚拟机安装与生命周期 | 本机 `Medium_Phone` Android 15/API 35 已完成 `0.1.8` 卸载重装、同版本覆盖及冷/暖/热启动,并从 `0.1.8` 保留数据升级到 `0.1.9`;新包冷启动 `4.260s`,原生隐私弹窗与四项未授权状态保持,未见 FATAL/ANR | +| 虚拟机安装与生命周期 | 本机 `Medium_Phone` Android 15/API 35 已完成历史卸载重装、同版本覆盖及冷/暖/热启动,并从 `0.1.9` 保留数据升级到 `0.1.10`;新包冷启动 `1.271s`,原生隐私弹窗与四项未授权状态保持,未见 FATAL/ANR | | 首次隐私弹窗 | 最新包已在虚拟机干净启动显示原生弹窗;前一候选包的两个 HTTPS 链接已在 vivo 系统浏览器打开,仍需用户亲自执行拒绝/同意反例 | | 法务静态页 | `https://peilian.njzhmj.top/legal/terms.html` 与 `https://peilian.njzhmj.top/legal/privacy.html` 已部署并可访问;发布前站点备份为 `/opt/wygj/backups/www-20260728224710` | @@ -41,7 +41,7 @@ | 顺序 | 必须完成 | 验收证据 | |---|---|---| -| 已完成 | 确定 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`) | +| 已完成 | 确定 APK、后端、管理端/H5、数据库四个发布单元,提交并冻结 release commit | `dc20b920`、`releaseEligible=true`、`output/aug1-rc/0.1.10-110-dc20b920-frozen/`、`bangdao-aug1-0.1.10-110-dc20b920.zip`(SHA-256 `4BAA79B2CA2C4D486B6194288D90022D5F994A4D8C8E05D7C2DDD87F9BF5B3B7`) | | 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 b3bafab4f494be09bbdd650dcb0e7401bc1a7b70..e9f96849bd0f2548930c54f0d042fd6608bacef0 100644 GIT binary patch delta 23883 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 p0D$X0a0$RC&?frKtjUi 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

6gYE44IRh}%AZ-11jy4n=M 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