evaluating-sdk-internal-updates

Évalue une PR bitwarden/android « Update SDK to » par rapport à la plage de commits sdk-internal pour les changements cassants au moment de la compilation et à l’exécution, mappe les symboles affectés à…

npx skills add https://github.com/bitwarden/android --skill evaluating-sdk-internal-updates

Evaluating sdk-internal Updates

Identify both compile-time and runtime breaks before fixing anything — fixing the first break found is not finishing. Steps 3-7 always cover the entire commit range before step 8 starts, no matter how obvious or urgent an early compile-time break looks.

Identify

Binding surface facts specific to this SDK: #[uniffi::export] / derive(uniffi::...) annotations are scattered across many crates, not just crates/bitwarden-uniffi; crates/bitwarden-ffi is unrelated ("do not use"). No .udl files. UniFFI emits one Kotlin package per crate (com.bitwarden.core, com.bitwarden.vault, com.bitwarden.crypto, etc.) — only the top-level Client/AuthClient/GeneratorClients actually live under com.bitwarden.sdk. Both app and authenticator depend on the SDK; neither is optional to search.

A hunk that only touches a macro invocation (e.g. state_bridge! { ... }) doesn't show the binding surface — the expansion lives in the macro's definition, often in a different crate (e.g. bitwarden-state-bridge-macro). #[uniffi::export(with_foreign)] marks a callback interface: a trait Kotlin must implement, where adding a field/method is never additive-safe for the implementor.

  1. Locate the local bitwarden/sdk-internal clone (check sibling directories to this repo). If none exists, stop and tell the user it's a required prerequisite for this skill — do not clone it yourself.
  2. gh pr diff <PR> -R bitwarden/android | grep bitwardenSdk → old/new bitwardenSdk string. Everything after the second - is the git ref — a commit SHA or a branch name (.dev SDK builds use both); resolve a branch name as origin/<branch> in the clone.
  3. Attempt ./gradlew app:compileStandardDebugKotlin authenticator:compileDebugKotlin at the current checkout before crawling sdk-internal. A failure confirms a compile-time break directly, with a more precise location than any git search — note it and continue to steps 4-7 for the full commit range; do not fix it yet. A clean build only rules out compile-time breaks, not runtime ones.
  4. git -C <sdk-internal-path> log --oneline OLD..NEW -G'uniffi::export|derive\(uniffi|#\[uniffi' -- '*.rs' → candidate binding-surface commits.
  5. Classify per hunk, not per commit — a commit with one additive headline change can still have a second, unrelated breaking hunk. If a hunk only touches a macro invocation, read the macro's definition before classifying. git -C <sdk-internal-path> show <sha> -- '*.rs'.
  6. For every distinct symbol/type touched (every hunk, not just the commit's headline change), grep the whole repo for the bare symbol name to find Android call sites — a fixed module list or a com.bitwarden.sdk.<Symbol> import-prefix check both miss real consumers.
  7. Report: compile-time breaks, runtime breaks, safe/no-call-site — each with commit, symbol, and call sites. Cite sdk-internal commits and PRs as bitwarden/sdk-internal#<NNN> or a full commit URL/SHA — never a bare #<NNN> copied from a commit subject line. A bare reference auto-links within whatever repo the report is posted to (e.g. bitwarden/android), tagging an unrelated issue or PR there.

Resolve

Resolve the findings from Step 7 by deciding on a fix (step 8), implementing and committing it directly (step 9), then verifying (step 10).

  1. Decide the fix for anything found, compile-time or runtime, whenever the correct behavior is clear and within scope. For a new required method, grep for the underlying concept, not the new method/type name (it won't exist yet) — no existing consumer means stub it: a // no-op comment or a null/default return that satisfies the compiler, not a behavioral decision. Never TODO() — it throws at runtime, which is a crash, not a stub. A sibling's structure (naming, placement, style) is a template; its behavior (storage, defaulting, error handling, side effects) is not evidence for yours. If unsure, report it instead of guessing, along with anything needing a product decision.
  2. Implement every fix from step 8 directly: invoke Skill(implementing-android-code) first if the fix isn't purely mechanical, then commit with Skill(bitwarden-delivery-tools:committing-changes).
  3. Verify with the same compile task used in step 3.

Plus de skills de bitwarden

figma-to-angular
bitwarden
Cette compétence transforme un cahier des charges Figma en un composant Angular entièrement implémenté avec des stories Storybook dans le monorepo Bitwarden Clients. Le résultat doit correspondre visuellement au design tout en respectant toutes les conventions du codebase.
force-multiplier
bitwarden
Appliquez une intention unique à de nombreuses cibles à la fois — une flotte de dépôts à travers l’écosystème Bitwarden, ou de nombreux projets au sein d’un monorepo — comme N cohérents, …
analyzing-git-sessions
bitwarden
Analyse les commits et modifications Git dans un intervalle de temps ou une plage de commits, fournissant des résumés structurés pour la revue de code, les rétrospectives, les journaux de travail ou les sessions…
coordinating-cross-team-breakdown
bitwarden
Coordonner la revue et l'approbation inter-équipes pour un Bitwarden Tech Breakdown. Utiliser lors de l'identification des équipes concernées, de la construction du tableau d'approbation de la Partie 3, de la relance…
assessing-jira-issue-relevance
bitwarden
À utiliser lorsque l'utilisateur fournit une clé de ticket Jira unique et demande si elle est toujours pertinente, toujours applicable, toujours en attente, toujours un bug, a été corrigée, ou peut…
assessing-test-coverage
bitwarden
À utiliser pour déterminer quelle couverture de tests EXISTE déjà pour un changement spécifique (une PR, une clé Jira, un document Tech Breakdown, un CSV Testmo, des chemins modifiés ou des éléments nommés…
retrospecting
bitwarden
Effectue une analyse complète des sessions Claude Code, en examinant l'historique git, les journaux de conversation, les modifications de code, et en recueillant les retours utilisateurs pour générer…
reviewing-incremental-changes
bitwarden
Utilisez cette compétence lors de la re-vérification d'une PR qui contient déjà des commentaires ou lors de la réponse aux modifications du développeur après la vérification initiale. Appliquez-la lorsque des fils de discussion de PR existent ou…