Skip to content

chore(deps): the Android tier, and the Kotlin version this build does not own - #469

Merged
doublegate merged 2 commits into
mainfrom
chore/android-dependency-refresh
Aug 25, 2026
Merged

chore(deps): the Android tier, and the Kotlin version this build does not own#469
doublegate merged 2 commits into
mainfrom
chore/android-dependency-refresh

Conversation

@doublegate

Copy link
Copy Markdown
Owner

Takes the Android dependency set to current, and settles a question the previous
refresh deferred on purpose.

Supersedes all five open Dependabot PRs — #463 (jna), #464
(compose-bom), #465 (adaptive-layout), #466
(play-services-games-v2), #467 (AGP).

What moves

Dependency From To
com.android.application / com.android.test 9.2.1 9.3.2
Compose compiler plugin 2.3.10 2.3.21
androidx.baselineprofile + benchmark-macro-junit4 1.5.0-alpha06 1.5.0-rc01
androidx.compose:compose-bom 2026.06.00 2026.08.00
material3.adaptive ×3 1.2.0 1.3.0
net.java.dev.jna 5.18.1 5.19.1
play-services-games-v2 21.0.0 22.0.0

The mechanism working as designed

The gradle ecosystem was added in #462 specifically because this set could
not be hand-bumped safely — an interlocked group, each pin carrying a written
reason, none verifiable without an Android SDK and NDK. Its first run opened
five PRs.

Two of the bumps here are not among those five. The Compose compiler plugin
and baselineprofile are absent because open-pull-requests-limit is 5 and all
five slots were taken — not because Dependabot judged them incompatible. A
saturated limit looks exactly like "nothing else to update", which is why it is
written down rather than inferred from an empty queue.

The interlock, measured

AGP 9.2.1 and 9.3.2 declare the same kotlin-gradle-plugin coordinate
(2.2.10) in their published POMs, so crossing that minor does not move the
Kotlin requirement. Fetched from dl.google.com, not recalled.

The Kotlin version this build does not own

Asked directly during review: can kotlin-gradle-plugin be taken to 2.2.10+?

It cannot, and the reason is a decision already recorded in the build script.
AGP 9 ships built-in Kotlin — it bundles the Kotlin Gradle plugin — so the
standalone org.jetbrains.kotlin.android plugin was deliberately dropped from
the root script and from :app. There is no kotlin-gradle-plugin version in
this build to set.
AGP owns it; to move Kotlin, move AGP.

Re-adding org.jetbrains.kotlin.android with an explicit version would
reintroduce exactly the standalone plugin AGP 9 replaces, and two things
applying Kotlin at once is the failure that drop avoided.

One further distinction is recorded so nobody re-derives the wrong conclusion
from the same POM: that 2.2.10 is AGP's own runtime dependency, not the
Kotlin the build compiles user code with. The evidence is already in the tree —
AGP 9.2.1 has been pairing with a 2.3.x Compose compiler plugin and building
green. The Compose compiler plugin is the only Kotlin coordinate this build
controls, and it moves here.

alpha → rc

androidx.baselineprofile moves within the same 1.5.0 line. Its written
reason for existing — 1.4.x's module-type guard rejects an AGP-9 application
module, and 1.5.0 is the first to widen the supported-AGP window — is unchanged.
Same window, fewer unknowns; not a new dependency decision.

Scope, and why it is only Android

Cargo, GitHub Actions and the pre-commit hooks were re-checked at the same time
and are all already current from #462: cargo update proposes nothing, and
every pinned action equals its newest release. Stated because "we checked and
there was nothing" is a different claim from "we did not look".

Verification

android.yml runs on this PR (it triggers on android/**) and is the only
thing that can validate these — there is no Android SDK or NDK on this machine.
It is also not a required check, so a red job blocks nothing: the job result
will be read before this is called green, rather than inferred from the merge
button being available.

No Rust changes, so AccuracyCoin and nestest are untouched by construction.

Copilot AI lite review requested due to automatic review settings August 25, 2026 04:23
@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 0a3c36ff-49be-483e-a0db-945dce8a2507

Warning

Your free Security trial is over. An organization admin can activate billing to continue.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions

github-actions Bot commented Aug 25, 2026

Copy link
Copy Markdown

Antigravity review (Gemini via Ultra)

This PR updates the Android Gradle Plugin, Compose ecosystem, and several other dependencies, adding extensive commentary on how AGP and the Compose compiler plugin interact.

Blocking issues

None found.

Suggestions

  • android/app/build.gradle.kts (line 367): play-services-games-v2 is bumped across a major version boundary (21.0.0 to 22.0.0). Verify that this release does not introduce breaking API or behavioral changes that affect the app, as there are no accompanying source code updates in this PR.

Nitpicks

  • android/build.gradle.kts: The new comments use ALL CAPS for emphasis (e.g., THERE IS THEREFORE NO..., THAT COORDINATE IS...). Consider relying on standard prose or markdown formatting (like asterisks, which you already use elsewhere) for readability instead of shouting.

Automated first-pass review by agy on a self-hosted runner -- not a human review.

Earlier review rounds (newest first)
Round reviewed at 2026-08-25 05:09 UTC

Antigravity review (Gemini via Ultra)

This PR updates various Android dependencies, including Android Gradle Plugin to 9.3.2, the Compose BOM to 2026.08.00, and the Compose compiler plugin to 2.3.21.

Blocking issues

None found.

Suggestions

  • android/build.gradle.kts (lines 12-32): The extensive, argumentative commentary detailing the review history of the Kotlin version ("Settled by building rather than by argument...") violates the convention to make the smallest correct change and keep comments focused on the technical why. Move this historical justification to the PR description or commit message, and remove the bloat from the build script.
  • android/app/build.gradle.kts (lines 315-317): Since you are bumping the compose-bom to 2026.08.00, verify if the androidx.compose.material3.adaptive artifacts are now included in this BOM release. If they are, you can remove the explicit :1.3.0 version declarations entirely.

Nitpicks

  • android/build.gradle.kts (lines 13, 21): Avoid ALL CAPS shouting in comments; use standard emphasis if necessary.
  • CHANGELOG.md (lines 38-50): The changelog entry contains internal PR meta-commentary (e.g., "The interlock was measured rather than assumed"). Consider trimming this to focus strictly on the dependency changes.

Automated first-pass review by agy on a self-hosted runner -- not a human review.

Earlier review rounds (newest first)
Round reviewed at 2026-08-25 04:55 UTC

Antigravity review (Gemini via Ultra)

This PR updates the Android Gradle Plugin, Compose BOM, Compose compiler, and several other Android dependencies, including a major version bump to Play Services Games v2.

Blocking issues

  • Correctness: Bumping the Compose compiler plugin (org.jetbrains.kotlin.plugin.compose) to 2.3.21 while relying on an older, AGP-bundled Kotlin version (2.2.10 per your changelog) will break the build. As of Kotlin 2.0, the Compose compiler is merged into the Kotlin repository and its plugin version must exactly match the Kotlin compiler version; they cannot be bumped independently.
  • Breaking changes: play-services-games-v2 is bumped from 21.0.0 to 22.0.0. This is a major version bump that typically introduces breaking API changes, but there are no accompanying application code updates or test validations to ensure compatibility.

Suggestions

  • CHANGELOG.md: The changelog entry reads like a developer diary ("The interlock was measured rather than assumed..."). Strip the narrative and concisely document the dependency changes.
  • android/build.gradle.kts (lines 11-23): The block comment explaining the AGP/Kotlin relationship is too verbose and relies on the flawed assumption that Compose and Kotlin versions are decoupled. Simplify it to state that AGP dictates the Kotlin version.

Nitpicks

  • android/baselineprofile/build.gradle.kts (line 94): Avoid hardcoding exact pre-release versions (1.5.0-rc01) in comments so they don't require manual edits on every patch bump; refer to the 1.5.0 line instead.

Automated first-pass review by agy on a self-hosted runner -- not a human review.

@doublegate

Copy link
Copy Markdown
Owner Author

Replying to the Antigravity review

Both blocking issues are declined, refuted by the same measurement — and the measurement is the one this PR's own description said would be the arbiter.

1. "Compose compiler plugin 2.3.21 against AGP-bundled Kotlin 2.2.10 will break the build."

The premise about Kotlin is correct: since 2.0 the Compose compiler ships in the Kotlin repository and its plugin version must match the Kotlin compiler. The reading of that 2.2.10 is not.

That coordinate is kotlin-gradle-plugin as a dependency of AGP's own artifact — AGP's runtime, not the Kotlin this build compiles user code with. Two pieces of evidence:

  • Direct: the release bundle job on this PR builds both flavours with AGP 9.3.2 and the plugin at 2.3.21 and reports BUILD SUCCESSFUL in 17m 20s — Compose compilation and R8 included. Seventeen minutes is not a no-op.
  • Pre-existing: AGP 9.2.1 declares the same 2.2.10 in its POM and has been pairing with a 2.3.x Compose plugin through shipped releases.

Recorded in android/build.gradle.kts in bf07a6c, as a measurement rather than as reasoning, so the next reader does not re-derive the wrong conclusion from the same POM.

2. "play-services-games-v2 21.0.0 → 22.0.0 is a major bump with no accompanying code updates or test validation."

Same evidence, and it is specific: the job builds the play flavour, which is the only place those APIs are referenced (PlayGames.kt, CloudSave.ktAuthenticationResult, SnapshotsClient, SnapshotMetadataChange). A removed or re-signatured API in that surface is a compile error in bundlePlayRelease, and it compiled.

What that does not prove is runtime behaviour against live Play Games services, which no CI here can reach. Stated rather than implied.

On the two suggestions:

  • CHANGELOG style — declined. The narrative form is this repository's documented convention, not an accident: AGENTS.md requires commit bodies and changelog entries that "go beyond a summary to explain architectural impact" and record why. The clause you quoted ("the interlock was measured rather than assumed") is carrying the distinction between a checked fact and an assumed one, which is exactly what this project wants preserved.
  • Build-script comment — applied, but the other way round. It is not shortened to "AGP dictates the Kotlin version", because that sentence is what makes the flawed inference available. It now states the distinction and the measurement that settles it.

Worth noting the finding did its job even though it was wrong: it named a specific, checkable failure mode, and checking it is what turned "these versions are probably fine" into a build log.

… not own

Takes the Android dependency set to current, and settles a question the last
refresh deferred on purpose.

  * AGP 9.2.1 -> 9.3.2, both `com.android.application` and `com.android.test`
  * Compose compiler plugin 2.3.10 -> 2.3.21
  * androidx.baselineprofile 1.5.0-alpha06 -> 1.5.0-rc01, and the matching
    benchmark-macro-junit4 in :baselineprofile
  * compose-bom 2026.06.00 -> 2026.08.00
  * material3.adaptive, adaptive-layout and adaptive-navigation 1.2.0 -> 1.3.0
  * net.java.dev.jna 5.18.1 -> 5.19.1
  * play-services-games-v2 21.0.0 -> 22.0.0

The previous refresh added the `gradle` Dependabot ecosystem specifically
because this set could NOT be hand-bumped safely -- an interlocked group, each
pin carrying a written reason, none verifiable without an Android SDK and NDK.
Its first run opened five PRs.

Two of the bumps here are NOT among those five. The Compose compiler plugin and
`baselineprofile` are absent because `open-pull-requests-limit` is 5 and all
five slots were taken, not because Dependabot judged them incompatible. A
saturated limit looks exactly like "nothing else to update", which is why it is
written down here rather than left to be inferred from an empty queue.

AGP 9.2.1 and 9.3.2 declare the SAME `kotlin-gradle-plugin` coordinate (2.2.10)
in their published POMs, so crossing that minor does not move the Kotlin
requirement. Fetched from dl.google.com, not recalled.

Asked directly: can `kotlin-gradle-plugin` be taken to 2.2.10+?

It cannot, and the reason is a decision already recorded in this file. AGP 9
ships built-in Kotlin -- it bundles the Kotlin Gradle plugin -- so the standalone
`org.jetbrains.kotlin.android` plugin was deliberately dropped from the root
script and from :app. THERE IS NO `kotlin-gradle-plugin` VERSION IN THIS BUILD
TO SET. AGP owns it, and to move Kotlin you move AGP.

The obvious next move -- re-adding `org.jetbrains.kotlin.android` with an
explicit version -- would reintroduce exactly the standalone plugin AGP 9
replaces, and two things applying Kotlin at once is the failure the drop
avoided.

One further distinction is recorded so it is not re-derived from the same POM:
that 2.2.10 coordinate is AGP's OWN runtime dependency, not the Kotlin the build
compiles user code with. The evidence is in the tree already -- AGP 9.2.1 has
been pairing with a 2.3.x Compose compiler plugin and building. The Compose
compiler plugin is the only Kotlin coordinate this build controls, and it moves
here.

`androidx.baselineprofile` moves within the SAME 1.5.0 line. The written reason
for pinning that line -- 1.4.x's module-type guard rejects an AGP-9 application
module, and 1.5.0 is the first to widen the supported-AGP window -- is unchanged;
this is the same window with fewer unknowns, not a new dependency decision.

Cargo, GitHub Actions and the pre-commit hooks were re-checked at the same time
and are all already current from the previous refresh: `cargo update` proposes
nothing, and every pinned action equals its newest release. Stated because "we
also checked and there was nothing" is a different claim from "we did not look".

`android.yml` runs on this PR because it triggers on `android/**`, and it is the
only thing that can validate these -- there is no Android SDK or NDK here. It is
also NOT a required check, so a red job blocks nothing: the job result is read
before this is called green rather than inferred from the merge button.
…ing it

Review raised, as a blocking issue, that the Compose compiler plugin must equal
the Kotlin compiler version and that 2.3.21 against AGP's POM-declared 2.2.10
would break the build. The premise about Kotlin is right; the reading of that
POM entry is not.

Settled by measurement rather than argument: the release bundle job builds both
flavours with AGP 9.3.2 and the plugin at 2.3.21 and reports BUILD SUCCESSFUL in
17m20s, Compose compilation and R8 included. The comment now records that
instead of reasoning toward it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants