docs(plan): bump all dependency versions to verified latest stable

All versions verified against canonical registries on 2026-06-08:

- Kotlin 2.1.0 -> 2.3.21 (paired with KSP)
- AGP 8.7.2 -> 9.1.1
- KSP 2.1.0-1.0.29 -> 2.3.9
- Hilt 2.53 -> 2.59.2
- Compose BOM 2025.05.00 -> 2026.06.00
- Material 3 -> PINNED to 1.5.0-alpha21 (Expressive APIs live only here)
- AndroidX Core KTX 1.15.0 -> 1.19.0
- Lifecycle 2.8.7 -> 2.10.0
- Activity Compose 1.9.3 -> 1.13.0
- DataStore 1.1.1 -> 1.2.1
- JUnit Jupiter 5.11.4 -> 6.1.0 (with unified platform 6.1.0)
- Truth 1.4.4 -> 1.4.5
- AndroidX Test JUnit 1.2.1 -> 1.3.0
- Espresso 3.6.1 -> 3.7.0
- Gradle 8.14 -> 9.5.1 (required by AGP 9.1.1; bootstrap via two-step
  wrapper upgrade from HouseHoldKeaper's 8.14 wrapper)

Also moved kotlinOptions DSL to the new top-level kotlin {} block
(required with Kotlin 2.3+ / AGP 9.x).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jean-Luc Makiola
2026-06-08 14:52:44 +02:00
parent f13523c865
commit d951089e88

View File

@@ -6,14 +6,19 @@
**Architecture:** Single Gradle module `:app`, Kotlin 2.1 + Jetpack Compose mit Material 3 Expressive (1.5+), Hilt für DI, DataStore-Preferences für App-Settings. Build via Gradle Kotlin DSL und Version Catalog (`libs.versions.toml`). CI über Gitea Workflows (adaptiert von HouseHoldKeaper, Flutter-Steps durch Gradle-Steps ersetzt). Alle Resourcen + Strings i18n-fähig ab Tag 1 (DE + EN). **Architecture:** Single Gradle module `:app`, Kotlin 2.1 + Jetpack Compose mit Material 3 Expressive (1.5+), Hilt für DI, DataStore-Preferences für App-Settings. Build via Gradle Kotlin DSL und Version Catalog (`libs.versions.toml`). CI über Gitea Workflows (adaptiert von HouseHoldKeaper, Flutter-Steps durch Gradle-Steps ersetzt). Alle Resourcen + Strings i18n-fähig ab Tag 1 (DE + EN).
**Tech Stack:** **Tech Stack (versions verified 2026-06-08 against canonical registries):**
- Kotlin 2.1.0, Gradle 8.14 (bootstrapped from HouseHoldKeaper's wrapper), AGP 8.7.2, JVM Target 17 - Kotlin 2.3.21 (paired with KSP — Kotlin 2.4.0 has no KSP release yet)
- Gradle 9.5.1 (bootstrap from HouseHoldKeaper's 8.14 wrapper, then `wrapper --gradle-version 9.5.1`)
- AGP 9.1.1, JVM Target 17
- minSdk 29, targetSdk 36, compileSdk 36 - minSdk 29, targetSdk 36, compileSdk 36
- Jetpack Compose BOM 2025.05.00, Material3 1.5.0 (Expressive APIs) - Jetpack Compose BOM 2026.06.00 (provides Material 3 1.4.0 by default; we override material3 to 1.5.0-alpha21 explicitly)
- Hilt 2.53 + KSP 2.1.0-1.0.29 - **Material 3 1.5.0-alpha21** — Expressive APIs only exist in 1.5 alpha line; accepting alpha is intentional because Expressive is the whole point of this app
- AndroidX DataStore Preferences 1.1.1 - Hilt 2.59.2 + KSP 2.3.9
- Tests: JUnit5 5.11.x + Truth 1.4.4 + Compose UI Test (BOM) - AndroidX Core KTX 1.19.0, Lifecycle Runtime KTX 2.10.0, Activity Compose 1.13.0
- CI: Gitea Actions auf Docker-Runner (Java 17 + Android SDK 36) - AndroidX DataStore Preferences 1.2.1
- Tests: JUnit Jupiter 6.1.0 (unified launcher version) + Truth 1.4.5 + Compose UI Test (BOM)
- AndroidX Test JUnit 1.3.0, Espresso 3.7.0
- CI: Gitea Actions on Docker runner (Java 17 + Android SDK 36)
--- ---
@@ -582,23 +587,28 @@ include(":app")
- [ ] **Step 2: Create `gradle/libs.versions.toml`** - [ ] **Step 2: Create `gradle/libs.versions.toml`**
> All versions verified against canonical registries on 2026-06-08. Material 3 is pinned to alpha intentionally — see the `material3` comment below.
```toml ```toml
[versions] [versions]
agp = "8.7.2" agp = "9.1.1"
kotlin = "2.1.0" kotlin = "2.3.21"
ksp = "2.1.0-1.0.29" ksp = "2.3.9"
hilt = "2.53" hilt = "2.59.2"
coreKtx = "1.15.0" coreKtx = "1.19.0"
lifecycleRuntime = "2.8.7" lifecycleRuntime = "2.10.0"
activityCompose = "1.9.3" activityCompose = "1.13.0"
composeBom = "2025.05.00" composeBom = "2026.06.00"
material3 = "1.5.0" # Material 3 Expressive APIs currently live only in the 1.5 alpha line.
datastore = "1.1.1" # Pin explicitly to override the BOM (which ships stable 1.4.0).
junit = "5.11.4" # Re-evaluate when 1.5.0 stable lands.
junitJupiterPlatform = "1.11.4" material3 = "1.5.0-alpha21"
truth = "1.4.4" datastore = "1.2.1"
androidxJunit = "1.2.1" junit = "6.1.0"
espressoCore = "3.6.1" junitPlatform = "6.1.0"
truth = "1.4.5"
androidxJunit = "1.3.0"
espressoCore = "3.7.0"
[libraries] [libraries]
# AndroidX core # AndroidX core
@@ -628,7 +638,7 @@ androidx-datastore-preferences = { group = "androidx.datastore", name = "datasto
# Unit tests # Unit tests
junit-jupiter-api = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" } junit-jupiter-api = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" }
junit-jupiter-engine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" } junit-jupiter-engine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" }
junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitJupiterPlatform" } junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitPlatform" }
truth = { group = "com.google.truth", name = "truth", version.ref = "truth" } truth = { group = "com.google.truth", name = "truth", version.ref = "truth" }
# Android tests # Android tests
@@ -691,11 +701,17 @@ cp /home/jlmak/Projects/jlmak/HouseHoldKeaper/android/gradle/wrapper/gradle-wrap
chmod +x gradlew chmod +x gradlew
``` ```
Gradle 8.14 is compatible with AGP 8.7.2 (Gradle is backward-compatible for AGP versions; newer Gradle works fine). - [ ] **Step 6: Upgrade the wrapper to the version AGP 9.1.1 requires**
- [ ] **Step 6: Verify gradle wrapper works (with JDK 17)** AGP 9.1.1 mandates Gradle ≥ 9.3.1. Use 9.5.1 (latest stable). This step uses Gradle 8.14 just to upgrade itself — safe because no AGP is wired in yet:
The system default JDK is 26, but AGP 8.7.2's compatibility envelope is JDK 1721. Use JDK 17 explicitly for every gradle invocation in this plan: ```bash
JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./gradlew wrapper --gradle-version 9.5.1 --distribution-type bin
```
Expected: Gradle downloads 9.5.1, writes the new `gradle-wrapper.properties` and `gradle-wrapper.jar`. Output ends with `BUILD SUCCESSFUL`.
- [ ] **Step 7: Verify the upgraded wrapper works**
```bash ```bash
JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./gradlew --version JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./gradlew --version
@@ -703,12 +719,12 @@ JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./gradlew --version
Expected output includes: Expected output includes:
``` ```
Gradle 8.14 Gradle 9.5.1
``` ```
> Going forward in this plan, every `./gradlew ...` invocation must be prefixed with `JAVA_HOME=/usr/lib/jvm/java-17-openjdk` on this dev machine. CI sets `setup-java@v4 java-version: 17` so no prefix is needed there. > Going forward in this plan, every `./gradlew ...` invocation must be prefixed with `JAVA_HOME=/usr/lib/jvm/java-17-openjdk` on this dev machine (the system default is JDK 26, but AGP 9.1.1's compatibility envelope is JDK 1721). CI sets `setup-java@v4 java-version: 17` so no prefix is needed there.
- [ ] **Step 7: Commit** - [ ] **Step 8: Commit**
```bash ```bash
git add settings.gradle.kts build.gradle.kts gradle.properties gradle/ git add settings.gradle.kts build.gradle.kts gradle.properties gradle/
@@ -787,9 +803,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
} }
kotlinOptions {
jvmTarget = "17"
}
buildFeatures { buildFeatures {
compose = true compose = true
@@ -802,10 +815,14 @@ android {
} }
testOptions { testOptions {
unitTests.all { test -> unitTests.all { it.useJUnitPlatform() }
test.useJUnitPlatform()
} }
} }
kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
} }
dependencies { dependencies {
@@ -1848,9 +1865,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
} }
kotlinOptions {
jvmTarget = "17"
}
buildFeatures { buildFeatures {
compose = true compose = true
@@ -1863,10 +1877,14 @@ android {
} }
testOptions { testOptions {
unitTests.all { test -> unitTests.all { it.useJUnitPlatform() }
test.useJUnitPlatform()
} }
} }
kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
} }
dependencies { dependencies {