You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a plain currency/maintenance ticket, not a security one.
Why it is still worth doing
Falling further behind makes each eventual upgrade larger and riskier.
AGP upgrades are the mechanism by which the netty and BouncyCastle resolution pins eventually get to be deleted — both pins carry an explicit drop-condition tied to a future AGP. Staying current is how those drop-conditions get evaluated.
AGP/Kotlin/KSP versions are lockstepped; drifting on one constrains the others.
Risk
Non-trivial for this repo — AGP upgrades touch the areas with the most documented footguns:
Screenshot goldens: the 11 Robolectric @GraphicsMode(NATIVE) goldens are byte-exact and host-non-portable. If a toolchain change moves any pixel, regeneration must go through CI (screenshot-goldens-actual artifact) — never a locally-rendered golden. Scope carefully first: grep the screenshot-test sources for the affected roles before assuming a full 11-golden regen.
UTP / instrumented tests: the androidTest job is a required check and is where UTP changes actually surface.
Dependency lock:app/gradle.lockfile will likely move; that diff is expected here (unlike in the pin PRs, where a byte-identical lockfile is the proof nothing shipped changed).
Signing: verify apksigner verify --print-certs still reports the lifetime cert ec9a4bb8…b3d9.
Regenerate the lockfile; review the diff deliberately.
Full local gate: assembleDebug, testDebugUnitTest, lintDebug, detekt, assembleRelease + apksigner verify.
Emulator connectedDebugAndroidTest, or rely on the required androidTest CI check.
Re-evaluate the drop-conditions on the netty and BouncyCastle pins — if 9.3.x happens to ship patched transitives, delete the corresponding pin block in the same PR.
Priority: P3
Context
gradle/libs.versions.toml:2pins AGP 9.2.1. Stable 9.3.0, 9.3.1, and 9.3.2 have all shipped — the repo is three stable releases behind.Surfaced while triaging the 2026-08 Dependabot alert wave.
Explicitly NOT a security lever
Worth stating up front so nobody re-derives it: upgrading AGP does not fix any currently open alert.
apkzlib9.3.2 still declares bcprov/bcpkix 1.79 — verified by fetching the POM. No stable AGP fixes it.This is a plain currency/maintenance ticket, not a security one.
Why it is still worth doing
Risk
Non-trivial for this repo — AGP upgrades touch the areas with the most documented footguns:
LocalContextGetResourceValueCalltrap that broke feat(i18n): externalize Compose UI strings + German translation (#168) #217 came in this way.@GraphicsMode(NATIVE)goldens are byte-exact and host-non-portable. If a toolchain change moves any pixel, regeneration must go through CI (screenshot-goldens-actualartifact) — never a locally-rendered golden. Scope carefully first:grepthe screenshot-test sources for the affected roles before assuming a full 11-golden regen.androidTestjob is a required check and is where UTP changes actually surface.app/gradle.lockfilewill likely move; that diff is expected here (unlike in the pin PRs, where a byte-identical lockfile is the proof nothing shipped changed).apksigner verify --print-certsstill reports the lifetime certec9a4bb8…b3d9.Proposed approach
gradle/libs.versions.toml; check whether Kotlin/KSP need to move in lockstep (note security(accept-risk): kotlin-gradle-plugin GHSA-r937-wjx7-w2jp has no compatible stable fix (alert #45) #292: a Kotlin bump has its own constraints).assembleDebug,testDebugUnitTest,lintDebug,detekt,assembleRelease+apksigner verify.connectedDebugAndroidTest, or rely on the requiredandroidTestCI check.Acceptance criteria
build+androidTestgreenapksigner verify --print-certsreportsec9a4bb8…b3d9unchangedRelated: #290, #291.