绑定原生壳能力真实链路

桌面壳门禁拒绝声明能力落入 fallback-only 分支

根级原生壳门禁登记 H5 受控原生路由链路

项目文档同步宿主能力声明验收约定
This commit is contained in:
2026-06-20 16:23:55 +08:00
parent 6f12b48ce1
commit 3661ca69ee
4 changed files with 178 additions and 1 deletions
@@ -3057,3 +3057,10 @@
- 决策:新增 `apps/mobile-shell/src/host-bridge/runtime.test.ts`,直接覆盖 iOS runtime 的 `hostVersion``bridgeVersion`、能力清单和 `app.setBadgeCount`Android runtime 不声明 iOS 专属角标能力,以及 `host.getRuntime` HostBridge 成功响应形状;移动壳单端配置检查和根级原生壳门禁登记该测试文件并反查关键断言片段。该变更不新增 capability,不改变入口 query 或 H5 runtime 回读策略。
- 影响范围:`apps/mobile-shell/src/host-bridge/runtime.test.ts``apps/mobile-shell/scripts/check-config.mjs``scripts/check-native-shells.mjs`、宿主壳方案文档、宿主壳能力统一协议文档。
- 验证方式:`npm run mobile-shell:test -- src/host-bridge/runtime.test.ts``npm run mobile-shell:typecheck``npm run check:native-shells``npm run check:encoding``git diff --check`
## 2026-06-20 原生壳能力声明必须绑定真实链路
- 背景:桌面壳 capability profile 已声明一组 HostBridge request 能力,H5 平台入口也通过 `navigation.openNativePage` 打开 `/child-motion-demo` 这类受控内置玩法路由;如果门禁只检查“有 method case”或“文件被扫描”,未来可能退化成 fallback-only 分支或普通 Web 跳转而不被发现。
- 决策:桌面壳配置检查必须反查每个已声明 request capability 对应的真实模块委托,并拒绝由 `unsupported_method``unsupported_capability` 或 fallback-only case 支撑的声明能力;根级 `check:native-shells` 新增 H5 native app route flow 合约,锁定 `/child-motion-demo``navigateHostNativePage` 调用、浏览器 fallback、路由表和命名交互测试。
- 影响范围:`apps/desktop-shell/scripts/check-config.mjs``scripts/check-native-shells.mjs`、宿主壳能力统一协议文档。
- 验证方式:`npm run check:native-shells``npm run check:encoding``git diff --check`
@@ -43,6 +43,8 @@ AI H5 sandbox
生产替身词扫描只覆盖上述壳源码、分发配置、共享 HostBridge 契约和已接入真实宿主能力的 H5 调用链;Expo export、Tauri `target/`、Cargo / Metro 缓存和 release 构建产物不进入扫描范围,避免本地或 CI 生成文件污染源码门禁。
声明为宿主请求能力的 desktop capability 必须在 `apps/desktop-shell/src-tauri/src/host_bridge/dispatch.rs` 命中真实模块委托,不能只由 `unsupported_method``unsupported_capability` 或 fallback 分支支撑;`apps/desktop-shell/scripts/check-config.mjs` 负责反查声明能力与委托函数的对应关系。H5 内置玩法如果通过 `navigation.openNativePage` 打开受控原生壳路由,也必须在 `scripts/check-native-shells.mjs` 登记 route flow、H5 fallback、路由表和命名交互测试,避免新增内置入口只停留在普通 Web 跳转。
桌面窗口状态持久化只属于 Tauri 宿主壳自身体验,不进入 HostBridge method 或 capability。`apps/desktop-shell/src-tauri/src/shell/window_state.rs` 必须用 Rust 单测证明只保存大小、位置和最大化状态,并排除可见性、全屏和装饰状态;`npm run check:native-shells` 会反查该测试边界。
桌面拖拽图片事件只在 Tauri 主窗口拖入真实有效图片时派发 `file.imageDropped`。目录、文本、损坏图片或没有任何有效图片的拖入不得生成 HostBridge payload,也不得把本地路径暴露给 H5;桌面壳配置检查会反查 `file_drop.rs` 的无效拖入单测。