Files
youle_app_ohos/docs/设计文档/Plan/03_风险登记册.md
T

50 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 03 · 风险登记册
> 概率/影响:高/中/低。状态:开放/缓解中/关闭。受阻任务(`⚠`)须在此登记。
## 1. 技术风险(最高优先)
| ID | 风险 | 概率 | 影响 | 触发信号 | 缓解 / 应对 | 负责人 |
|---|---|---|---|---|---|---|
| **R-01** | **`yy://` 自定义 scheme 的 iframe 导航不被 `onLoadIntercept` 捕获**(桥不通) | 中 | 高(阻断全局) | T-M1-07 验证失败 | 前置到 M1 最先验证;回退:`onInterceptRequest`+`WebSchemeHandler` 注册 `yy` scheme;或改桥 JS 走 `javaScriptProxy.postMessage`(对 H5 透明)。三方案均零改 H5 | 桥/技术负责人 |
| **R-02 ✅关闭** | **`file://` 页面跨域受限**H5 的 XHR/fetch 取本地资源失败 | 中 | 高(大厅/子游戏白屏) | T-M2-08 验证失败 | **已关闭(2026-06-25)**T-M2-08 首测确被 CORS 拦截(origin 'null'file 不在允许跨域 scheme);采用官方方案 `WebviewController.setPathAllowingUniversalAccess([filesDir/tsgames])` 放开资源根跨域,对 H5 透明(仍 file:// 加载)。模拟器复测 fetch/XHR OK。比 onInterceptRequest 代理更简、无需逐请求拦截 | 台/桥 |
| **R-03** | `MessageCodec` 转义与 lzyzsd 不一致,含特殊字符的 data 解析错位 | 中 | 中 | 含引号/反斜杠/中文的分享文案、JSON data 解析异常 | 单测以 Android 端样例做字节级对照;复用库 JS 原文件 | 桥 |
| **R-04** | **线程问题**:能力回调在非 UI 线程调 `runJavaScript` 崩溃/丢消息 | 中 | 高 | 定位/支付/传感器回调偶发崩溃 | 强制 UI 线程守卫(框架 §5.5);能力回传统一经桥(emitter/UIContext | 桥 |
| **R-05** | **TaskPool Sendable 约束**导致下载/解压回调传参编译/运行失败 | 中 | 中 | `@Concurrent` 报 Sendable 错 | 仅传 Sendable + emitter 回传(§9.1);路径在 UI 线程取好传字符串 | 台 |
| **R-06** | 远程配置二级 `url`/分层覆盖逻辑与 Android 不一致,选错下载地址/版本 | 中 | 中 | 资源版本判断错误、下错包 | `VersionResolver` 纯函数 + 多层样例单测,对照《契约规范》§4.4 | 台 |
| **R-07** | Web 保活(NodeController/BuilderNode)生命周期/内存复杂,切换异常或泄漏 | 中 | 中 | 切换白屏/内存涨 | M5 才上;先用 `loadUrl` 切换保底;保活作为优化项可回退 | 桥 |
| **R-08** | `app_data.js` 注入时序错误(加载后才写),H5 读不到配置 | 低 | 高 | 大厅读 `app_*` 为 undefined | 铁律:`INJECT_APP_DATA` 早于进入容器(框架 §7.1/§8.4);测试覆盖 | 台 |
## 2. 第三方 SDK / 平台风险
| ID | 风险 | 概率 | 影响 | 缓解 / 应对 | 负责人 |
|---|---|---|---|---|---|
| **R-09** | 微信/分享/定位等厂商 **HarmonyOS SDK 缺失或能力不全** | 中 | 中 | 早期做 SDK 可用性盘点;缺失则系统能力替代(如系统分享/系统定位)或服务端代理;登录/支付走 code/服务端 | 能 |
| **R-10** | 声网/支付 SDK 集成成本高 | 中 | 低(本期桩规避) | 本期占位桩,M6 按需集成;不阻塞主线 | 能 |
| **R-11** | 高德等定位 SDK **隐私合规**未先行,定位失败/审核不过 | 中 | 中 | 使用前 `updatePrivacyShow/Agree`;权限用时申请 + 文案;优先系统定位 | 能 |
| **R-12** | 本机 HTTP 上传服务(截图)实现复杂(无内置 server) | 中 | 低 | `@ohos.net.socket` 自建轻量服务或 NAPI;截图分享非核心可后置 | 台 |
| **R-13** | ArkWeb 版本差异导致 API 行为变化 | 低 | 中 | 锁定目标 API 版本;编码前 `devecocli docs` 核对签名;CI 固定 SDK | 桥 |
| **R-19** | **图片剪贴板粘贴不可保证**(分享去SDK化 T-M3-13):图片复制到剪贴板后,微信/QQ 鸿蒙版能否粘贴出 PIXELMAP 取决于对方是否实现(API12+ 读剪贴板有授权管控),不可单方保证 | 中 | 低(有兜底) | 图片以指引窗内 `systemImage`(系统分享) 为可靠交付,剪贴板图片仅尽力而为;**待人工真机验证**微信/QQ 鸿蒙版是否支持粘贴 PIXELMAP,再决定是否保留剪贴板图片路径(spec 2026-06-27-分享重构 §10 | 能 |
## 3. 工程 / 进度风险
| ID | 风险 | 概率 | 影响 | 缓解 / 应对 | 负责人 |
|---|---|---|---|---|---|
| **R-14** | 团队 ArkTS/ArkUI 经验不足,前期效率低 | 中 | 中 | M0/M1 配对开发;沉淀附录 A 适配清单;统一脚手架样板 | 技术负责人 |
| **R-15** | 契约理解偏差导致 handler 行为不符,后期返工 | 中 | 中 | `contracts` HAR 固化为 SSOT;契约探针 H5 每周回归;评审对照 | Q |
| **R-16** | 能力并行开发接口/风格不统一 | 低 | 低 | `CapabilityProvider` 统一接口 + Provider 样板;代码评审 | 桥 |
| **R-17** | 真机/设备不足影响联调与回归 | 低 | 中 | 早期备真机 + 模拟器;CI 夜间冒烟 | PM |
| **R-18** | **单测运行工具链缺口**`devecocli``test` 子命令 | 中 | 中 | **已关闭**:用 DevEco hvigorw `test --mode module -p module=entry@default -p buildMode=test -p coverage=true`(需 DEVECO_SDK_HOME 指向 DevEco 自带 sdk)跑本地单测,封装为 `scripts/test.sh` 并集成 ci.sh | 桥/技术负责人 |
## 4. 受阻任务记录(动态更新)
| 日期 | 受阻任务 | 关联风险 | 描述 | 处置 | 状态 |
|---|---|---|---|---|---|
| 2026-06-25 | T-M1-08 桥引擎单测 | R-18 | 13 用例代码已就位,但 devecocli 无 test 命令、本地单测 hvigor task 未常规暴露,无法 CLI 跑覆盖率 | 用户授权 hvigorw 例外;探明本地单测命令并封装 scripts/test.sh15 用例全通过、桥核心覆盖 87.3% | **已关闭** |
## 5. 风险闸门(与里程碑绑定)
- **M1 闸门**:R-01 必须收敛(V1 通过或回退方案落地)方可进入 M2。
- **M2 闸门**:R-02 必须收敛(V2 通过或回退方案落地)方可大规模铺 M3 能力。
- **M5 闸门**R-04/R-07 收敛 + 安全清单(框架附录 B)通过方可发布。