SuperAPI AI 工具集

evaluating-sdk-internal-updates

编程与开发

查看项目

更新于 10-15 17:26

技能介绍

用途:评估 bitwarden/android 的“Update SDK to”PR,在 sdk-internal 的提交区间内同时找出编译期与运行期破坏性变更,再决定并实施修复。步骤3至7须覆盖整个提交区间,不能因早期编译错误显眼就提前动手。

识别阶段要点:该 SDK 的绑定面事实是 #[uniffi::export]、derive(uniffi::...) 注解散布在多个 crate,不只是 crates/bitwarden-uniffi;crates/bitwarden-ffi 无关,不要使用。没有 .udl 文件。UniFFI 每个 crate 生成一个 Kotlin 包(如 com.bitwarden.core、com.bitwarden.vault、com.bitwarden.crypto),只有顶层 Client/AuthClient/GeneratorClients 位于 com.bitwarden.sdk。app 与 authenticator 都依赖该 SDK,搜索时都不能跳过。

仅触及宏调用(如 state_bridge! { ... })的 hunk 不体现绑定面,其展开在宏定义里,常位于其他 crate。#[uniffi::export(with_foreign)] 标记回调接口,即 Kotlin 必须实现的 trait,新增字段或方法对实现方永不安全。

必要前置与命令:需已存在本地 bitwarden/sdk-internal 克隆(可查本仓库同级目录);没有则停止并告知用户,不要自行克隆。用 gh pr diff <PR> -R bitwarden/android | grep bitwardenSdk 取新旧字符串,第二个 - 之后是 git ref(SHA 或分支名),分支名在克隆中解析为 origin/<branch>。

在爬取前先尝试 ./gradlew app:compileStandardDebugKotlin authenticator:compileDebugKotlin;失败即确认编译期破坏并给出更精确定位,记录后仍继续步骤4-7,不要先修。构建通过只能排除编译期破坏,不能排除运行期。

用 git -C <sdk-internal-path> log --oneline OLD..NEW -G'uniffi::export|derive(uniffi|#[uniffi' -- '.rs' 找候选提交;按 hunk 而非按提交分类,必要时 git -C <sdk-internal-path> show <sha> -- '.rs' 查看。对每个被触及符号在整仓库 grep 裸符号名找调用点,固定模块列表或 import 前缀检查会漏。报告需列出编译期破坏、运行期破坏、安全/无调用点,各附提交、符号与调用点;引用 sdk-internal 提交或 PR 用 bitwarden/sdk-internal#<NNN> 或完整 URL/SHA,不要裸 #<NNN>。

解决阶段:对行为明确且范围内的编译期或运行期问题直接决定修复;新增必需方法时按底层概念搜索,无消费者则做桩(// no-op 注释或满足编译器的 null/默认返回),绝不用 TODO(),因为会在运行期抛出崩溃。同级代码结构可作模板,其行为不构成你方证据。不确定或需产品决策的事项应上报而非猜测。修复非纯机械时先调用 Skill(implementing-android-code),再用 Skill(bitwarden-delivery-tools:committing-changes) 提交,最后用步骤3相同的编译任务验证。