Symptom

Step 1 of openspec/changes/upgrade-agp-9-1-1 calls for the first staged AGP minor bump: 8.12.38.13.x. The latest 8.13 patch published on dl.google.com/android/maven2/com/android/tools/build/gradle is 8.13.2 (newer than the placeholder 8.13.0 referenced in the spec). Goal of this PR: bump the version-catalog agp ref, run the --warning-mode=all gate, fix any new AGP-attributed deprecations introduced by 8.13.2 versus the Step 0 baseline, keep the test gate + release build green.

Root cause

The repo was running AGP 8.12.3 — three minor versions and a major version behind the spec target of 9.1.1. The plan deliberately stages the upgrade one minor at a time so any deprecation that 9.0 promotes to a hard error is fixed at the minor that introduces the warning, not at the major-version cliff. The 8.13 bump is the cheapest of the four hops (no Variant API surface changes vs. 8.14, no plugin-removal cliff vs. 9.0).

Fix

gradle/libs.versions.toml — single edit, agp = "8.12.3"agp = "8.13.2". No other bumps were required: Compose Multiplatform plugin (1.10.3), Kotlin (2.3.21), Compose runtime/material3 versions, ProGuard Gradle (7.9.1), Roborazzi (1.48.0), and the Google Services plugin (4.4.4) all keep working against AGP 8.13.2.

docs/lessons/2026-05-04-agp-baseline-step-0.md already documents the two AGP-internal multi-string-notation warnings (lint-gradle, aapt2:…:linux); on 8.13.2 they re-appear with bumped classifiers (lint-gradle:31.13.2, aapt2:8.13.2-14304508:linux) but no new AGP-attributed warning surfaced — i.e. the bump introduced zero new deprecations in our build files.

Verification (all run with JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64, per the per-user feedback that JDK 25 is the system default but the project targets JDK 21):

Prevention

  1. Read the Maven metadata, don’t trust the spec’s placeholder version. The plan was written when 8.13.0 was the latest patch; by the time this PR landed, 8.13.2 was the latest. Always re-check dl.google.com/android/maven2/com/android/tools/build/gradle/maven-metadata.xml immediately before editing the catalog — every step of tasks.md that says “8.13.x” / “8.14.x” / “9.0.x” applies the same rule.
  2. The two AGP-internal multi-string-notation warnings will keep shadowing every AGP step’s --warning-mode=all log until AGP fixes them upstream. Don’t waste a triage cycle treating them as new regressions; their classifier values are the only thing that changes (lint-gradle:31.<minor>.<patch>, aapt2:<agp-version>-<build>:linux). The “AGP-attributed-but-fixable-in-our-tree” set stays empty across 8.12.3 → 8.13.2; if the 8.14 or 9.0 step ever surfaces a new warning whose source path is our build.gradle.kts or libs.versions.toml, that’s the signal to fix it at that step’s PR before merging — exactly the pattern the staging plan is built around.
  3. Use :shared:jvmTest, not :shared:test. The KMP convention propagates to every step that reuses task 2.7’s command — the typo in tasks.md is corrected in this PR so Step 2/3/4 don’t re-bump into it.